Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
filipnet Forumaš(ica)
Pridružen/a: 02. 11. 2003. (01:17:46) Postovi: (399)16
Spol:
Lokacija: cvrsto na stolici
|
|
[Vrh] |
|
C'Tebo Moderator
Pridružen/a: 03. 11. 2002. (18:40:48) Postovi: (26A)16
Lokacija: Zagreb
|
Postano: 18:12 ned, 23. 11. 2003 Naslov: |
|
|
Kako je vsego već par puta kazao, nije poanta da ti tu netko rješava zadatke. (mislim, to obično jest poanta ovakvih foruma, ali ovo je neslužbeni forum fakulteta, a na fax se ide da se nešto naučim a nećeš naučiti ako ti netko ovdje bubne rješenje)
Bolje je da ti fino kažeš kak si kreno, di si zapeo, onda će već netko uletit i objasniti ti kako nastaviti i napisati ti kôd, a ti nećeš samo dobit taj kod, nego i ono vrednije: objašenjenje.
Kako je vsego već par puta kazao, nije poanta da ti tu netko rješava zadatke. (mislim, to obično jest poanta ovakvih foruma, ali ovo je neslužbeni forum fakulteta, a na fax se ide da se nešto naučim a nećeš naučiti ako ti netko ovdje bubne rješenje)
Bolje je da ti fino kažeš kak si kreno, di si zapeo, onda će već netko uletit i objasniti ti kako nastaviti i napisati ti kôd, a ti nećeš samo dobit taj kod, nego i ono vrednije: objašenjenje.
_________________ Click me !
_______________________
Bad panda!
|
|
[Vrh] |
|
Ergasiophob Forumaš(ica)
Pridružen/a: 23. 11. 2003. (19:16:50) Postovi: (4)16
Lokacija: Zagreb
|
Postano: 20:12 ned, 23. 11. 2003 Naslov: Ah te divne matrice..... |
|
|
Ovo ti je pseudo C za prvo pitanje:
Imamo matricu s elementima- E[i][j]
i=0,..n
j=0,..n
P - produkt elemenata po dijagonali
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Upisite Element matrice:");
scanf(E[i][j])
}
}
p=0;
for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}
printf("produkt je ",P);
.....tako nekako..... :) :) :)
Ovo ti je pseudo C za prvo pitanje:
Imamo matricu s elementima- E[i][j]
i=0,..n
j=0,..n
P - produkt elemenata po dijagonali
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Upisite Element matrice:");
scanf(E[i][j])
}
}
p=0;
for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}
printf("produkt je ",P);
.....tako nekako.....
_________________ "Insanity: doing the same thing over and over again and expecting different results."
|
|
[Vrh] |
|
veky Forumaš(ica)
Pridružen/a: 09. 12. 2002. (19:59:43) Postovi: (5B0)16
Lokacija: negdje daleko...
|
|
[Vrh] |
|
Ergasiophob Forumaš(ica)
Pridružen/a: 23. 11. 2003. (19:16:50) Postovi: (4)16
Lokacija: Zagreb
|
Postano: 21:10 ned, 23. 11. 2003 Naslov: |
|
|
[quote]Ajme... ne znam ja što vama znači ta pseudolabava sintaksa,
ali sam prilično siguran da ne tolerira računanje produkta kao sume...
qq-:
Naravno,
Kod:
p=1;
i kasnije
Kod:
p+=E[ i ][ j ]
...
I BTW, mislim da je čak i pseudoC case-sensitive...[/quote]
Hm, gle :roll: od same rijeci Pseudo ispred nekogo programskog jezika rigam, ali na ovaj je nacin asistent ucio.... (bez ';' ) tako da....
:shock:
Svaki komentar je dobrodosao......
:twisted:
[/quote][/code]
Citat: | Ajme... ne znam ja što vama znači ta pseudolabava sintaksa,
ali sam prilično siguran da ne tolerira računanje produkta kao sume...
qq-:
Naravno,
Kod:
p=1;
i kasnije
Kod:
p+=E[ i ][ j ]
...
I BTW, mislim da je čak i pseudoC case-sensitive... |
Hm, gle od same rijeci Pseudo ispred nekogo programskog jezika rigam, ali na ovaj je nacin asistent ucio.... (bez ';' ) tako da....
Svaki komentar je dobrodosao......
[/quote][/code]
_________________ "Insanity: doing the same thing over and over again and expecting different results."
|
|
[Vrh] |
|
koryanshea Forumaš(ica)
Pridružen/a: 12. 10. 2003. (23:50:23) Postovi: (442)16
Spol:
Lokacija: Bebop (converted interplanetary trawler)
|
Postano: 21:18 ned, 23. 11. 2003 Naslov: Re: Ah te divne matrice..... |
|
|
veky rece:
> [code:1]p+=E[ i ][ j ][/code:1]...
sta znaci ovo p+ ? zasto nije p=p*E(i)(j)? :?
> I BTW, mislim da je čak i pseudoC case-sensitive...[/quote]
meni je puno logicnije da pseudo c NIJE case sensitive, obzirom da to citaju i kuze samo ljudi, a ljudi i nisu bas case sensitive :)
osim toga, ako mi moze asistent mjesec dana po ploci velikim slovima pisat e mogu i ja 8)
veky rece:
> ...
sta znaci ovo p+ ? zasto nije p=p*E(i)(j)?
> I BTW, mislim da je čak i pseudoC case-sensitive...[/quote]
meni je puno logicnije da pseudo c NIJE case sensitive, obzirom da to citaju i kuze samo ljudi, a ljudi i nisu bas case sensitive
osim toga, ako mi moze asistent mjesec dana po ploci velikim slovima pisat e mogu i ja
_________________ "Download the files to a non-networked, firewalled computer."
- Dr. Elizabeth Weir
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 21:22 ned, 23. 11. 2003 Naslov: Re: Ah te divne matrice..... |
|
|
[quote="Ergasiophob"]p=1;
for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P*E[i][j];
}[/quote]
Cemu dva indexa, kad je njihova vrijednost stalno ista? :shock:
[code:1]p=1;
for (i=0; i<n; i++) {
P = P * E[i][i];
}[/code:1]
Napomena: Ja "svojim" studentima nisam pokazivao "i++" jer se nisam htio upustati u neke detalje koje to povlaci. Dakle, "i++" je - [b]uvjetno receno[/b] - pokrata za "i = i + 1". :)
Ergasiophob (napisa): | p=1;
for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P*E[i][j];
} |
Cemu dva indexa, kad je njihova vrijednost stalno ista?
Kod: | p=1;
for (i=0; i<n; i++) {
P = P * E[i][i];
} |
Napomena: Ja "svojim" studentima nisam pokazivao "i++" jer se nisam htio upustati u neke detalje koje to povlaci. Dakle, "i++" je - uvjetno receno - pokrata za "i = i + 1".
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
koryanshea Forumaš(ica)
Pridružen/a: 12. 10. 2003. (23:50:23) Postovi: (442)16
Spol:
Lokacija: Bebop (converted interplanetary trawler)
|
|
[Vrh] |
|
C'Tebo Moderator
Pridružen/a: 03. 11. 2002. (18:40:48) Postovi: (26A)16
Lokacija: Zagreb
|
Postano: 22:13 ned, 23. 11. 2003 Naslov: |
|
|
Isuse šta ste ispisali :shock:
[code:1]for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}[/code:1]
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži.
Nadalje, veky reče p+=E[i][j], je isto što i p=p+E[i][j] pa ni to baš ne vrijedi (iako, znam i to je ispravljeno, ali nije loše naglasiti). Točno je p*=E[i][j] ili p=p*E[i][j], što je isto.[/code]
Isuse šta ste ispisali
Kod: | for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
} |
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži.
Nadalje, veky reče p+=E[i][j], je isto što i p=p+E[i][j] pa ni to baš ne vrijedi (iako, znam i to je ispravljeno, ali nije loše naglasiti). Točno je p*=E[i][j] ili p=p*E[i][j], što je isto.[/code]
_________________ Click me !
_______________________
Bad panda!
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 22:32 ned, 23. 11. 2003 Naslov: |
|
|
[quote="C'Tebo"]Isuse šta ste ispisali :shock:
[code:1]for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}[/code:1]
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži.[/quote]
E, C'Tebo, C'Tebo... :roll: Treba paziti... :)
Nisu dvije petlje, nego se "i" i "j" [b][u]istovremeno[/u][/b] mijenjaju :!: Dakle, stalno imas istu vrijednost u te dvije varijable... ;)
[quote="koryanshea"]nego, ja bi volila da ipak netko napise rjesenje drugog zadatka sto je filip napisao... ucitaj brojeve i ispisi onoga koji ima najvecu sumu znamenaka, ako ih je vise, ispisi sve.[/quote]
Ovako, izracunavanje sume znamenaka za jedan broj (npr. x) ide ovako:
[code:1]sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}[/code:1]
To je objasnjeno na vjezbama, pa vjerujem da ne treba raspisivati. 8)
Sada to isto treba napraviti za svaki ucitani broj da bi se naslo kolika je najveca suma:
[code:1]scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}[/code:1]
Eh, sada, da se ispisu svi ti brojevi, treba jos jednom proci po svima, izracunati ponovno sume znamenaka i ispisati one brojeve cija je suma jednaka max. :)
Primijeti da sada vise varijabla x nije dovoljna, nego te brojeve treba i "sacuvati" (za drugu petlju). Dodajem redak oznacen strelicom "<-".
[code:1]scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x; <-
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}[/code:1]
Sada znamo "max" (najvecu sumu znamenaka) i imamo sve brojeve sacuvane u nizu "a[]". Dakle, mozemo ispisati sve one koji imaju najvecu sumu:
[code:1]for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
}[/code:1]
Kad prethodna dva dijea programa slijepimo u jedan program, dobijemo konacno rjesenje:
[code:1]scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x;
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}
for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
}[/code:1]
Nadam se da nisam negdje nesto promasio... ;)
C'Tebo (napisa): | Isuse šta ste ispisali
Kod: | for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
} |
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži. |
E, C'Tebo, C'Tebo... Treba paziti...
Nisu dvije petlje, nego se "i" i "j" istovremeno mijenjaju Dakle, stalno imas istu vrijednost u te dvije varijable...
koryanshea (napisa): | nego, ja bi volila da ipak netko napise rjesenje drugog zadatka sto je filip napisao... ucitaj brojeve i ispisi onoga koji ima najvecu sumu znamenaka, ako ih je vise, ispisi sve. |
Ovako, izracunavanje sume znamenaka za jedan broj (npr. x) ide ovako:
Kod: | sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
} |
To je objasnjeno na vjezbama, pa vjerujem da ne treba raspisivati.
Sada to isto treba napraviti za svaki ucitani broj da bi se naslo kolika je najveca suma:
Kod: | scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
} |
Eh, sada, da se ispisu svi ti brojevi, treba jos jednom proci po svima, izracunati ponovno sume znamenaka i ispisati one brojeve cija je suma jednaka max.
Primijeti da sada vise varijabla x nije dovoljna, nego te brojeve treba i "sacuvati" (za drugu petlju). Dodajem redak oznacen strelicom "←".
Kod: | scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x; <-
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
} |
Sada znamo "max" (najvecu sumu znamenaka) i imamo sve brojeve sacuvane u nizu "a[]". Dakle, mozemo ispisati sve one koji imaju najvecu sumu:
Kod: | for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
} |
Kad prethodna dva dijea programa slijepimo u jedan program, dobijemo konacno rjesenje:
Kod: | scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x;
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}
for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
} |
Nadam se da nisam negdje nesto promasio...
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
veky Forumaš(ica)
Pridružen/a: 09. 12. 2002. (19:59:43) Postovi: (5B0)16
Lokacija: negdje daleko...
|
Postano: 7:53 pon, 24. 11. 2003 Naslov: |
|
|
[quote="vsego"][quote="C'Tebo"]Isuse šta ste ispisali :shock:
[code:1]for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}[/code:1]
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži.[/quote]
E, C'Tebo, C'Tebo... :roll: Treba paziti... :)
Nisu dvije petlje, nego se "i" i "j" [b][u]istovremeno[/u][/b] mijenjaju :!: Dakle, stalno imas istu vrijednost u te dvije varijable... ;)
[/quote]
Hm... jel ovo gore pseudoC ili pravi C? Ako je pravi, prilično je ružan
obfuscation onaj zarez u uvjetu. Naime, ne radi se ni logičko 'i' ni 'ili'
između te dvije stvari (i<n i j<n), kako bi vjerujem mnogi pomislili,
već se jednostavno uzima rezultat samo drugog operanda (j<n).
(prvi se takoder racuna, i to je razlog zbog kojeg zarez ima smisla
u inicijalizaciji i inkrementu, ali se njegov rezultat zanemaruje).
vsego (napisa): | C'Tebo (napisa): | Isuse šta ste ispisali
Kod: | for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
} |
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži. |
E, C'Tebo, C'Tebo... Treba paziti...
Nisu dvije petlje, nego se "i" i "j" istovremeno mijenjaju Dakle, stalno imas istu vrijednost u te dvije varijable...
|
Hm... jel ovo gore pseudoC ili pravi C? Ako je pravi, prilično je ružan
obfuscation onaj zarez u uvjetu. Naime, ne radi se ni logičko 'i' ni 'ili'
između te dvije stvari (i<n i j<n), kako bi vjerujem mnogi pomislili,
već se jednostavno uzima rezultat samo drugog operanda (j<n).
(prvi se takoder racuna, i to je razlog zbog kojeg zarez ima smisla
u inicijalizaciji i inkrementu, ali se njegov rezultat zanemaruje).
|
|
[Vrh] |
|
C'Tebo Moderator
Pridružen/a: 03. 11. 2002. (18:40:48) Postovi: (26A)16
Lokacija: Zagreb
|
Postano: 9:21 pon, 24. 11. 2003 Naslov: |
|
|
[quote="vsego"][quote="C'Tebo"]Isuse šta ste ispisali :shock:
[code:1]for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
}[/code:1]
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži.[/quote]
E, C'Tebo, C'Tebo... :roll: Treba paziti... :)
Nisu dvije petlje, nego se "i" i "j" [b][u]istovremeno[/u][/b] mijenjaju :!: Dakle, stalno imas istu vrijednost u te dvije varijable... ;)[/quote]
Da, moj bed, ispričavam se ako sam nekoga zbunil time :?
vsego (napisa): | C'Tebo (napisa): | Isuse šta ste ispisali
Kod: | for(i=0,j=0;i<n,j<n;i++,j++)
{
P=P+E[i][j];
} |
Znam da je vsego ovo već ispravio, ali bih ja naglasio da je to ne samo nepotrebno imati dva indeksa, nego je čak i pogrešno...
Ovako će se napraviti suma (produkt, ono prihvaćam kao tipfeler) svih elemenata matrice, a ne samo onih kojih se traži. |
E, C'Tebo, C'Tebo... Treba paziti...
Nisu dvije petlje, nego se "i" i "j" istovremeno mijenjaju Dakle, stalno imas istu vrijednost u te dvije varijable... |
Da, moj bed, ispričavam se ako sam nekoga zbunil time
_________________ Click me !
_______________________
Bad panda!
|
|
[Vrh] |
|
steelworker Site Admin
Pridružen/a: 25. 04. 2003. (11:21:04) Postovi: (698)16
Lokacija: 4-dimensional space-time continuum. Or some 11-dimensional continuum? Dunna, it's all relative.
|
Postano: 10:14 pon, 24. 11. 2003 Naslov: |
|
|
[quote="vsego"][code:1]scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x;
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}
for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
}[/code:1][/quote][b]OK, tko je tesko skuzio ono gore, neka se ne zamara sa mojim cjepidlacenjem ovdje dolje:[/b]
Kao sto vidite u vseginom kodu gore dva puta se racuna ista stvar - suma znamenaka jednog broja, sto bas i nije jako dobro, zapravo je lose (dobro, vi se sad tek ucite programiranju, pa vas on lijepo pedagoski ne zeli zbunjivati kompliciranjem nego vam nastoji dati sto jednostavnija rjesenja, ali onda dodjem ja i picajzliram :twisted: :lol: :wink: )
U ovako malom programu nije nikakav bed tak nekaj dvaput radit, ali pri vecim stvarima to nije pametno radit.
Pa dakle, sto onda?
Ovak:
a) kad nadjemo x cija je [b]suma znamenaka jednaka max[/b], upisemo ga u a[] na jedno mjesto iza zadnjeg upisanog broja sa istom sumom znamenaka. To mjesto pamtimo u varijabli [i]zadnji[/i], pa tako upisemo x na a[zadnji].
b) kad nadjemo x cija je [b]suma znamenaka veca od max[/b] tada se ponasamo kao da nam je a[] do tada bio prazan (kao da je to prvi broj sa najvecom sumom znamenaka na koji smo do sada naisli). To radimo tako da varijablu [i]zadnji[/i] postavimo na 0 (tj. na pocetak od a[]) i onda normalno kao i u slucaju a) upisemo x na a[zadnji]
I na kraju ispisemo sve elemente u od 0 do [i]zadnji[/i] mjesta.
Da vam bude malo jasnije pogledajte kod:
[code:1]scanf(n);
max = 0;
zadnji=0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max) {
a[zadnji] = x;
zadnji = zadnji + 1;
}
if (sum > max) {
max = sum;
zadnji = 0; // <- krenemo ispocetka
a[zadnji] = x;
zadnji = zadnji + 1;
}
}
for (i = 0, i < zadnji, i = i + 1) {
printf(a[i]);
}
[/code:1]
Primjetite da ce samo jedan od onih IF-ova biti zadovoljen jer ako je [code:1]sum>max[/code:1] onda nije [code:1]sum==max[/code:1] i obratno.
Takodjer primjetite da smo slucaj [i]sum==max[/i] morali obraditi prije [i]sum>max[/i] jer u slucaju da vrijedi [i]sum>max[/i] postavljamo da je [i]max=sum[/i], pa da nakon toga imamo provjeru za slucaj [i]suma==max[/i] ona bi bila zadovoljena (makar je x prvi broj sa tako velikom sumom znamenaka) i ponovo bi upisali x u a[] te bi u rjesenju imali sve brojeve duplo ispisane.
Nadam se da nisam nikoga previse zbunio.
vsego (napisa): | Kod: | scanf(n);
max = 0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
a[i] = x;
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum > max)
max = sum;
}
for (i = 0, i < n, i = i + 1) {
sum = 0;
x = a[i];
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max)
printf(a[i]);
} |
| OK, tko je tesko skuzio ono gore, neka se ne zamara sa mojim cjepidlacenjem ovdje dolje:
Kao sto vidite u vseginom kodu gore dva puta se racuna ista stvar - suma znamenaka jednog broja, sto bas i nije jako dobro, zapravo je lose (dobro, vi se sad tek ucite programiranju, pa vas on lijepo pedagoski ne zeli zbunjivati kompliciranjem nego vam nastoji dati sto jednostavnija rjesenja, ali onda dodjem ja i picajzliram )
U ovako malom programu nije nikakav bed tak nekaj dvaput radit, ali pri vecim stvarima to nije pametno radit.
Pa dakle, sto onda?
Ovak:
a) kad nadjemo x cija je suma znamenaka jednaka max, upisemo ga u a[] na jedno mjesto iza zadnjeg upisanog broja sa istom sumom znamenaka. To mjesto pamtimo u varijabli zadnji, pa tako upisemo x na a[zadnji].
b) kad nadjemo x cija je suma znamenaka veca od max tada se ponasamo kao da nam je a[] do tada bio prazan (kao da je to prvi broj sa najvecom sumom znamenaka na koji smo do sada naisli). To radimo tako da varijablu zadnji postavimo na 0 (tj. na pocetak od a[]) i onda normalno kao i u slucaju a) upisemo x na a[zadnji]
I na kraju ispisemo sve elemente u od 0 do zadnji mjesta.
Da vam bude malo jasnije pogledajte kod:
Kod: | scanf(n);
max = 0;
zadnji=0;
for (i = 0, i < n, i = i + 1) {
scanf(x);
sum = 0;
while (x > 0) {
sum = sum + (x mod 10);
x = x div 10;
}
if (sum == max) {
a[zadnji] = x;
zadnji = zadnji + 1;
}
if (sum > max) {
max = sum;
zadnji = 0; // <- krenemo ispocetka
a[zadnji] = x;
zadnji = zadnji + 1;
}
}
for (i = 0, i < zadnji, i = i + 1) {
printf(a[i]);
}
|
Primjetite da ce samo jedan od onih IF-ova biti zadovoljen jer ako je onda nije i obratno.
Takodjer primjetite da smo slucaj sum==max morali obraditi prije sum>max jer u slucaju da vrijedi sum>max postavljamo da je max=sum, pa da nakon toga imamo provjeru za slucaj suma==max ona bi bila zadovoljena (makar je x prvi broj sa tako velikom sumom znamenaka) i ponovo bi upisali x u a[] te bi u rjesenju imali sve brojeve duplo ispisane.
Nadam se da nisam nikoga previse zbunio.
_________________ I live like this 'cause I like it
And I've seen too much to pretend
You can't ignore the beauty in the things that you love
Like you can't stand the hatred and the lies
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
|