Programiranje

Kako rješit ova jzadatak u pseudokodu?

IRebic pon 25.10.2010 14:33

Danas smo imali na testu ovakav zadatak:

 

Napiši program koji pronalazi i na ekran ispisiva broj n za koji vrijedi:

1+2+3...+n=5050

 

Ja sam se mislio i mislio a nisam ga baš uspio riješiti, može pomoć?

Orinem pon 25.10.2010 14:41

 

Napravis neku varijablu zbroj na koju zbrajas sve brojeve tako da uvjek imas zbroj

 

zatim forom ides od 0 do 5050 jer nemoze biti veci od toga pribrojis i na zbroj i provjeravas jeli zbroj jednak 5050 ako je ispisujes i i stavis break ;

 

EDIT: evo kod ako slucajno nisi skuzia

 

Neda mi uvuc blokove u kodu kaze da je nedozvoljen html kod :P

 

inz zbroj;

 

for (int i = 0; i < 5050; ++i)

{

zbroj += i;

if(zbroj == 5050)

{

cout << i << endl;

break;

{

}

vlad0 pon 25.10.2010 14:43
IRebic kaže...

Danas smo imali na testu ovakav zadatak:

 

Napiši program koji pronalazi i na ekran ispisiva broj n za koji vrijedi:

1+2+3...+n=5050

 

Ja sam se mislio i mislio a nisam ga baš uspio riješiti, može pomoć?

 

Ne sjećam se više kako se točno piše pseudokod, ali recimo ja bi to rješio ovako (ovo je općenito rješenje, umjesto 5050 možeš staviti bilo koji broj):

 

suma=5050

trenutnibroj=1

dalje:

ako (suma-trenutnibroj) < 0

{

ispiši "Ne postoji takav broj!"

idi na govoto:

}

ako (suma-trenutnibroj) = 0

{

ispiši n=trenutnibroj

idi na gotovo:

}

inače

{

suma=suma-trenutnibroj

trenutnibroj=trenutnibroj+1

idi na dalje:

}

gotovo:

kraj

IRebic pon 25.10.2010 16:37
vlad0 kaže...
IRebic kaže...

Danas smo imali na testu ovakav zadatak:

 

Napiši program koji pronalazi i na ekran ispisiva broj n za koji vrijedi:

1+2+3...+n=5050

 

Ja sam se mislio i mislio a nisam ga baš uspio riješiti, može pomoć?

 

Ne sjećam se više kako se točno piše pseudokod, ali recimo ja bi to rješio ovako (ovo je općenito rješenje, umjesto 5050 možeš staviti bilo koji broj):

 

suma=5050

trenutnibroj=1

dalje:

ako (suma-trenutnibroj) < 0

{

ispiši "Ne postoji takav broj!"

idi na govoto:

}

ako (suma-trenutnibroj) = 0

{

ispiši n=trenutnibroj

idi na gotovo:

}

inače

{

suma=suma-trenutnibroj

trenutnibroj=trenutnibroj+1

idi na dalje:

}

gotovo:

kraj

 jesi ti siguran za ovo čini mi se malo...

vlad0 pon 25.10.2010 16:50
IRebic kaže...
vlad0 kaže...
IRebic kaže...

Danas smo imali na testu ovakav zadatak:

 

Napiši program koji pronalazi i na ekran ispisiva broj n za koji vrijedi:

1+2+3...+n=5050

 

Ja sam se mislio i mislio a nisam ga baš uspio riješiti, može pomoć?

 

Ne sjećam se više kako se točno piše pseudokod, ali recimo ja bi to rješio ovako (ovo je općenito rješenje, umjesto 5050 možeš staviti bilo koji broj):

 

suma=5050

trenutnibroj=1

dalje:

ako (suma-trenutnibroj) < 0

{

ispiši "Ne postoji takav broj!"

idi na govoto:

}

ako (suma-trenutnibroj) = 0

{

ispiši n=trenutnibroj

idi na gotovo:

}

inače

{

suma=suma-trenutnibroj

trenutnibroj=trenutnibroj+1

idi na dalje:

}

gotovo:

kraj

 jesi ti siguran za ovo čini mi se malo...

 

Obrnuto? Pa u biti i je - umjesto zbrajanja koristimo oduzimanje. Zašto ne ubaciti malo kreativnosti? Smijeh Ali možeš koristiti i zbrajanje, naravno...Posve je svejedno, bitno je skužiti problematiku, a ne samo rješenje (koje se dalo izvesti na barem još 4 različita načina).

 

Pojašnjenje:

Ovaj moj "kod" zapravo od 5050 (suma) oduzima prvo 1 (trenutnibroj) i dobije 5049. Nakon toga kaže da je (nova) suma=5049 i uveća broj za 1 (1 + 1 = 2) i onda je trenutnibroj=2. Nakon toga ide ponovo 5049-2=5047, pa onda u trećem koraku vrijedi suma=5047, novibroj=3 i radi se 5047-3, pa u četvrtom koraku suma=5044, a trenutnibroj=4... Itd. itd.

 

Ako se dogodi da neki trenutnibroj "spusti" sumu na 0, to znači da je upravo taj trenutnibroj = n i našao si svoj n broj.

 

Ako se dogodi da prilikom oduzimanja odeš ispod 0, to znači da takav broj ne postoji.

 

Petlja se vrti sve dok suma nije < 0 (nema rješenja) ili suma = 0 (zadnji trenutnibroj = n, tj. našao si svoj n).

Pijavica pon 25.10.2010 20:32

N(N + 1)/2 je gausova formula za zbroj prvih N brojeva.
N(N + 1)/2 = X
N(N + 1) = 2X
...upises x (u ovom slucaju 5050) i pretvoris ga u 2x ( x := 2*x ),zatim u beskonacnoj petlji ispitujes sve brojeve N krenuvsi od 0,stim da stavis dva uvjeta - n(n+1) = x i n(n+1)>x...ako je prvi zadovoljen ispisujes n i brejkas petlju, a ako je drugi ispisujes da nema rjesenja i brejkas.

MrBlc pon 25.10.2010 23:39

Jedno ovako divlje rješenje (neki matematičar bi možda ipak trebao dokazati da vrijedi: n(n+1) - n2 < 1 za svaki n > 0):

temp = sqroot(2x)

temp zaokruži na manje //ako je temp integer, ovo se događa automatski

if (temp(temp+1)/2 == x)

  n = temp

else

  nema rješenja