algoritmus - vyvojovy diagram
-
Old Dirty Bastard
Guru
- Príspevky: 2658
- Registrovaný: 13 júl 2006, 8:05
- Bydlisko: phpbb_posts
algoritmus - vyvojovy diagram
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ť?
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ť?
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).
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
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Re: algoritmus - vyvojovy diagram
johny_sk - tvoj algoritmus najde delitele cisla N, ale nie je to rozlozenie na sucin

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.Old Dirty Bastard napísal: Zadanie znie:
Navrhnite algoritmus, ktory vypočita rozloženie prirodzeneho čisla N na sučin prirodzenych čisel
-
pheo
Light Star
- Príspevky: 212
- Registrovaný: 20 sep 2005, 16:53
- Bydlisko: moje hniezdo
- Kontaktovať používateľa:
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 :
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
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)
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_Eratostheneseh, samozrejme...
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)
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
- Príspevky: 2658
- Registrovaný: 13 júl 2006, 8:05
- Bydlisko: phpbb_posts
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
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;
}
Takze, mozes zacat kreslit.
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..
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
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
HEEELP
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.

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.
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..
Hadam pochopis:
Potom si mozes este poosetrovat vstupy atd.
btw. Taketo temy (teda keby aspon temy ze?
) sa tu objavuju asi kazdy rok 
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.btw. Taketo temy (teda keby aspon temy ze?
-
tina.olbreitova
Amateur
- Príspevky: 31
- Registrovaný: 07 dec 2009, 19:41
Vývojový diagram
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
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
- Príspevky: 1
- Registrovaný: 09 dec 2009, 11:38
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

-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
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
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
- Príspevky: 31
- Registrovaný: 07 dec 2009, 19:41
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š...