Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 17:03 sub, 12. 11. 2011 Naslov: Prek(r)asno ispisivanje |
|
|
Pozdrav.
Zadatak:
Napišite program koji učitava 8 cijelih brojeva, te ispisuje svakog koji je djeljiv s prethodno upisanim (prvi se nikad ne ispisuje).
Ispisane brojeve odvojite razmacima (program ih smijete ispisivati i za vrijeme učitavanja), a ako traženih brojeva nema, program ne smije ništa ispisati.
Uputa: Program riješite pomoću petlje (iako se može i učitavanjem 8 varijabli). Pazite na dijeljenje s nulom!
Moj kod (kojeg je aplikacija za zadaću prihvatila kao točnog):
[code:1]#include<stdio.h>
int main(void)
{
int a,b,brojac=1;
scanf(" %d ",&a);
do
{
scanf(" %d ",&b);
if(b==0 && a!=0) printf(" %d ",b);
if(b!=0 && a!=0 && b%a==0) printf(" %d ",b);
a=b;
brojac++;
}while(brojac<8);
return 0;
}[/code:1]
I recimo upišem 5 ENTER 10 ENTER i on mi ne izbaci ništa, a trebao bi 10, dok ako upišem 5 ENTER 10 ENTER i onda bilo koji drugi broj, onda mi tek ispiše 10.
Kako se riješiti toga kašnjenja i gdje sam pogriješio u programu?
I još jedno tehničko pitanje:
Je li pravilnije
[code:1]if(b!=0 && a!=0 && b%a==0) printf("%d",b);[/code:1]
ili
[code:1]if (b!=0 && a!=0)
{
if (b%a==0) printf("%d",b);
}[/code:1]
Ili je svejedno?
Pozdrav.
Zadatak:
Napišite program koji učitava 8 cijelih brojeva, te ispisuje svakog koji je djeljiv s prethodno upisanim (prvi se nikad ne ispisuje).
Ispisane brojeve odvojite razmacima (program ih smijete ispisivati i za vrijeme učitavanja), a ako traženih brojeva nema, program ne smije ništa ispisati.
Uputa: Program riješite pomoću petlje (iako se može i učitavanjem 8 varijabli). Pazite na dijeljenje s nulom!
Moj kod (kojeg je aplikacija za zadaću prihvatila kao točnog):
Kod: | #include<stdio.h>
int main(void)
{
int a,b,brojac=1;
scanf(" %d ",&a);
do
{
scanf(" %d ",&b);
if(b==0 && a!=0) printf(" %d ",b);
if(b!=0 && a!=0 && b%a==0) printf(" %d ",b);
a=b;
brojac++;
}while(brojac<8);
return 0;
} |
I recimo upišem 5 ENTER 10 ENTER i on mi ne izbaci ništa, a trebao bi 10, dok ako upišem 5 ENTER 10 ENTER i onda bilo koji drugi broj, onda mi tek ispiše 10.
Kako se riješiti toga kašnjenja i gdje sam pogriješio u programu?
I još jedno tehničko pitanje:
Je li pravilnije
Kod: | if(b!=0 && a!=0 && b%a==0) printf("%d",b); |
ili
Kod: | if (b!=0 && a!=0)
{
if (b%a==0) printf("%d",b);
} |
Ili je svejedno?
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
Postano: 18:19 sub, 12. 11. 2011 Naslov: Re: Prek(r)asno ispisivanje |
|
|
Program te zeza zbog sljedeće linije:
[code:1]scanf(" %d ",&b);[/code:1]
Ako makneš ovaj razmak što se nalazi poslije [i]%d[/i], program će ti raditi. Nije baš svejedno gdje ubacuješ razmake unutar prvog argumenta za [i]scanf[/i] (zapravo mu taj razmak znači da program očekuje dodatno učitavanje), pa tu pripazi malo.
(Možda sam te ja zbunio kad sam ti to jednom spomenuo prije - ispričavam se i ignoriraj to dok ne budeš učio znakove i stringove. :P Osim ako te stvarno zanima na što sam mislio. :P)
Što se tiče drugog pitanja - isto ti je. U prvom primjeru program gleda jesu li sva tri uvjeta zadovoljena pa, ako jesu, prelazi na ispis. U drugom primjeru gleda jesu li prva dva zadovoljena, pa ako jesu, je li i treći ispunjen pa, ako jest, ispisuje. Dakle, isto je. :)
Program te zeza zbog sljedeće linije:
Ako makneš ovaj razmak što se nalazi poslije %d, program će ti raditi. Nije baš svejedno gdje ubacuješ razmake unutar prvog argumenta za scanf (zapravo mu taj razmak znači da program očekuje dodatno učitavanje), pa tu pripazi malo.
(Možda sam te ja zbunio kad sam ti to jednom spomenuo prije - ispričavam se i ignoriraj to dok ne budeš učio znakove i stringove. Osim ako te stvarno zanima na što sam mislio. )
Što se tiče drugog pitanja - isto ti je. U prvom primjeru program gleda jesu li sva tri uvjeta zadovoljena pa, ako jesu, prelazi na ispis. U drugom primjeru gleda jesu li prva dva zadovoljena, pa ako jesu, je li i treći ispunjen pa, ako jest, ispisuje. Dakle, isto je.
|
|
[Vrh] |
|
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 18:41 sub, 12. 11. 2011 Naslov: Re: Prek(r)asno ispisivanje |
|
|
[quote="Phoenix"]Program te zeza zbog sljedeće linije:
[code:1]scanf(" %d ",&b);[/code:1]
Ako makneš ovaj razmak što se nalazi poslije [i]%d[/i], program će ti raditi. Nije baš svejedno gdje ubacuješ razmake unutar prvog argumenta za [i]scanf[/i] (zapravo mu taj razmak znači da program očekuje dodatno učitavanje), pa tu pripazi malo.
(Možda sam te ja zbunio kad sam ti to jednom spomenuo prije - ispričavam se i ignoriraj to dok ne budeš učio znakove i stringove. :P Osim ako te stvarno zanima na što sam mislio. :P)
Što se tiče drugog pitanja - isto ti je. U prvom primjeru program gleda jesu li sva tri uvjeta zadovoljena pa, ako jesu, prelazi na ispis. U drugom primjeru gleda jesu li prva dva zadovoljena, pa ako jesu, je li i treći ispunjen pa, ako jest, ispisuje. Dakle, isto je. :)[/quote]
Hvala kolega ! Ok, onda ću maknuti drugi razmak. I to je to. Mislim da mi je čak i jasno, koliko može biti, ovo što si rekao.
Jučer nisam uspio, a dns sam si uzeo papir i na njega pisao prosto seljački kako kad šta i kad sam skužio, bilo mi je lako napraviti ga do kraja. A vidio si onaj kaos jučer xD
Phoenix (napisa): | Program te zeza zbog sljedeće linije:
Ako makneš ovaj razmak što se nalazi poslije %d, program će ti raditi. Nije baš svejedno gdje ubacuješ razmake unutar prvog argumenta za scanf (zapravo mu taj razmak znači da program očekuje dodatno učitavanje), pa tu pripazi malo.
(Možda sam te ja zbunio kad sam ti to jednom spomenuo prije - ispričavam se i ignoriraj to dok ne budeš učio znakove i stringove. Osim ako te stvarno zanima na što sam mislio. )
Što se tiče drugog pitanja - isto ti je. U prvom primjeru program gleda jesu li sva tri uvjeta zadovoljena pa, ako jesu, prelazi na ispis. U drugom primjeru gleda jesu li prva dva zadovoljena, pa ako jesu, je li i treći ispunjen pa, ako jest, ispisuje. Dakle, isto je. |
Hvala kolega ! Ok, onda ću maknuti drugi razmak. I to je to. Mislim da mi je čak i jasno, koliko može biti, ovo što si rekao.
Jučer nisam uspio, a dns sam si uzeo papir i na njega pisao prosto seljački kako kad šta i kad sam skužio, bilo mi je lako napraviti ga do kraja. A vidio si onaj kaos jučer xD
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
Postano: 19:20 sub, 12. 11. 2011 Naslov: Re: Prek(r)asno ispisivanje |
|
|
Ako te zanima nešto više o tome, pogledaj ovu prezentaciju: [url=http://web.math.hr/~singer/P1_1011/11.pdf]LINK[/url] (od 20. do 44. slidea). Ne moraš predetaljno čitati, ionako ćete to učiti; samo baci oko da vidiš kako se sve funkcija [i]scanf[/i] može ponašati. :)
(Iskreno, nisam sasvim siguran oko ovoga razmaka koji je tebi višak, pa ti zato ne znam dobro objasniti. :oops: Ali eto, znam da kvari situaciju, barem nešto. :P)
Tako se i radi - probaj protumačiti kako da program shvati i radi ono što ti želiš pa onda to otipkaj. To se zove smišljanje algoritama - nakon toga je pisanje kodova, ako znaš sintaksu, lagana stvar. :)
Ako te zanima nešto više o tome, pogledaj ovu prezentaciju: LINK (od 20. do 44. slidea). Ne moraš predetaljno čitati, ionako ćete to učiti; samo baci oko da vidiš kako se sve funkcija scanf može ponašati.
(Iskreno, nisam sasvim siguran oko ovoga razmaka koji je tebi višak, pa ti zato ne znam dobro objasniti. Ali eto, znam da kvari situaciju, barem nešto. )
Tako se i radi - probaj protumačiti kako da program shvati i radi ono što ti želiš pa onda to otipkaj. To se zove smišljanje algoritama - nakon toga je pisanje kodova, ako znaš sintaksu, lagana stvar.
|
|
[Vrh] |
|
kleber Forumaš(ica)
Pridružen/a: 09. 11. 2011. (23:47:51) Postovi: (2)16
|
Postano: 0:37 uto, 15. 11. 2011 Naslov: |
|
|
Imam i ja problem s tom zadacom, a nisam znala gdje da pitam da sam se tu skrpala :oops:
4. Napišite program koji učitava 8 realnih brojeva, te ispisuje umnožak broja koji ima najveću apsolutnu vrijednost s brojem koji ima najmanju apsolutnu vrijednost. Ako dva broja imaju jednaku apsolutnu vrijednost, za većeg/manjeg uzimate onog koji je prije učitan.
Rezultat obavezno ispišite koristeći format %g!
#include <stdio.h>
int main ()
{
double a,b,c,d,e,f,g,h;
double A,B,C,D,E,F,G,H;
double M,m,u;
scanf( "%lg" "%lg" "%lg" "%lg" "%lg" "%lg" "%lg" "%lg", &a,&b,&c,&d,&e,&f,&g,&h);
A= (a>0 ? a : -a);
B= (b>0 ? b : -b);
C= (c>0 ? c : -c);
D= (d>0 ? d : -d);
E= (e>0 ? e : -e);
F= (f>0 ? f : -f);
G= (g>0 ? g : -g);
H= (h>0 ? h : -h);
if (A>=B && A>=C && A>=D && A>=E && A>=G && A>=H) M=a;
else if (B>=C && B>=D && B>=E && B>=G && B>=H ) M=b;
else if (C>=D && C>=E && C>=G && C>=H ) M=c;
else if (D>=E && D>=G && D>=H ) M=d;
else if (E>=G && E>=H ) M=e;
else if (G>=H) M=g;
else M=h;
if (A<=B && A<=C && A<=D && A<=E && A<=G && A<=H) m=a;
else if (B<=C && B<=D && B<=E && B<=G && B<=H ) m=b;
else if (C<=D && C<=E && C<=G && C<=H ) m=c;
else if (D<=E && D<=G && D<=H ) m=d;
else if (E<=G && E<=H ) m=e;
else if (G<=H) m=g;
else m=h;
u= M*m;
printf ("%g", u);
return 0;
}
meni normalno radi, (bar one primjere koje sam ja ukucavala), a zadaca mi ga ne prihvaca :cry:
Imam i ja problem s tom zadacom, a nisam znala gdje da pitam da sam se tu skrpala
4. Napišite program koji učitava 8 realnih brojeva, te ispisuje umnožak broja koji ima najveću apsolutnu vrijednost s brojem koji ima najmanju apsolutnu vrijednost. Ako dva broja imaju jednaku apsolutnu vrijednost, za većeg/manjeg uzimate onog koji je prije učitan.
Rezultat obavezno ispišite koristeći format %g!
#include <stdio.h>
int main ()
{
double a,b,c,d,e,f,g,h;
double A,B,C,D,E,F,G,H;
double M,m,u;
scanf( "%lg" "%lg" "%lg" "%lg" "%lg" "%lg" "%lg" "%lg", &a,&b,&c,&d,&e,&f,&g,&h);
A= (a>0 ? a : -a);
B= (b>0 ? b : -b);
C= (c>0 ? c : -c);
D= (d>0 ? d : -d);
E= (e>0 ? e : -e);
F= (f>0 ? f : -f);
G= (g>0 ? g : -g);
H= (h>0 ? h : -h);
if (A>=B && A>=C && A>=D && A>=E && A>=G && A>=H) M=a;
else if (B>=C && B>=D && B>=E && B>=G && B>=H ) M=b;
else if (C>=D && C>=E && C>=G && C>=H ) M=c;
else if (D>=E && D>=G && D>=H ) M=d;
else if (E>=G && E>=H ) M=e;
else if (G>=H) M=g;
else M=h;
if (A<=B && A<=C && A<=D && A<=E && A<=G && A<=H) m=a;
else if (B<=C && B<=D && B<=E && B<=G && B<=H ) m=b;
else if (C<=D && C<=E && C<=G && C<=H ) m=c;
else if (D<=E && D<=G && D<=H ) m=d;
else if (E<=G && E<=H ) m=e;
else if (G<=H) m=g;
else m=h;
u= M*m;
printf ("%g", u);
return 0;
}
meni normalno radi, (bar one primjere koje sam ja ukucavala), a zadaca mi ga ne prihvaca
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 0:48 uto, 15. 11. 2011 Naslov: |
|
|
Zadaca ti kaze na kojem primjeru pada.
NHF, ali nemam namjeru analizirati ovaj monstrosity od koda, pogotovo sto nije u code-bloku.
Preporucam da rijesis ponovo, s petljom, jer ovo stvarno nema smisla.
[b]Edit:[/b] Slucajno opazih: pogubila si [tt]f[/tt] i [tt]F[/tt]. I dalje preporucam da to rijesis petljom, jer svrha zadace nije "provuci se", nego "nauciti".
Zadaca ti kaze na kojem primjeru pada.
NHF, ali nemam namjeru analizirati ovaj monstrosity od koda, pogotovo sto nije u code-bloku.
Preporucam da rijesis ponovo, s petljom, jer ovo stvarno nema smisla.
Edit: Slucajno opazih: pogubila si f i F. I dalje preporucam da to rijesis petljom, jer svrha zadace nije "provuci se", nego "nauciti".
_________________ 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] |
|
dodoria Forumaš(ica)
Pridružen/a: 04. 10. 2011. (13:31:15) Postovi: (E)16
|
Postano: 1:14 pet, 30. 12. 2011 Naslov: |
|
|
Ovako, budući da ne znam još koristiti program koji omogućuje pisanje matematičkih izraza (stvarno moram to srediti), onda bih molio nekoga da pogleda zadatak 11.3.5. iz skripte Vježbe (prog1-Šego). :/
Kod: #include<stdio.h>
int main(void)
{
double a[20], p, q, c, x;
int i, m, n, j;
printf("m= ");
scanf("%d", &m);
printf("n= ");
scanf("%d", &n);
for(i=0; i<=m+n; ++i)
{
printf("a[%d]= ", i);
scanf("%lg", &a[i]);
}
x=a[0];
p=0;
for(j=n-1; j>=0; --j)
{
p=p*x+a[j+1];
p=p*x;
}
q=0;
for(j=m-1; j>=0; --j)
{
q=q*x+a[j+n+1];
q=q*x;
}
c=p/q;
printf("%g", c);
return 0;
}
Program, naime, za m=3 i n=2 treba ispisat 1.0811, a moj ispisuje 0.88...
Najgore je što je greška tu negdje, a on ništa ne javlja.
Ovako, budući da ne znam još koristiti program koji omogućuje pisanje matematičkih izraza (stvarno moram to srediti), onda bih molio nekoga da pogleda zadatak 11.3.5. iz skripte Vježbe (prog1-Šego).
Kod: #include<stdio.h>
int main(void)
{
double a[20], p, q, c, x;
int i, m, n, j;
printf("m= ");
scanf("%d", &m);
printf("n= ");
scanf("%d", &n);
for(i=0; i⇐m+n; ++i)
{
printf("a[%d]= ", i);
scanf("%lg", &a[i]);
}
x=a[0];
p=0;
for(j=n-1; j>=0; –j)
{
p=p*x+a[j+1];
p=p*x;
}
q=0;
for(j=m-1; j>=0; –j)
{
q=q*x+a[j+n+1];
q=q*x;
}
c=p/q;
printf("%g", c);
return 0;
}
Program, naime, za m=3 i n=2 treba ispisat 1.0811, a moj ispisuje 0.88...
Najgore je što je greška tu negdje, a on ništa ne javlja.
_________________ Dokaži.
|
|
[Vrh] |
|
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 10:48 pet, 30. 12. 2011 Naslov: |
|
|
moze mi neko lijepo pojasnit varijabilne parametre XD sto je nagore, znam rijesit sve zadatke s funkcijama i sad krenem na nizove i dodjem do zad. 11.2.5. i pogubim se u 'tim varijabilnim parametrima' jer mi jos nije sjelo u glavu sto to tocno znaci XD evo ovako sam ja nekako napisala taj zadatak, al ne radi naravno XD pa ako mi netko preko tog zadatka moze objasnit lijepo te varijabilne parametre da kad procitam te 2 rijeci odmah u glavi znam sta i kako :) hvala liiipo :D
i jos, u ovom zadatku mi za funkciju min i max kaze (konkretno za red 7) invalid operands to binary... pa eto ak i to moze neko objasnit :) opet, hvala :)
#include <stdio.h>
double min(double niz[], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double max(double niz [], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double *mini, double niz[], int n)
{
*mini=min(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double *maxi, double niz[], int n)
{
*maxi=max(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i) suma+=niz[i];
return suma;
fmin(&suma,niz,n);
fmax(&suma,niz,n);
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
}
moze mi neko lijepo pojasnit varijabilne parametre XD sto je nagore, znam rijesit sve zadatke s funkcijama i sad krenem na nizove i dodjem do zad. 11.2.5. i pogubim se u 'tim varijabilnim parametrima' jer mi jos nije sjelo u glavu sto to tocno znaci XD evo ovako sam ja nekako napisala taj zadatak, al ne radi naravno XD pa ako mi netko preko tog zadatka moze objasnit lijepo te varijabilne parametre da kad procitam te 2 rijeci odmah u glavi znam sta i kako hvala liiipo
i jos, u ovom zadatku mi za funkciju min i max kaze (konkretno za red 7) invalid operands to binary... pa eto ak i to moze neko objasnit opet, hvala
#include <stdio.h>
double min(double niz[], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double max(double niz [], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double *mini, double niz[], int n)
{
*mini=min(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double *maxi, double niz[], int n)
{
*maxi=max(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i) suma+=niz[i];
return suma;
fmin(&suma,niz,n);
fmax(&suma,niz,n);
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
}
|
|
[Vrh] |
|
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 18:56 pet, 30. 12. 2011 Naslov: |
|
|
dodoria, evo ti 11.3.5 zad... :)
#include <stdio.h>
int main (void)
{
int m,n,i;
double a[100],x,p,brojnik,nazivnik;
printf("Upisi n: "); scanf("%d", &n);
printf("Upisi m: "); scanf("%d", &m);
for (i=0; i<=m+n; ++i)
{
printf("Upisi a%d: ", i);
scanf("%lf", &a[i]);
}
printf ("\n");
x=a[0];
p=0;
for (i=m-1; i>=0; --i)
p=p*x+a[i+1];
p=p*x;
brojnik=p;
p=0;
for (i=n-1; i>=0; --i)
p=p*x+a[i+m+1];
p*=x;
nazivnik=p;
printf("\n");
printf("p(%lf)= %lf", x, brojnik/nazivnik);
return 0;
}
dodoria, evo ti 11.3.5 zad...
#include <stdio.h>
int main (void)
{
int m,n,i;
double a[100],x,p,brojnik,nazivnik;
printf("Upisi n: "); scanf("%d", &n);
printf("Upisi m: "); scanf("%d", &m);
for (i=0; i⇐m+n; ++i)
{
printf("Upisi a%d: ", i);
scanf("%lf", &a[i]);
}
printf ("\n");
x=a[0];
p=0;
for (i=m-1; i>=0; –i)
p=p*x+a[i+1];
p=p*x;
brojnik=p;
p=0;
for (i=n-1; i>=0; –i)
p=p*x+a[i+m+1];
p*=x;
nazivnik=p;
printf("\n");
printf("p(%lf)= %lf", x, brojnik/nazivnik);
return 0;
}
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 19:16 pet, 30. 12. 2011 Naslov: |
|
|
[quote="jema"]moze mi neko lijepo pojasnit varijabilne parametre XD sto je nagore, znam rijesit sve zadatke s funkcijama i sad krenem na nizove i dodjem do zad. 11.2.5. i pogubim se u 'tim varijabilnim parametrima' jer mi jos nije sjelo u glavu sto to tocno znaci XD evo ovako sam ja nekako napisala taj zadatak, al ne radi naravno XD pa ako mi netko preko tog zadatka moze objasnit lijepo te varijabilne parametre da kad procitam te 2 rijeci odmah u glavi znam sta i kako :) hvala liiipo :D
i jos, u ovom zadatku mi za funkciju min i max kaze (konkretno za red 7) invalid operands to binary... pa eto ak i to moze neko objasnit :) opet, hvala :)
#include <stdio.h>
double min(double niz[], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double max(double niz [], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double *mini, double niz[], int n)
{
*mini=min(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double *maxi, double niz[], int n)
{
*maxi=max(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i) suma+=niz[i];
return suma;
fmin(&suma,niz,n);
fmax(&suma,niz,n);
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
}[/quote]
Prije svega pogledaj si malo koliki ti je min kad udjes u funkciju min...?
Nemas niti int min, a niti inicijalizaciju, a u for petlji radis usporedbu s njima...
U funkciji f imas return suma, i nakon toga dva poziva do kojih nikad nece doci...
I sad kad sam pogledao cijeli program...pitanje:
Pozivas funkciju u kojoj racunas sumu cijelog niza, te tu sumu saljes u fmin i fmax...Prvo je promjenis u minimum, pa zatim u maximum i vratis je nazad...? Nest tu nije bas uredu, ali bez teksta zadatka tesko je odgonetnuti sto...
jema (napisa): | moze mi neko lijepo pojasnit varijabilne parametre XD sto je nagore, znam rijesit sve zadatke s funkcijama i sad krenem na nizove i dodjem do zad. 11.2.5. i pogubim se u 'tim varijabilnim parametrima' jer mi jos nije sjelo u glavu sto to tocno znaci XD evo ovako sam ja nekako napisala taj zadatak, al ne radi naravno XD pa ako mi netko preko tog zadatka moze objasnit lijepo te varijabilne parametre da kad procitam te 2 rijeci odmah u glavi znam sta i kako hvala liiipo
i jos, u ovom zadatku mi za funkciju min i max kaze (konkretno za red 7) invalid operands to binary... pa eto ak i to moze neko objasnit opet, hvala
#include <stdio.h>
double min(double niz[], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double max(double niz [], int n)
{
int i;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double *mini, double niz[], int n)
{
*mini=min(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double *maxi, double niz[], int n)
{
*maxi=max(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i) suma+=niz[i];
return suma;
fmin(&suma,niz,n);
fmax(&suma,niz,n);
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
} |
Prije svega pogledaj si malo koliki ti je min kad udjes u funkciju min...?
Nemas niti int min, a niti inicijalizaciju, a u for petlji radis usporedbu s njima...
U funkciji f imas return suma, i nakon toga dva poziva do kojih nikad nece doci...
I sad kad sam pogledao cijeli program...pitanje:
Pozivas funkciju u kojoj racunas sumu cijelog niza, te tu sumu saljes u fmin i fmax...Prvo je promjenis u minimum, pa zatim u maximum i vratis je nazad...? Nest tu nije bas uredu, ali bez teksta zadatka tesko je odgonetnuti sto...
|
|
[Vrh] |
|
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
|
[Vrh] |
|
gflegar Forumaš(ica)
Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol:
|
|
[Vrh] |
|
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 21:50 pon, 2. 1. 2012 Naslov: |
|
|
jest, upravu si ;) kuzim...e sad ako mi jos tako lijepo mozes objasnit varijab.parametre, njihovu svrhu i tako to XD :) hvala ti :)
[size=9][color=#999999]Added after 15 minutes:[/color][/size]
evo gflegar...lijepo si mi pomogao...sad sam malo sredila program, i vrati lijepo sumu i minimum, ali maximum steka :/ pa ako jos to mozes pogledat....i mislim da sad lijepo znam te var.parametre :) hvaaaaaaalaaa puuuuuuuuuno :D
#include <stdio.h>
double minii(double niz[], int n)
{
int i;double min;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double maxii(double niz [], int n)
{
int i;double max;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double niz[], int n)
{
double *mini;
*mini=minii(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double niz[], int n)
{
double *maxi;
*maxi=maxii(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i)
suma+=niz[i];
fmin(niz,n);
fmax(niz,n);
return suma;
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
}
[size=9][color=#999999]Added after 6 minutes:[/color][/size]
evo opet.......popravih ja sama problem.... :D sad radi ko svicarski sat hehee :))))) hvala punoooooooooooo :D sad mi je dusa na mjestu :D
jest, upravu si kuzim...e sad ako mi jos tako lijepo mozes objasnit varijab.parametre, njihovu svrhu i tako to XD hvala ti
Added after 15 minutes:
evo gflegar...lijepo si mi pomogao...sad sam malo sredila program, i vrati lijepo sumu i minimum, ali maximum steka pa ako jos to mozes pogledat....i mislim da sad lijepo znam te var.parametre hvaaaaaaalaaa puuuuuuuuuno
#include <stdio.h>
double minii(double niz[], int n)
{
int i;double min;
for (i=0; i<n; ++i)
if (niz[i]<min) min=niz[i];
return min;
}
double maxii(double niz [], int n)
{
int i;double max;
for (i=0; i<n; ++i)
if (niz[i]>max) max=niz[i];
return max;
}
void fmin(double niz[], int n)
{
double *mini;
*mini=minii(niz,n);
printf("minimum je %lf. \n", *mini);
}
void fmax(double niz[], int n)
{
double *maxi;
*maxi=maxii(niz,n);
printf("maximum je %lf. \n", *maxi);
}
double f(double niz[], int n)
{
int i;
double suma=0.0;
for (i=0; i<n; ++i)
suma+=niz[i];
fmin(niz,n);
fmax(niz,n);
return suma;
}
int main (void)
{
int n,i;
double niz[100];
printf("Upisi n: ");
scanf("%d", &n);
for (i=0; i<n; ++i)
{
printf("Upisi %d. clan: ",i+1);
scanf("%lf", &niz[i]);
}
printf("suma je %lf. \n", f(niz,n));
return 0;
}
Added after 6 minutes:
evo opet.......popravih ja sama problem.... sad radi ko svicarski sat hehee )))) hvala punoooooooooooo sad mi je dusa na mjestu
|
|
[Vrh] |
|
gflegar Forumaš(ica)
Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol:
|
Postano: 23:34 pon, 2. 1. 2012 Naslov: |
|
|
Samo da te upozorim na jednu gresku u programu.
[code:1]void fmin(double niz[], int n)
{
double *mini;
*mini=minii(niz,n);
printf("minimum je %lf. \n", *mini);
} [/code:1]
Ti tu deklariras pokazivac na double [tt]mini[/tt], ali ga ne inicijaliziras ni na sto. Tj, on tebi pokazuje na neko random mjesto u memoriji cija se adresa slucajno nasla kao vrijednost na mjestu gdje je alociran [tt]mini[/tt]. Dakle, to mjesto najvjerojatnije nije alocirano u tvojem programu, sto znaci da ce na linuxu to vrlo vjerojatno vratiti gresku kod pokretanja programa, dok windows nece vratii gresku ali postoji mogucnost da neki drugi (ili taj isti) program promijeni vrijednost na toj memorijskoj lokaciji i program ce vratiti pogresnu vrijednost.
Sve u svemu, ovo je greska zbog koje bi se moglo izgubiti nekoliko bodova na kolokviju (osim ako asistenti nisu jako darezljivi).
Moj savjet ti je da uopce ne deklariras nikakve pointere kad ti netrebaju. Stavi [tt]mini[/tt] kao najobicniju varijablu tipa double. (isto vrijedi i za [tt]maxi[/tt] u funkciji [tt]fmax[/tt])
Samo da te upozorim na jednu gresku u programu.
Kod: | void fmin(double niz[], int n)
{
double *mini;
*mini=minii(niz,n);
printf("minimum je %lf. \n", *mini);
} |
Ti tu deklariras pokazivac na double mini, ali ga ne inicijaliziras ni na sto. Tj, on tebi pokazuje na neko random mjesto u memoriji cija se adresa slucajno nasla kao vrijednost na mjestu gdje je alociran mini. Dakle, to mjesto najvjerojatnije nije alocirano u tvojem programu, sto znaci da ce na linuxu to vrlo vjerojatno vratiti gresku kod pokretanja programa, dok windows nece vratii gresku ali postoji mogucnost da neki drugi (ili taj isti) program promijeni vrijednost na toj memorijskoj lokaciji i program ce vratiti pogresnu vrijednost.
Sve u svemu, ovo je greska zbog koje bi se moglo izgubiti nekoliko bodova na kolokviju (osim ako asistenti nisu jako darezljivi).
Moj savjet ti je da uopce ne deklariras nikakve pointere kad ti netrebaju. Stavi mini kao najobicniju varijablu tipa double. (isto vrijedi i za maxi u funkciji fmax)
|
|
[Vrh] |
|
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 0:10 uto, 3. 1. 2012 Naslov: |
|
|
Zadnja opaska gflegara je pricica neposredno prije Napomene 10.2.3 iz moje skripte, inace dio poglavlja 10.2 koje detaljno objasnjava varijabilne argumente, sto mi nekako ukazuje na povrsnost ucenja. Mozda da pazljivije procitas sto tamo pise, prije nego trazis da ti netko objasni to isto ("teorija za varijabilne parametre")?
Ako ti ne pase moj stil pisanja, objasnjeno je i u predavanju 10, pocevsi slideovi 41-52.
Zadnja opaska gflegara je pricica neposredno prije Napomene 10.2.3 iz moje skripte, inace dio poglavlja 10.2 koje detaljno objasnjava varijabilne argumente, sto mi nekako ukazuje na povrsnost ucenja. Mozda da pazljivije procitas sto tamo pise, prije nego trazis da ti netko objasni to isto ("teorija za varijabilne parametre")?
Ako ti ne pase moj stil pisanja, objasnjeno je i u predavanju 10, pocevsi slideovi 41-52.
_________________ 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] |
|
Namdev Forumaš(ica)
Pridružen/a: 01. 11. 2011. (19:23:40) Postovi: (29)16
Spol:
|
Postano: 13:33 uto, 3. 1. 2012 Naslov: |
|
|
@dodoria
Moj 11.3.5. zadatak koji izbacuje točno rješenje iz skripte. U svrhu vježbe kad nam je ovako pristojno zadan primjer ja ga zapišem u kod tako da ga ne moram iznova učitavati, jer je puno važnije da mi ključan dio koda izračuna vrijednost od toga da se vidi kako ja znam učitati neke varijable. :)
Ti si u svojem kodu deklarirala niz a[20], što je pretpostavljam bilo proizvoljno, ali zadatka kaže da je m + n < 100, te da moramo učitati m + n + 1 realnih brojeva, što je najviše 100 članova niza. Ne utječe na rješenje primjera, ali mislim da na takve stvari gledaju na kolokvijima.
[code:1]#include <stdio.h>
double fu(double *a, int m, int n)
{
double x = a[0], p1 = 0, p2 = 0;
int i;
for(i = m + n; i > 0; i--)
{
if(i <= m) p1 = p1 * x + a[i];
else p2 = p2 * x + a[i];
}
return p1/p2;
}
int main(void)
{
int m = 3, n = 2;
double a[100] = {2,3,5,7,11,13};
printf(" %g", fu(a,m,n));
return 0;
}
[/code:1]
Tek sam počeo vježbati ove zadatke, pa bi molio nekog dobre volje da mi ukaže ako mi je kod pogrešan, tj. ako sam "slučajno" pogodio ovo rješenje. Unaprijed zahvaljujem.
@dodoria
Moj 11.3.5. zadatak koji izbacuje točno rješenje iz skripte. U svrhu vježbe kad nam je ovako pristojno zadan primjer ja ga zapišem u kod tako da ga ne moram iznova učitavati, jer je puno važnije da mi ključan dio koda izračuna vrijednost od toga da se vidi kako ja znam učitati neke varijable.
Ti si u svojem kodu deklarirala niz a[20], što je pretpostavljam bilo proizvoljno, ali zadatka kaže da je m + n < 100, te da moramo učitati m + n + 1 realnih brojeva, što je najviše 100 članova niza. Ne utječe na rješenje primjera, ali mislim da na takve stvari gledaju na kolokvijima.
Kod: | #include <stdio.h>
double fu(double *a, int m, int n)
{
double x = a[0], p1 = 0, p2 = 0;
int i;
for(i = m + n; i > 0; i--)
{
if(i <= m) p1 = p1 * x + a[i];
else p2 = p2 * x + a[i];
}
return p1/p2;
}
int main(void)
{
int m = 3, n = 2;
double a[100] = {2,3,5,7,11,13};
printf(" %g", fu(a,m,n));
return 0;
}
|
Tek sam počeo vježbati ove zadatke, pa bi molio nekog dobre volje da mi ukaže ako mi je kod pogrešan, tj. ako sam "slučajno" pogodio ovo rješenje. Unaprijed zahvaljujem.
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 13:50 uto, 3. 1. 2012 Naslov: |
|
|
[quote="Namdev"]...mislim da na takve stvari gledaju na kolokvijima.[/quote]
Naravno da gledamo. Ako se tu stavi premalo, program ne rjesava sve probleme koje treba rjesavati (ref. definicijal algoritma).
[quote="Namdev"]Tek sam počeo vježbati ove zadatke, pa bi molio nekog dobre volje da mi ukaže ako mi je kod pogrešan, tj. ako sam "slučajno" pogodio ovo rješenje.[/quote]
Do na cinjenicu da tvoj program ne ucitava brojeve, cini mi se ok.
Namdev (napisa): | ...mislim da na takve stvari gledaju na kolokvijima. |
Naravno da gledamo. Ako se tu stavi premalo, program ne rjesava sve probleme koje treba rjesavati (ref. definicijal algoritma).
Namdev (napisa): | Tek sam počeo vježbati ove zadatke, pa bi molio nekog dobre volje da mi ukaže ako mi je kod pogrešan, tj. ako sam "slučajno" pogodio ovo rješenje. |
Do na cinjenicu da tvoj program ne ucitava brojeve, cini mi se ok.
_________________ 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] |
|
|