algoritmus - vyvojovy diagram

Programovacie jazyky, rady, poradňa...
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

algoritmus - vyvojovy diagram

Príspevok od používateľa Old Dirty Bastard »

Zdravim, potreboval by som s niečim pomôcť. Dostal som v škole zadanie navrhnuť algoritmus, ale neviem si s tym vôbec rady.

Zadanie znie:
Navrhnite algoritmus, ktory vypočita rozloženie prirodzeneho čisla N na sučin prvočisel

//Viete si niekto rady čo s tym? Resp. vedel by mi niekto pomôcť?
johny_sk
Professional
Professional
Príspevky: 1343
Registrovaný: 15 máj 2008, 21:56

Príspevok od používateľa johny_sk »

i = 1
pokym i <= zaokruhlena odmocnina z N, rob:
- Ak N delene i ma zvysok 0, i je delitel, vysledok podielu je delitel
- i= i +1

do vyvojoveho diagramu si to urcite zapises lahko, jeden cyklus a jedna podmienka...

//edit: ak by N bolo druhou mocninou, napr 4, dostanes 2 a 2 ako dva rozne delitele, preto mozes upravit
- Ak N delene i ma zvysok 0, i je delitel, vysledok podielu je delitel
na toto:
- Ak N delene i ma zvysok 0, i je delitel
- Ak je vysledok podielu rozny od i, je tiez delitel

//autoeditácia príspevku ( 01 Dec 2008, 13:29 )
potom kvoli efektivite vypoctu by bolo vhodne si tu zaokruhlenu odmocninu z N ulozit a porovnavat s ulozenou hodnotou, aby tu odmocninu komp nemusel ratat v kazdom cykle. Dalsie zefektivnenie by bolo osetrit pripad druhej mocniny na zaciatku. Potom ti staci porovnavat so zaokruhlenou odmocninou zmensenou o 1 (ktoru by si teda mal ulozenu niekde).
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Re: algoritmus - vyvojovy diagram

Príspevok od používateľa neutronmind »

johny_sk - tvoj algoritmus najde delitele cisla N, ale nie je to rozlozenie na sucin :wink:
Old Dirty Bastard napísal: Zadanie znie:
Navrhnite algoritmus, ktory vypočita rozloženie prirodzeneho čisla N na sučin prirodzenych čisel
btw. nemalo byt v zadani "rozlozenie cisla N na sucin prvocisel"? Takto by mohlo byt viacero moznosti, napr. N=100 mozes rozlozit na 4*25, ale aj 2*50. :roll:
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Príspevok od používateľa pheo »

Neviem ake mas znalosti z matematiky, ale tu si zabrdol dost hlboko ak si nikdy nemal diskretnu matematiku ... tak z toho prd pochopis. S diskretkou taký poloprd :)

No skus si nieco precitat na wikipedii :
Taky nejaky jednoduchy a casovo nenarocny po pravde nie je , možno to je aj dobre inak nieco ako ssl by bolo na nic :)

Jednoduchy & casovo nárocny
preto asi prenho bude lepsie ked to nebudu len prvocisla .....
mozes pozt hrubu silu - najjednoduchsie:
x= 2
postupne ide a y delis cislom x pokial y div x != 0 , proste pojdes a zastavis sa vtedy ak (teraz len odhadujem ale hranice si uz dolad sam) je cislo 1 y alebo x == y, po kazdom cykle samozrejme x+=1

pripadne mozne zrychlenie je pozit tu hrubu ilu hore ale za y by som volil prvocisla nagenerovane dopredu napr. eratostenovým sitom

Kód: Vybrať všetko

http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Dokonca nemusis mat vsetky tie prvocisla v pamati staci ak si nagenerujes kvantum prvocisel do suboru (desiatky MB ), a ten nasledne cistas jednym vlaknom do bufferu a druhym vyberas z bufferu (moze byt desiatky KB) a pocitas delitele (vzor: producent konzument)
johny_sk
Professional
Professional
Príspevky: 1343
Registrovaný: 15 máj 2008, 21:56

Príspevok od používateľa johny_sk »

eh, samozrejme... :oops:

teraz teda otazka k zadaniu: zrejme mas najst vsetky rozklady na sucin (okrem cisla 1 - viedlo by k zacykleniu).

Spravis rozklad na prvocisla, tj najdlhsi mozny rozklad na sucin (Euklidov algoritmus).
Dalej mozes lubovolne prenasobit lubovolne dve cisla a mas rozklad o jedno cislo kratsi. S tymto rozkladom mozes opat previest to iste atd., az dostanes rozklad dlhy dve cisla. Takto musis prejst vsetky kombinacie. Preto to bude riadne rozvetveny strom moznosti - najjednoduchsie asi pomocou rekurzie. Niekde tam mozes dat orezavanie, aby sa ti tie rozklady neopakovali (napriklad by si mal 5*5*5)
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

takže niekto tu mal pravdu... mne sa to zdalo divne.. ano su to prvočisla už som upravil aj prvy prispevok, ale stale neviem ako z toho vyjsť.
stanulik
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 729
Registrovaný: 20 okt 2007, 20:57

Príspevok od používateľa stanulik »

Old dirty bastard dufam, ze nebude vadit ak sem dam i moju prosbu o pomoc ohladom vyvojoveho diagramu.

potrebujem pomoct, resp. potrebujem niekoho ochotneho, ktory by nakreslil vyvojovy diagram na prevod cisla z osmickovej do dvojkovej sustavy. vdaka
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>

#define DLZKA 25

typedef struct intlist {
        int prvocislo;
        intlist *dalsie;
}INTLIST;

int je_prvocislo(int cislo)
{
    int i;
    
    for (i=2; i<=sqrt(cislo); i++) 
        if (cislo%i==0)
           return 0;
    
    return 1;
}

void pridaj(int cislo, INTLIST **zoznam) 
{
     static INTLIST *p_akt=NULL, *p_pom=NULL;
          
     (*zoznam)->prvocislo=cislo;
     p_pom=(INTLIST *)malloc(sizeof(INTLIST));  
     p_pom->dalsie=(*zoznam);  
     (*zoznam)=p_pom; 
}

void rozklad(int cislo, INTLIST **zoznam)
{
     
     int pole_prvocisel[DLZKA]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
     int i=0, j=pole_prvocisel[DLZKA-1]+1, vysledok;
     
     while (1) {
         if (i<DLZKA) {
            if ((cislo%pole_prvocisel[i])==0) {
               if ((cislo!=pole_prvocisel[i]))
                  rozklad((cislo/pole_prvocisel[i]), zoznam);
               vysledok=(cislo==pole_prvocisel[i]) ? cislo : pole_prvocisel[i];
               break;
            }
            i++;
         } else if (j<INT_MAX) {                        
                if (cislo%j==0) {                     
                   if (je_prvocislo(j)==1)
                      if (cislo!=j)
                        rozklad((cislo/j), zoznam);
                   vysledok=(cislo==j) ? cislo : j;
                   break;
                }
           j++;     
         }
            
     }
     pridaj(vysledok, zoznam);   
}

int main(void)
{
    INTLIST *zoznam;
    int N;
    
    printf("Program na rozklad prirodzenych cisel na prvocisla.\nPre ukoncenie zadaje cislo 0.\n\n");
    
    while (printf("Zadaj cislo: "), scanf("%d", &N), N!=0) {
       if (N<0) {
          printf("Zadali ste zaporne cislo alebo cislo mimo rozsahu 32-bitovej premennej.\n", N);
          continue;
       }    
       zoznam=(intlist *)malloc(sizeof(INTLIST));
       zoznam->dalsie=NULL;
       rozklad(N, &zoznam);
       if (zoznam->dalsie->prvocislo==N)
          printf("Cislo %d je prvocislo.\n", N);
       else {
          printf("Rozklad cisla %d na sucin prvocisel: ", N);
          while (zoznam->dalsie!=NULL) {
               zoznam=zoznam->dalsie;
               printf("%d", zoznam->prvocislo);
               if (zoznam->dalsie!=NULL)
                  printf(" * ");
          }
          putchar('\n');   
       }
    }
    
    return 0;
}
//Zdrojak som uz mierne pozmenil, mal by pracovat s lubovolne velkymi prirodzenymi cislami (samozrejme v rozsahu typu int).

Takze, mozes zacat kreslit. :D
dado26
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 112
Registrovaný: 06 okt 2005, 17:45
Bydlisko: SVK

Príspevok od používateľa dado26 »

mam na vas prosbu, moze mi niekto skontolovat ci to robi co ma? mam navrhnut..
algoritmus na prevod desiatkového čísla do doplnkového kódu na 16. bitoch. Výsledok má byť reprezentovaný ako vektor.
ak by nahodou nerobilo co ma, mohola by to nejaka dobra dusa opravit? lebo nikde tam nevidim aby to robilo do doplnoveho kodu. Stiahol som to z nejakej stranky, a vraj to robi co ma.. no skuste mi pomoct

//autoeditácia príspevku ( 16 Dec 2008, 14:15 )
nuz treba mi to odovzdat za pol hodky.. davam toto co mam, nikto nereagoval ci je to dobre..
Prílohy
vývojový diagram.rar
(3.67 KiB) 659 stiahnutí
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Myslim, ze by to tak mohlo byt, ale na zaciatku si mal dat do toho ovalu "zaciatok", pokial si spominam a "cislo" do kosodlznika, kedze sa jedna o vstup. A takisto, funckiu abs si nevyvolal s parametrom (abs(cislo))... :|
Doragon
Novice
Novice
Používateľov profilový obrázok
Príspevky: 2
Registrovaný: 23 dec 2008, 19:08

HEEELP

Príspevok od používateľa Doragon »

ahoj, potreboval by som pomoct s algoritmom.
Dostal som zadanie: Navrhnite algoritmus na prevod šestnástkového čísla do dvojkovej sústavy. Ale neviem si s tym rady prosim pomozte mi niekdo ako by som to mal urobit. Ma to byt vo forme VYVOJOVEHO DIAGRAMU.
:( :(
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

nechaj sa inspirovat - tento je z dvojkovej do osmickovej, takze ty ho spravis obdobne, ale odzadu..skus nieco aj sam, daj to sem a potom ti mozme poradit, ze kde mas chybu (ak budes mat), popripade opravit..
Doragon
Novice
Novice
Používateľov profilový obrázok
Príspevky: 2
Registrovaný: 23 dec 2008, 19:08

Príspevok od používateľa Doragon »

poviem ti to takto, zatial som este vyvojovy diagram nerobil a jak sa nato pozeram tak to nechapem ako si tam dostal daktore hodnoty a vobec...... jak to myslis zrob to odzadu? mozes mi to prosimta sem hodit ako by to malo vyzerat? :? :(
pato3335
Novice
Novice
Príspevky: 1
Registrovaný: 18 okt 2009, 14:37

program

Príspevok od používateľa pato3335 »

Bol by tu niekto ochotný a kto vie robiť v pascale?....potrebujem program ktorý z osmičkovej do desiatkovej prevedie číslo.....pls....!! díky moc!
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Hadam pochopis:

Kód: Vybrať všetko

var i,j:integer;
    znak:array [1..10] of integer;
    vys:real;

begin
     clrscr;
     i:=0;
     vys:=0;

     writeln('Zadaj cisla osobitne odklepnute enterom. Zapis cisel ukoncis zadanim cisla 8');

      repeat

            i:=i+1;
            readln(znak[i]);

      until(znak[i]=8);
      i:=i-1;

      for j:=i downto 1 do
                          if(j=i) then vys:=znak[i]*1
                           else vys:=vys+(znak[j]*exp((i-j)*ln(8)));


     writeln('V desiatkovej sustave je to: ',vys:2:0);

     readkey;
end.
Potom si mozes este poosetrovat vstupy atd.

btw. Taketo temy (teda keby aspon temy ze? :roll:) sa tu objavuju asi kazdy rok :?
tina.olbreitova
Amateur
Amateur
Príspevky: 31
Registrovaný: 07 dec 2009, 19:41

Vývojový diagram

Príspevok od používateľa tina.olbreitova »

Potrebovala by som aj ja helfnut..
stačí len nakresliť vývojový diagram algoritmu:

- na testovanie pravouhlého trojuholníka
- na prevod čísla z 10 do 2 sústavy, pričom bude vypisovať od najvyššej hodnoty.

thanks
michael227
Novice
Novice
Príspevky: 1
Registrovaný: 09 dec 2009, 11:38

Príspevok od používateľa michael227 »

potreboval by som vasu pomoc lebo som v koncoch.... navrhnite algoritmus na prevod desiatkového čísla do doplnkového kódu na 16 bitoch.
Výsledok má byť reprezentovaný ako vektor.
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

WTF? To akoze myslite vazne? Cely rok sa tu neukazete, nikomu ste v zivote na fore neporadili, teraz sa zaregistrujete lebo to potrebujete do skoly a cakate, ze vam tu vsetci budu hadzat vyvoje diagramy? Neni to vyuzivanie a trosku drze. Vacsinou to funguje tak, ze sa poradi, popr. opravi chyba ale poradit neznamena vypracovats. Hodte sem svoj vytvor a nie len zadanie(!). Byt adminom hned tuto temu :lock: :roll:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ja som to písal tu: http://www.hojko.com/citajte-pred-zaloz ... 23064.html
darmo, komu sa nechce čítať si neprečíta ani pravidla a ide na drzosť. Každopádne, nečakaj že ti sem niekto dá celé riešenie

//autoeditácia príspevku ( 09 Dec 2009, 13:11 )
tina.olbreitova: zisťovanie pravouhlého trojuholníka (vývoják) tu bol asi 2 dni dozadu (takže približne vtedy keď si písala príspevok), keby si trošku pohladala tak nájdeš. Ten prevod som si neni istý, ale ak to tu nebolo tento rok tak minulý. Takéto úlohy sa tu objavujú každý rok
tina.olbreitova
Amateur
Amateur
Príspevky: 31
Registrovaný: 07 dec 2009, 19:41

Príspevok od používateľa tina.olbreitova »

Teba akože nenapadlo, že toto fórum sme mohli objaviť až teraz a tým pádom sme tu noví a nemali sme možnosť ešte nikomu pomôcť??? A keby sme boli takí super experti, že by sme mohli každému naokolo pomáhať, tak by sme asi neprosili o pomoc, by sme si to urobili sami. Pochybujem, že si sa tu ty zaregistroval len tak z nudy, lebo nemáš čo robiť a všetko vieš...
Napísať odpoveď