Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
CROmpir Forumaš(ica)
Pridružen/a: 15. 09. 2009. (18:27:06) Postovi: (B3)16
|
Postano: 17:02 pon, 8. 11. 2010 Naslov: Zadaci za prakticni kolokvij |
|
|
Zamolio bih nekoga ako mi moze pomoci oko ovog zadatka
Zadatak 13 [nizovi]:
Napisite program koji ucitava prirodni broj n < 10 koji predstavlja duljinu niza, te niz prirodnih brojeva a1, a2, . . . , an. Svi
elementi niza ce biti manji ili jednaki 100 (ne treba provjeravati).
Program treba ispisati sve brojeve koji se mogu prikazati kao suma tri clana niza sa razliˇcitim indexima. Svaki od brojeva
treba biti ispisan tocno jednom; brojevi trebaju biti ispisani uzlazno po velicini!
Na primjer, ako je n = 5, a ucitani niz brojeva je (3, 1, 10, 2, 1), onda vas program treba ispisati brojeve 4, 5, 6, 12, 13, 14, 15.
Problem je u tome da nezz ako da odredim sve moguce sume, tj. kombinaciju indeksa.
Zamolio bih nekoga ako mi moze pomoci oko ovog zadatka
Zadatak 13 [nizovi]:
Napisite program koji ucitava prirodni broj n < 10 koji predstavlja duljinu niza, te niz prirodnih brojeva a1, a2, . . . , an. Svi
elementi niza ce biti manji ili jednaki 100 (ne treba provjeravati).
Program treba ispisati sve brojeve koji se mogu prikazati kao suma tri clana niza sa razliˇcitim indexima. Svaki od brojeva
treba biti ispisan tocno jednom; brojevi trebaju biti ispisani uzlazno po velicini!
Na primjer, ako je n = 5, a ucitani niz brojeva je (3, 1, 10, 2, 1), onda vas program treba ispisati brojeve 4, 5, 6, 12, 13, 14, 15.
Problem je u tome da nezz ako da odredim sve moguce sume, tj. kombinaciju indeksa.
|
|
[Vrh] |
|
pbakic Forumaš(ica)
Pridružen/a: 05. 10. 2009. (17:48:30) Postovi: (143)16
Spol:
|
Postano: 17:34 pon, 8. 11. 2010 Naslov: |
|
|
Mogao bi napraviti 3 petlje (jednu u drugoj u trecoj) kojima prolazis kroz svoj niz, nesto kao
for(i=0; i<n;++i)
for(j=i+1; j<n; ++j)
for(k=j+1, k<n; ++k)
(jasno je da ces pobrat sve kombinacije s te tri petlje, samo sad to treba doraditi tako da se brojevi ispisuju ulazno, i to samo jednom. To se valjda moze postici tako da sve sume stavljas u neki drugi niz (kako ima n povrh 3 suma, toliko dugacak treba biti niz), sortiras taj niz i onda prolazis kroz njega ispisujuci samo one elemente nakon kojih dolazi neki element razlicit od njih ili kraj niza)
Nije da obeshrabrujem vjezbu, al cisto informacije radi, sumnjam da ce bit zadataka s nizovima na prakticnom... (Ako niste radili nizove na vjezbama/predavanju?)
Mogao bi napraviti 3 petlje (jednu u drugoj u trecoj) kojima prolazis kroz svoj niz, nesto kao
for(i=0; i<n;++i)
for(j=i+1; j<n; ++j)
for(k=j+1, k<n; ++k)
(jasno je da ces pobrat sve kombinacije s te tri petlje, samo sad to treba doraditi tako da se brojevi ispisuju ulazno, i to samo jednom. To se valjda moze postici tako da sve sume stavljas u neki drugi niz (kako ima n povrh 3 suma, toliko dugacak treba biti niz), sortiras taj niz i onda prolazis kroz njega ispisujuci samo one elemente nakon kojih dolazi neki element razlicit od njih ili kraj niza)
Nije da obeshrabrujem vjezbu, al cisto informacije radi, sumnjam da ce bit zadataka s nizovima na prakticnom... (Ako niste radili nizove na vjezbama/predavanju?)
|
|
[Vrh] |
|
Milojko Forumaš(ica)
Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol:
Lokacija: Hilbertov hotel
|
Postano: 20:46 pon, 8. 11. 2010 Naslov: |
|
|
bolje da sortira početni niz uzlazno pa onda da traži sume. za mali n nije velka razlika, al povrh dost brzo raste, pa ono, ovak malo ubrza rješenje.
i da, dok upisuješ sumu u pomoćni niz, koji mora bit duljine 10*9*8/(1*2*3) odmah provjeravaj dali ta suma postoji već izračunata. normalno, pamti u pomoćnom int-u duljinu niza suma da uvijek znaš dokle treba tražit.
bolje da sortira početni niz uzlazno pa onda da traži sume. za mali n nije velka razlika, al povrh dost brzo raste, pa ono, ovak malo ubrza rješenje.
i da, dok upisuješ sumu u pomoćni niz, koji mora bit duljine 10*9*8/(1*2*3) odmah provjeravaj dali ta suma postoji već izračunata. normalno, pamti u pomoćnom int-u duljinu niza suma da uvijek znaš dokle treba tražit.
_________________ Sedam je prost broj
Bolonja je smeće i to pod hitno treba mijenjat
|
|
[Vrh] |
|
pmli Forumaš(ica)
Pridružen/a: 09. 11. 2009. (12:03:05) Postovi: (2C8)16
Spol:
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
|
[Vrh] |
|
pbakic Forumaš(ica)
Pridružen/a: 05. 10. 2009. (17:48:30) Postovi: (143)16
Spol:
|
|
[Vrh] |
|
Milojko Forumaš(ica)
Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol:
Lokacija: Hilbertov hotel
|
Postano: 3:42 uto, 9. 11. 2010 Naslov: |
|
|
[quote="pmli"][quote="Milojko"]bolje da sortira početni niz uzlazno pa onda da traži sume.[/quote]
To ne mora biti dovoljno.
Npr. za (1, 2, 3, 4, 6) vrijedi 1 + 2 + 6 = 9 > 8 = 1 + 3 + 4. :)[/quote]
sjetio sam se kad sam napiso.
uglavnom, nije zapravo potrebno ništ ni sortirat. samo računat sume i provjerit dal se nalaze u nizu prije upisivanja
pmli (napisa): | Milojko (napisa): | bolje da sortira početni niz uzlazno pa onda da traži sume. |
To ne mora biti dovoljno.
Npr. za (1, 2, 3, 4, 6) vrijedi 1 + 2 + 6 = 9 > 8 = 1 + 3 + 4. |
sjetio sam se kad sam napiso.
uglavnom, nije zapravo potrebno ništ ni sortirat. samo računat sume i provjerit dal se nalaze u nizu prije upisivanja
_________________ Sedam je prost broj
Bolonja je smeće i to pod hitno treba mijenjat
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 5:08 uto, 9. 11. 2010 Naslov: |
|
|
Ako smijem primijetiti, ucitavaju se prirodni brojevi ne veci od 100 i gledaju sume po tri takva. Dakle, najveca moguca suma je 300, pa je dosta niz s 301 elementom (teoretski s 298, ali nemojmo komplicirati zbog 3 [tt]int[/tt]-a):
[code:1]int provjera[301] = {0};
...
if (!provjera[suma]) {
printf("%d\n", suma);
provjera[suma] = 1;
}[/code:1]
Ako smijem primijetiti, ucitavaju se prirodni brojevi ne veci od 100 i gledaju sume po tri takva. Dakle, najveca moguca suma je 300, pa je dosta niz s 301 elementom (teoretski s 298, ali nemojmo komplicirati zbog 3 int-a):
Kod: | int provjera[301] = {0};
...
if (!provjera[suma]) {
printf("%d\n", suma);
provjera[suma] = 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] |
|
CROmpir Forumaš(ica)
Pridružen/a: 15. 09. 2009. (18:27:06) Postovi: (B3)16
|
Postano: 18:36 uto, 9. 11. 2010 Naslov: |
|
|
Hvala na brzim odgovorima i hintovima, evo mojeg rjesenja...
[code:1]#include <stdio.h>
#include <stdlib.h>
#define MAXN 10
#define MAX 1000
int main() {
int n, polje[MAXN + 1], i, j, k;
int rjesenja[MAX + 1] = {0};
scanf("%d", &n);
for (i=0; i<n; ++i)
scanf("%d", &polje[i]);
for (i=0; i<n; ++i) {
for (j=i+1; j<n; ++j) {
for (k=j+1; k<n; ++k) {
rjesenja[ polje[i]+polje[j]+polje[k] ]++;
}
}
}
for(i=0; i<MAX; ++i) {
if( rjesenja[ i ] ){
printf( "%d " , i );
}
}
printf("\n");
system("pause");
return 0;
}
[/code:1]
Hvala na brzim odgovorima i hintovima, evo mojeg rjesenja...
Kod: | #include <stdio.h>
#include <stdlib.h>
#define MAXN 10
#define MAX 1000
int main() {
int n, polje[MAXN + 1], i, j, k;
int rjesenja[MAX + 1] = {0};
scanf("%d", &n);
for (i=0; i<n; ++i)
scanf("%d", &polje[i]);
for (i=0; i<n; ++i) {
for (j=i+1; j<n; ++j) {
for (k=j+1; k<n; ++k) {
rjesenja[ polje[i]+polje[j]+polje[k] ]++;
}
}
}
for(i=0; i<MAX; ++i) {
if( rjesenja[ i ] ){
printf( "%d " , i );
}
}
printf("\n");
system("pause");
return 0;
}
|
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 10:16 čet, 11. 11. 2010 Naslov: |
|
|
Napisite program koji s tipkovnice ucitava znamenke binarnog broja pocevsi od krajnje lijeve. Ucitavanje prestaje kad se
unese broj koji nije 0 ili 1. Program treba ispisati koji dekadski broj ima takav binarni zapis. Primjerice, ukoliko je unos bio
100112, program treba ispisati 19.
ne znam kako da napravim da ucitava krajnju lijevu, jer na pocetku ne znam koliko ce ih biti, a treba mi broj za potenciju od 2. ako stavim brojac da ih prebrojim, unistim vrijednosti ucitanih brojeva. pomoc, molim! :-)
Napisite program koji s tipkovnice ucitava znamenke binarnog broja pocevsi od krajnje lijeve. Ucitavanje prestaje kad se
unese broj koji nije 0 ili 1. Program treba ispisati koji dekadski broj ima takav binarni zapis. Primjerice, ukoliko je unos bio
100112, program treba ispisati 19.
ne znam kako da napravim da ucitava krajnju lijevu, jer na pocetku ne znam koliko ce ih biti, a treba mi broj za potenciju od 2. ako stavim brojac da ih prebrojim, unistim vrijednosti ucitanih brojeva. pomoc, molim!
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
Vila Zvončica Forumaš(ica)
Pridružen/a: 31. 01. 2008. (18:51:58) Postovi: (17)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 15:03 pet, 12. 11. 2010 Naslov: |
|
|
[code:1]
#include <stdio.h>
int main (){
int a, i, br1, broj;
br1=0;
do {
scanf ("%d", &a);
if (a==1 || a==0) br1=br1*10+a;
} while (a==1 || a==0);
broj=0;
for (i=0; br1!=0; i=i+1){
broj=broj+(br1%10)*2^i;
br1=br1/10;
}
printf ("%d\n", broj);
system ("pause");
return 0;
}
[/code:1]
jel bi to nesto ovak trebalo bit? i gdje je greska, ispisuje krive brojeve?
Kod: |
#include <stdio.h>
int main (){
int a, i, br1, broj;
br1=0;
do {
scanf ("%d", &a);
if (a==1 || a==0) br1=br1*10+a;
} while (a==1 || a==0);
broj=0;
for (i=0; br1!=0; i=i+1){
broj=broj+(br1%10)*2^i;
br1=br1/10;
}
printf ("%d\n", broj);
system ("pause");
return 0;
}
|
jel bi to nesto ovak trebalo bit? i gdje je greska, ispisuje krive brojeve?
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:07 pet, 12. 11. 2010 Naslov: |
|
|
Nije dobro.
Prvo, cemu sluzi ona zavrzlama s dekadskim sustavom? Hoces li stvarno broj 4096 (binarno: "jedan" i 12 "nula") pamtiti kao "tisucu milijardi"? U koji [tt]int[/tt] ce ti to stati?
Drugo, cemu sluzi druga petlja? Ta ne mijenja nikakav redoslijed.
I, trece, sto racuna izraz [tt]2^i[/tt] (ovo se ispitivalo na proslom kolokviju)?
Nije dobro.
Prvo, cemu sluzi ona zavrzlama s dekadskim sustavom? Hoces li stvarno broj 4096 (binarno: "jedan" i 12 "nula") pamtiti kao "tisucu milijardi"? U koji int ce ti to stati?
Drugo, cemu sluzi druga petlja? Ta ne mijenja nikakav redoslijed.
I, trece, sto racuna izraz 2^i (ovo se ispitivalo na proslom kolokviju)?
_________________ 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] |
|
michelangelo Forumaš(ica)
Pridružen/a: 25. 06. 2009. (22:59:23) Postovi: (69)16
Spol:
|
Postano: 13:26 sub, 13. 11. 2010 Naslov: |
|
|
može još jedan zadatak s nizovima??????????
Program učitava prirodni broj n<31, te niz od n cijelih brojeva. Program treba učitane brojeve ispisati padajuće sortirano prema sumi znamenaka u bazi 9; ako neka dva različita broja imaju jednaku sumu znamenaka u bazi 9.
moje rješenje ne radi dobro. ak može komentar na to što zapravo ne valja u kodu.
[latex]#include<stdio.h>
int main(void){
int x[31];
int n, i, j, temp, z, w, suma1=0, suma2=0;
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%d", &x[i]);
}
for(i=0; i<n-1; i++){
z=x[i];
if(z<0)z=-z;
while(z>0){
suma1+=(z%9);
z/=9;}
for(j=i+1; j<n; j++);
w=x[j];
if(w<0)w=-w;
while(w>0){
suma2+=(w%9);
w/=9;}
if(suma1 < suma2){
temp=x[i];
x[i]=x[j];
x[j]=temp;}
if(suma1==suma2){
if(x[i]<x[j]){
temp=x[i];
x[i]=x[j];
x[j]=temp;}
}}
for(i=0; i<n; i++){
printf("%d ", x[i]);}
scanf("%%");
return 0;
}
[/latex]
može još jedan zadatak s nizovima??????????
Program učitava prirodni broj n<31, te niz od n cijelih brojeva. Program treba učitane brojeve ispisati padajuće sortirano prema sumi znamenaka u bazi 9; ako neka dva različita broja imaju jednaku sumu znamenaka u bazi 9.
moje rješenje ne radi dobro. ak može komentar na to što zapravo ne valja u kodu.
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 14:06 sub, 13. 11. 2010 Naslov: |
|
|
[quote="vsego"]Nije dobro.
Prvo, cemu sluzi ona zavrzlama s dekadskim sustavom? Hoces li stvarno broj 4096 (binarno: "jedan" i 12 "nula") pamtiti kao "tisucu milijardi"? U koji [tt]int[/tt] ce ti to stati?
Drugo, cemu sluzi druga petlja? Ta ne mijenja nikakav redoslijed.
I, trece, sto racuna izraz [tt]2^i[/tt] (ovo se ispitivalo na proslom kolokviju)?[/quote]
kuzim prve dvije primjedbe, ali nije mi jasno trece, zasto nije okej napisati 2^i? kako da drukcije zapisem te rastuce potencije?
vsego (napisa): | Nije dobro.
Prvo, cemu sluzi ona zavrzlama s dekadskim sustavom? Hoces li stvarno broj 4096 (binarno: "jedan" i 12 "nula") pamtiti kao "tisucu milijardi"? U koji int ce ti to stati?
Drugo, cemu sluzi druga petlja? Ta ne mijenja nikakav redoslijed.
I, trece, sto racuna izraz 2^i (ovo se ispitivalo na proslom kolokviju)? |
kuzim prve dvije primjedbe, ali nije mi jasno trece, zasto nije okej napisati 2^i? kako da drukcije zapisem te rastuce potencije?
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
Postano: 14:15 sub, 13. 11. 2010 Naslov: |
|
|
Ne znam jesi li primijetila, ali "latex" tag ti uoćne ne funkcionira i zapravo skoro ništa ne prikazuje. (Zato sam ja u drugom topicu mislio da si napisala dva koda, a ne tri.)
Koristi "code" tag, ljepše je. :)
Imaš pogrešan pristup programu. Malo je nezgodno u istom trenutku računati sume znamenki i sortirati brojeve, barem po ovom algoritmu.
Također, druga for petlja ne radi ama baš ništa (osim što troši vrijeme). Trebalo je maknuti ';' i staviti '{' i '}' na potrebna mjesta.
Uz to, na početku su sume (suma1 i suma2) postavljene na nulu, no što kada s istom varijablom poslije računaš sumu drugog broja? Trebalo bi ponovo postaviti na nulu.
Malo sam korigirao tvoj kod, a sada ću objasniti što radim s njim. :)
Prvo, u poseban niz pohranjujem sumu znamenki svakog broja u bazi 9. Dakle, ako je x[i] traženi broj, tada je njegova suma označena sa suma[i]. Zatim standardnim algoritmom (kojeg, vidim, znaš) sortiramo brojeve. Pritom pazimo na sljedeću stvar: ako smo došli do koraka da zamijenimo dva broja, x[i] i x[j], tada obavezno moramo zamijeniti i njihove sume, suma[i] i suma[j]. Naime, jedan broj možemo poslije uspoređivati s drugim premda je već bio zamijenjen, stoga mu suma mora biti očuvana.
Usput, neka te ne zbuni manjak vitičastih zagrada kraj određenih petlji. Poznato je da, ako nema zagradi uz petlju, tada će se petlja odnositi samo na jednu naredbu, i to na naredbu koja slijedi odmah nakon petlje.
Primjerice:
[code:1]for(i=0; i<n; i++)
scanf("%d", &x[i]);[/code:1]
Poseban slučaj je "if" i "else if".
[code:1]for(...)
if(uvjet-1)
{
...
}
else if(uvjet-2)
{
...
}
else if(uvjet-3)
{
...
}
...
else if(uvjet-n)
{
...
}[/code:1]
No, pogledaj kako sam napravio poravnanja u kodu tako da vizualno uočiš što spada pod određenom petljom kada nema vitičastih zagrada. :)
[code:1]#include<stdio.h>
int main(void)
{
int x[31];
int n, i, j, temp, z, suma[31]={0};
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &x[i]);
for(i=0; i<n; i++)
{
z=x[i];
if(z<0)z=-z;
while(z>0)
{
suma[i]+=(z%9);
z/=9;
}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(suma[i]<suma[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
temp=suma[i];
suma[i]=suma[j];
suma[j]=temp;
}
else if(suma[i]==suma[j]&&x[i]<x[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
temp=suma[i];
suma[i]=suma[j];
suma[j]=temp;
}
for(i=0; i<n; i++)
printf("%d ", x[i]);
return 0;
}
[/code:1]
Usput, nisi napisala do kraja što ako dva broja imaju jednaku sumu. Po kodu pretpostavljam da prije dolazi broj koji je veći u originalnom zapisu, pa ću tako i ostaviti u kodu.
I još nešto: moram te pitati čemu služi linija "scanf("%%");"? Možda za zaustavljanje programa? Nisam prije čuo za nju, pa ne znam čemu služi.
Buki, u kodu ne možeš pisati "2^i", program to neće razumjeti kako treba.
Potenciju možeš izračunati tako da u for petlji neki broj (prethodno postavljen na vrijednost 1) množiš brojem 2 i puta.
[code:1]int i, j, S=1;
...
for(j=0;j<i;i++)
S*=2;[/code:1]
Drugi način je da uključiš math biblioteku i funkciju "double pow(double x, double y)", pri čemu je x baza, a y eksponent.
[code:1]#include<stdio.h>
#include<math.h>
int main()
{
int i, S;
...
S=pow(2,i);
...
}[/code:1]
Prvi način je vjerovatno bolji, naravno, ako su baza i eksponent cijeli brojevi.
Ne znam jesi li primijetila, ali "latex" tag ti uoćne ne funkcionira i zapravo skoro ništa ne prikazuje. (Zato sam ja u drugom topicu mislio da si napisala dva koda, a ne tri.)
Koristi "code" tag, ljepše je.
Imaš pogrešan pristup programu. Malo je nezgodno u istom trenutku računati sume znamenki i sortirati brojeve, barem po ovom algoritmu.
Također, druga for petlja ne radi ama baš ništa (osim što troši vrijeme). Trebalo je maknuti ';' i staviti '{' i '}' na potrebna mjesta.
Uz to, na početku su sume (suma1 i suma2) postavljene na nulu, no što kada s istom varijablom poslije računaš sumu drugog broja? Trebalo bi ponovo postaviti na nulu.
Malo sam korigirao tvoj kod, a sada ću objasniti što radim s njim.
Prvo, u poseban niz pohranjujem sumu znamenki svakog broja u bazi 9. Dakle, ako je x[i] traženi broj, tada je njegova suma označena sa suma[i]. Zatim standardnim algoritmom (kojeg, vidim, znaš) sortiramo brojeve. Pritom pazimo na sljedeću stvar: ako smo došli do koraka da zamijenimo dva broja, x[i] i x[j], tada obavezno moramo zamijeniti i njihove sume, suma[i] i suma[j]. Naime, jedan broj možemo poslije uspoređivati s drugim premda je već bio zamijenjen, stoga mu suma mora biti očuvana.
Usput, neka te ne zbuni manjak vitičastih zagrada kraj određenih petlji. Poznato je da, ako nema zagradi uz petlju, tada će se petlja odnositi samo na jednu naredbu, i to na naredbu koja slijedi odmah nakon petlje.
Primjerice:
Kod: | for(i=0; i<n; i++)
scanf("%d", &x[i]); |
Poseban slučaj je "if" i "else if".
Kod: | for(...)
if(uvjet-1)
{
...
}
else if(uvjet-2)
{
...
}
else if(uvjet-3)
{
...
}
...
else if(uvjet-n)
{
...
} |
No, pogledaj kako sam napravio poravnanja u kodu tako da vizualno uočiš što spada pod određenom petljom kada nema vitičastih zagrada.
Kod: | #include<stdio.h>
int main(void)
{
int x[31];
int n, i, j, temp, z, suma[31]={0};
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &x[i]);
for(i=0; i<n; i++)
{
z=x[i];
if(z<0)z=-z;
while(z>0)
{
suma[i]+=(z%9);
z/=9;
}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(suma[i]<suma[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
temp=suma[i];
suma[i]=suma[j];
suma[j]=temp;
}
else if(suma[i]==suma[j]&&x[i]<x[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
temp=suma[i];
suma[i]=suma[j];
suma[j]=temp;
}
for(i=0; i<n; i++)
printf("%d ", x[i]);
return 0;
}
|
Usput, nisi napisala do kraja što ako dva broja imaju jednaku sumu. Po kodu pretpostavljam da prije dolazi broj koji je veći u originalnom zapisu, pa ću tako i ostaviti u kodu.
I još nešto: moram te pitati čemu služi linija "scanf("%%");"? Možda za zaustavljanje programa? Nisam prije čuo za nju, pa ne znam čemu služi.
Buki, u kodu ne možeš pisati "2^i", program to neće razumjeti kako treba.
Potenciju možeš izračunati tako da u for petlji neki broj (prethodno postavljen na vrijednost 1) množiš brojem 2 i puta.
Kod: | int i, j, S=1;
...
for(j=0;j<i;i++)
S*=2; |
Drugi način je da uključiš math biblioteku i funkciju "double pow(double x, double y)", pri čemu je x baza, a y eksponent.
Kod: | #include<stdio.h>
#include<math.h>
int main()
{
int i, S;
...
S=pow(2,i);
...
} |
Prvi način je vjerovatno bolji, naravno, ako su baza i eksponent cijeli brojevi.
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 23:56 sub, 13. 11. 2010 Naslov: |
|
|
[code:1]
#include <stdio.h>
int main (){
int a, br1, broj, potencija;
br1=0;
potencija=1;
do {
scanf ("%d", &a);
if (a==1 || a==0) {
potencija=potencija*2;
br1=br1+a*(potencija/2);
}
} while (a==1 || a==0);
broj=0;
while (br1!=0){
broj=broj+(br1%2)*potencija/2;
potencija=potencija/2;
br1=br1/2;
}
printf ("%d\n", broj);
system ("pause");
return 0;
}
[/code:1]
jel greska sto mi kad prvi upisan broj nije ni 0 ni 1 izbaci nulu ili to ne moram mjenjati?
Kod: |
#include <stdio.h>
int main (){
int a, br1, broj, potencija;
br1=0;
potencija=1;
do {
scanf ("%d", &a);
if (a==1 || a==0) {
potencija=potencija*2;
br1=br1+a*(potencija/2);
}
} while (a==1 || a==0);
broj=0;
while (br1!=0){
broj=broj+(br1%2)*potencija/2;
potencija=potencija/2;
br1=br1/2;
}
printf ("%d\n", broj);
system ("pause");
return 0;
}
|
jel greska sto mi kad prvi upisan broj nije ni 0 ni 1 izbaci nulu ili to ne moram mjenjati?
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
|
[Vrh] |
|
|