Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Bole13 Forumaš(ica)
Pridružen/a: 01. 11. 2008. (00:33:50) Postovi: (5A)16
Spol:
|
Postano: 19:37 čet, 10. 12. 2009 Naslov: |
|
|
Napišite program koji učitava prirodni broj n≤17, te niz od n cijelih brojeva. Program treba ispisati produkt zadnjih 5 neparnih elemenata niza.
Ako neparnih brojeva ima manje od 5, ispišite produkt svih neparnih. Ako neparnih brojeva uopće nema u nizu, ispišite 1.
Ja sam to ovako rjesio, kompajlira se dobro, ali nes me zeza, nece ucitat kako spada i onda ne ispise na kraju nista:
[code:1]#include <stdio.h>
#include <stdlib.h>
int main () {
int n, a[17], i, br=0, b=1;
scanf("%d ", &n);
for(i=0; i<n; i++) scanf("%d ", &a[i]);
i=n-1;
while((br<5) && (i>=0)) {
if(a[i]%2==1) {
br++;
b*=a[i];
i--;
}
}
if(br==0) printf("1");
else printf("%d", b);
system("pause");
return 0;
}[/code:1]
[size=9][color=#999999]Added after 16 minutes:[/color][/size]
Nvm nasao gresku -.-, smanjivao indekse niza unutar while petlje u ifu umjesto izvan ifa.
Napišite program koji učitava prirodni broj n≤17, te niz od n cijelih brojeva. Program treba ispisati produkt zadnjih 5 neparnih elemenata niza.
Ako neparnih brojeva ima manje od 5, ispišite produkt svih neparnih. Ako neparnih brojeva uopće nema u nizu, ispišite 1.
Ja sam to ovako rjesio, kompajlira se dobro, ali nes me zeza, nece ucitat kako spada i onda ne ispise na kraju nista:
Kod: | #include <stdio.h>
#include <stdlib.h>
int main () {
int n, a[17], i, br=0, b=1;
scanf("%d ", &n);
for(i=0; i<n; i++) scanf("%d ", &a[i]);
i=n-1;
while((br<5) && (i>=0)) {
if(a[i]%2==1) {
br++;
b*=a[i];
i--;
}
}
if(br==0) printf("1");
else printf("%d", b);
system("pause");
return 0;
} |
Added after 16 minutes:
Nvm nasao gresku -.-, smanjivao indekse niza unutar while petlje u ifu umjesto izvan ifa.
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Bole13 Forumaš(ica)
Pridružen/a: 01. 11. 2008. (00:33:50) Postovi: (5A)16
Spol:
|
|
[Vrh] |
|
eve Forumaš(ica)
Pridružen/a: 13. 07. 2009. (23:07:06) Postovi: (192)16
Spol:
|
Postano: 23:45 pet, 11. 12. 2009 Naslov: |
|
|
za zadatak "Napišite program koji učitava prirodne brojeve a i b, te u padajućem poretku ispisuje sve cijele brojeve koji se nalaze između a i b (bez a i b), a u zapisu s bazom 9 imaju samo znamenke između 5 i 8 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!
" mi piše da mi je netočno za input 712, 717, a kod ide ovako
[code:1]#include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, i, j, z, p, x, k=0;
scanf ("%d %d", &a, &b);
if (a>b)
{
int temp=a;
a=b;
b=temp;
}
for (i=b; i>=a; --i)
{
x=i;
if (x==0) printf ("0 ");
while(x)
{ p=1;
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
if (p!=0) { k=k+1; printf ("%d ", i); }
}
if (k==0) printf ("Nema takvih brojeva.");
return 0;
}
[/code:1]
a za zadatak "Napišite program koji učitava prirodni broj n, te "crta" pravokutni trokut sastavljen od zvjezdica ("*"). Trokut treba imati katete duljina n (vodoravna) i 4n (vertikalna), a pravi kut mora biti "nacrtan" u gornjem lijevom kutu.
Uputa: prvih 4 linija treba biti duljine n, idućih 4 duljine n-1, i tako dalje.
" piše da je netočno za input 22, kod:
[code:1]#include <stdio.h>
#include<stdlib.h>
int main ()
{
int n, m, i, j, k;
scanf ("%d", &n);
m=n;
for (i=1; i<=n; i++)
{ for (j=1; j<=4; j++)
{for (k=1; k<=m; k++)
printf ("*");
if (j!=4) printf ("\n"); }
m=m-1;
printf ("\n");}
return 0;
}[/code:1]
koliko ja vidim zadaci mi rade dobro, da li netko vidi grešku?
za zadatak "Napišite program koji učitava prirodne brojeve a i b, te u padajućem poretku ispisuje sve cijele brojeve koji se nalaze između a i b (bez a i b), a u zapisu s bazom 9 imaju samo znamenke između 5 i 8 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!
" mi piše da mi je netočno za input 712, 717, a kod ide ovako
Kod: | #include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, i, j, z, p, x, k=0;
scanf ("%d %d", &a, &b);
if (a>b)
{
int temp=a;
a=b;
b=temp;
}
for (i=b; i>=a; --i)
{
x=i;
if (x==0) printf ("0 ");
while(x)
{ p=1;
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
if (p!=0) { k=k+1; printf ("%d ", i); }
}
if (k==0) printf ("Nema takvih brojeva.");
return 0;
}
|
a za zadatak "Napišite program koji učitava prirodni broj n, te "crta" pravokutni trokut sastavljen od zvjezdica ("*"). Trokut treba imati katete duljina n (vodoravna) i 4n (vertikalna), a pravi kut mora biti "nacrtan" u gornjem lijevom kutu.
Uputa: prvih 4 linija treba biti duljine n, idućih 4 duljine n-1, i tako dalje.
" piše da je netočno za input 22, kod:
Kod: | #include <stdio.h>
#include<stdlib.h>
int main ()
{
int n, m, i, j, k;
scanf ("%d", &n);
m=n;
for (i=1; i<=n; i++)
{ for (j=1; j<=4; j++)
{for (k=1; k<=m; k++)
printf ("*");
if (j!=4) printf ("\n"); }
m=m-1;
printf ("\n");}
return 0;
} |
koliko ja vidim zadaci mi rade dobro, da li netko vidi grešku?
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 23:44 ned, 3. 1. 2010 Naslov: |
|
|
I ja imam problema sa zadatkom sa bazom. Kod mene je jedino bila baza 8 i trebalo je ispisati brojeve koje imaju u bazi 8 znamenke između 3 i 7 uključivo. Kaže mi da mi je pogrešno za 205 719.
[code:1]#include <stdio.h>
int main (void) {
int a, br,b,i,z, pv, kv=0, c;
scanf("%d %d", &a, &b);
if (a>b) {
pv=a;
a=b;
b=pv;
}
for (i=a;i<=b;i++) {
br=1;
c=i;
while (c>0) {
z=c%8;
if (z<3) br=0;
c/=8;
}
if (br) {
kv=1;
printf("%d ", i);
}
}
if (!(kv))
printf("Nema takvih brojeva.");
system("pause");
return 0;
}
[/code:1]
I ja imam problema sa zadatkom sa bazom. Kod mene je jedino bila baza 8 i trebalo je ispisati brojeve koje imaju u bazi 8 znamenke između 3 i 7 uključivo. Kaže mi da mi je pogrešno za 205 719.
Kod: | #include <stdio.h>
int main (void) {
int a, br,b,i,z, pv, kv=0, c;
scanf("%d %d", &a, &b);
if (a>b) {
pv=a;
a=b;
b=pv;
}
for (i=a;i<=b;i++) {
br=1;
c=i;
while (c>0) {
z=c%8;
if (z<3) br=0;
c/=8;
}
if (br) {
kv=1;
printf("%d ", i);
}
}
if (!(kv))
printf("Nema takvih brojeva.");
system("pause");
return 0;
}
|
|
|
[Vrh] |
|
JANKRI Forumaš(ica)
Pridružen/a: 10. 07. 2008. (02:30:58) Postovi: (10F)16
Spol:
Lokacija: Zagreb
|
Postano: 0:35 pon, 4. 1. 2010 Naslov: |
|
|
[quote="eve"]za zadatak "Napišite program koji učitava prirodne brojeve a i b, te u padajućem poretku ispisuje sve cijele brojeve koji se nalaze između a i b (bez a i b), a u zapisu s bazom 9 imaju samo znamenke između 5 i 8 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!
" mi piše da mi je netočno za input 712, 717, a kod ide ovako
[code:1]#include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, i, j, z, p, x, k=0;
scanf ("%d %d", &a, &b);
if (a>b)
{
int temp=a;
a=b;
b=temp;
}
for (i=b; i>=a; --i)
{
x=i;
if (x==0) printf ("0 ");
while(x)
{ p=1;
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
if (p!=0) { k=k+1; printf ("%d ", i); }
}
if (k==0) printf ("Nema takvih brojeva.");
return 0;
}
[/code:1][/quote]
Evo ispravljene verzije, stavio sam komentar na sve što sam mijenjao.
[code:1]
#include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, z, p, x, k=0, temp, i;
scanf ("%d %d", &a, &b);
if (a>b)
{
temp=a;
a=b;
b=temp;
}
for (i=b-1; i>a; --i) //...izmedju a i b (bez a i b)
{
x=i;
//x nikad nece biti 0, a i b su prirodni, a i da je 0 ne bi ga trebalo ispisati, jer broj mora sadrzavati samo
//znamenke 5, 6, 7, 8
p=1; //prije petlje ga postavis na 1, da ne radis to stalno
while(x)
{
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
//poslije zadnjeg ispisanog broja ti ne treba razmak.
//postupimo ovako: prvi broj koji ispisujemo (kad naidjemo na njega k ce biti nula)
//ispisemo bez razmaka prije njega, a prije svih ostalih ispisemo razmak
if(p==1)
{
if(k!=0) printf(" ");
k=k+1;
printf("%d", i);
}
}
if (k==0) printf ("Nema takvih brojeva.");
printf("\n"); //na kraju predjemo u novi red
return 0;
}
[/code:1]
[quote="eve"]a za zadatak "Napišite program koji učitava prirodni broj n, te "crta" pravokutni trokut sastavljen od zvjezdica ("*"). Trokut treba imati katete duljina n (vodoravna) i 4n (vertikalna), a pravi kut mora biti "nacrtan" u gornjem lijevom kutu.
Uputa: prvih 4 linija treba biti duljine n, idućih 4 duljine n-1, i tako dalje.
" piše da je netočno za input 22, kod:
[code:1]#include <stdio.h>
#include<stdlib.h>
int main ()
{
int n, m, i, j, k;
scanf ("%d", &n);
m=n;
for (i=1; i<=n; i++)
{ for (j=1; j<=4; j++)
{for (k=1; k<=m; k++)
printf ("*");
if (j!=4) printf ("\n"); }
m=m-1;
printf ("\n");}
return 0;
}[/code:1]
koliko ja vidim zadaci mi rade dobro, da li netko vidi grešku?[/quote]
U ovom ne mogu naći grešku, napisao sam drukčiji kod, pa probaj ti usporediti, možda nađeš grešku (ako je uopće ima), opet, stavio sam komentare.
[code:1]
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int n, i, j;
scanf("%d", &n);
while(n) //sve dok je n>0 ispisi cetiri linije zvijezdica duljine n
{
for(i=0; i<4; ++i) //petlja koja prelazi iz linije u liniju
{
for(j=0; j<n; ++j) //petlja koja ispisuje n zvijezdica u trenutnu liniju
printf("*");
printf("\n"); //prebaci se u novu liniju
}
n--; //smanji n za 1
}
return 0;
}
[/code:1]
[quote="Tomy007"]I ja imam problema sa zadatkom sa bazom. Kod mene je jedino bila baza 8 i trebalo je ispisati brojeve koje imaju u bazi 8 znamenke između 3 i 7 uključivo. Kaže mi da mi je pogrešno za 205 719.
[code:1]#include <stdio.h>
int main (void) {
int a, br,b,i,z, pv, kv=0, c;
scanf("%d %d", &a, &b);
if (a>b) {
pv=a;
a=b;
b=pv;
}
for (i=a;i<=b;i++) {
br=1;
c=i;
while (c>0) {
z=c%8;
if (z<3) br=0;
c/=8;
}
if (br) {
kv=1;
printf("%d ", i);
}
}
if (!(kv))
printf("Nema takvih brojeva.");
system("pause");
return 0;
}
[/code:1][/quote]
Sve je u redu, samo pripazi na ono što sam u zadatku prije popravio i ako je to zadatak za zadaću ili što već kad šalješ makni system("pause").
eve (napisa): | za zadatak "Napišite program koji učitava prirodne brojeve a i b, te u padajućem poretku ispisuje sve cijele brojeve koji se nalaze između a i b (bez a i b), a u zapisu s bazom 9 imaju samo znamenke između 5 i 8 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!
" mi piše da mi je netočno za input 712, 717, a kod ide ovako
Kod: | #include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, i, j, z, p, x, k=0;
scanf ("%d %d", &a, &b);
if (a>b)
{
int temp=a;
a=b;
b=temp;
}
for (i=b; i>=a; --i)
{
x=i;
if (x==0) printf ("0 ");
while(x)
{ p=1;
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
if (p!=0) { k=k+1; printf ("%d ", i); }
}
if (k==0) printf ("Nema takvih brojeva.");
return 0;
}
|
|
Evo ispravljene verzije, stavio sam komentar na sve što sam mijenjao.
Kod: |
#include<stdlib.h>
#include<stdio.h>
int main ()
{
int a, b, z, p, x, k=0, temp, i;
scanf ("%d %d", &a, &b);
if (a>b)
{
temp=a;
a=b;
b=temp;
}
for (i=b-1; i>a; --i) //...izmedju a i b (bez a i b)
{
x=i;
//x nikad nece biti 0, a i b su prirodni, a i da je 0 ne bi ga trebalo ispisati, jer broj mora sadrzavati samo
//znamenke 5, 6, 7, 8
p=1; //prije petlje ga postavis na 1, da ne radis to stalno
while(x)
{
z=x%9;
x=x/9;
if (z!=5 && z!=6 && z!=7 && z!=8) { p=0; break; }
}
//poslije zadnjeg ispisanog broja ti ne treba razmak.
//postupimo ovako: prvi broj koji ispisujemo (kad naidjemo na njega k ce biti nula)
//ispisemo bez razmaka prije njega, a prije svih ostalih ispisemo razmak
if(p==1)
{
if(k!=0) printf(" ");
k=k+1;
printf("%d", i);
}
}
if (k==0) printf ("Nema takvih brojeva.");
printf("\n"); //na kraju predjemo u novi red
return 0;
}
|
eve (napisa): | a za zadatak "Napišite program koji učitava prirodni broj n, te "crta" pravokutni trokut sastavljen od zvjezdica ("*"). Trokut treba imati katete duljina n (vodoravna) i 4n (vertikalna), a pravi kut mora biti "nacrtan" u gornjem lijevom kutu.
Uputa: prvih 4 linija treba biti duljine n, idućih 4 duljine n-1, i tako dalje.
" piše da je netočno za input 22, kod:
Kod: | #include <stdio.h>
#include<stdlib.h>
int main ()
{
int n, m, i, j, k;
scanf ("%d", &n);
m=n;
for (i=1; i<=n; i++)
{ for (j=1; j<=4; j++)
{for (k=1; k<=m; k++)
printf ("*");
if (j!=4) printf ("\n"); }
m=m-1;
printf ("\n");}
return 0;
} |
koliko ja vidim zadaci mi rade dobro, da li netko vidi grešku? |
U ovom ne mogu naći grešku, napisao sam drukčiji kod, pa probaj ti usporediti, možda nađeš grešku (ako je uopće ima), opet, stavio sam komentare.
Kod: |
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int n, i, j;
scanf("%d", &n);
while(n) //sve dok je n>0 ispisi cetiri linije zvijezdica duljine n
{
for(i=0; i<4; ++i) //petlja koja prelazi iz linije u liniju
{
for(j=0; j<n; ++j) //petlja koja ispisuje n zvijezdica u trenutnu liniju
printf("*");
printf("\n"); //prebaci se u novu liniju
}
n--; //smanji n za 1
}
return 0;
}
|
Tomy007 (napisa): | I ja imam problema sa zadatkom sa bazom. Kod mene je jedino bila baza 8 i trebalo je ispisati brojeve koje imaju u bazi 8 znamenke između 3 i 7 uključivo. Kaže mi da mi je pogrešno za 205 719.
Kod: | #include <stdio.h>
int main (void) {
int a, br,b,i,z, pv, kv=0, c;
scanf("%d %d", &a, &b);
if (a>b) {
pv=a;
a=b;
b=pv;
}
for (i=a;i<=b;i++) {
br=1;
c=i;
while (c>0) {
z=c%8;
if (z<3) br=0;
c/=8;
}
if (br) {
kv=1;
printf("%d ", i);
}
}
if (!(kv))
printf("Nema takvih brojeva.");
system("pause");
return 0;
}
|
|
Sve je u redu, samo pripazi na ono što sam u zadatku prije popravio i ako je to zadatak za zadaću ili što već kad šalješ makni system("pause").
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 10:48 pon, 4. 1. 2010 Naslov: |
|
|
Vec sam vise puta rekao da verifikator [b]moze[/b] imati gresku (pogotovo sto su ove godine mnogi zadaci novi, a i engine se ponesto mijenjao).
Na pocetnoj stranici aplikacije i u helpu lijepo je opisano kako se prijavljuju problemi, pa se mozete javiti tako i onda cu provjeriti. Ako greska postoji, ispravit cu ju.
Sto se konkretnog prigovora tice, Tomy007, nisi dobro procitao zadatak (nasao sam te preko mail adrese na Forumu i to vise necu raditi jer je naporno; javljajte se sa svim potrebnim podacima!).
[quote="Aplikacija za zadace"]Napišite program koji učitava prirodne brojeve a i b, te u [color=red]padajućem[/color] poretku ispisuje sve cijele brojeve koji se nalaze između a i b ([color=red]bez a i b[/color]), a u zapisu s bazom 8 imaju samo znamenke između 3 i 7 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)![/quote]
Ti ispisujes u rastucem poretku i s ukljucenim granicama.
[bg=indigo][color=white]Dakle, kad prigovarate zadatku, [b]napisite text zadatka[/b]; bez toga vam nitko ne moze dati korisnu uputu![/color][/bg] Copy/paste stvarno nije neki veliki podvig...
Vec sam vise puta rekao da verifikator moze imati gresku (pogotovo sto su ove godine mnogi zadaci novi, a i engine se ponesto mijenjao).
Na pocetnoj stranici aplikacije i u helpu lijepo je opisano kako se prijavljuju problemi, pa se mozete javiti tako i onda cu provjeriti. Ako greska postoji, ispravit cu ju.
Sto se konkretnog prigovora tice, Tomy007, nisi dobro procitao zadatak (nasao sam te preko mail adrese na Forumu i to vise necu raditi jer je naporno; javljajte se sa svim potrebnim podacima!).
Aplikacija za zadace (napisa): | Napišite program koji učitava prirodne brojeve a i b, te u padajućem poretku ispisuje sve cijele brojeve koji se nalaze između a i b (bez a i b), a u zapisu s bazom 8 imaju samo znamenke između 3 i 7 (uključivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)! |
Ti ispisujes u rastucem poretku i s ukljucenim granicama.
Dakle, kad prigovarate zadatku, napisite text zadatka; bez toga vam nitko ne moze dati korisnu uputu! Copy/paste stvarno nije neki veliki podvig...
_________________ 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] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 17:38 pon, 4. 1. 2010 Naslov: |
|
|
Ne mogu si naći grešku u dva programa sa nizovima.
Napišite program koji učitava prirodni broj n<131, te niz od n cijelih brojeva. Program treba pronaći najveći element niza djeljiv s 15, te u originalnom poretku ispisati indekse onih elementa niza kojima je prva znamenka jedna od znamenki pronađenog maksimuma.
Ako traženi maksimum ne postoji, program ne smije ništa ispisati. Ispisane brojeve odvojite razmacima.
[code:1]#include <stdio.h>
int main (void) {
int n, x[130], i, br=0, a, b, z1, z2, a1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
a=x[1];
if (!(a%15))
br=1;
for (i=0; i<n; i++)
if (!(x[i]%15) && (x[i]>a)) {
br=1;
a=x[i];
}
if (br) {
for (i=0; i<n; i++) {
if (x[i]<0)
b=0-x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=0-a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
return 0;
}[/code:1]
Napišite program koji učitava prirodni broj n≤17, te niz od n cijelih brojeva. Program treba ispisati produkt zadnjih 6 neparnih elemenata niza.
Ako neparnih brojeva ima manje od 6, ispišite produkt svih neparnih. Ako neparnih brojeva uopće nema u nizu, ispišite 1.
[code:1]#include <stdio.h>
int main (void) {
int n, i, x[17], br=0;
double produkt=1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
for (i=n-1; i>=0; i--) {
if ((x[i]%2) && (br<6)) {
produkt*=x[i];
++br;
}
}
printf("%g", produkt);
return 0;
}[/code:1]
Nadam se da će se dati nekom pogledati, već 3 sata buljim u kodove i ne razumijem što šteka. 1. se ruši na nekom test primjeru sa 130 brojeva koji mi se nije dao tipkati, ali meni je radio za dosta mojih primjera sa razumnim brojem elemenata niza, a u drugom je problem taj produkt. Uzeo sam double jer je produkt 6 velika broja prilično velik. Za test primjer koji se od mene traži "13 5310 5727 2904 8091 7237 7439 6752 3893 6901 6221 5539 8544 6993", čini mi se da jedino double može to ispisati i na kalkulatoru sam provjerio i ispada mi isto kao u programu, pa pretpostavljam da je ipak neki problem u tipu varijable ali ne znam koji tip da stavim jer za long long int isto ne radi.
Ne mogu si naći grešku u dva programa sa nizovima.
Napišite program koji učitava prirodni broj n<131, te niz od n cijelih brojeva. Program treba pronaći najveći element niza djeljiv s 15, te u originalnom poretku ispisati indekse onih elementa niza kojima je prva znamenka jedna od znamenki pronađenog maksimuma.
Ako traženi maksimum ne postoji, program ne smije ništa ispisati. Ispisane brojeve odvojite razmacima.
Kod: | #include <stdio.h>
int main (void) {
int n, x[130], i, br=0, a, b, z1, z2, a1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
a=x[1];
if (!(a%15))
br=1;
for (i=0; i<n; i++)
if (!(x[i]%15) && (x[i]>a)) {
br=1;
a=x[i];
}
if (br) {
for (i=0; i<n; i++) {
if (x[i]<0)
b=0-x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=0-a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
return 0;
} |
Napišite program koji učitava prirodni broj n≤17, te niz od n cijelih brojeva. Program treba ispisati produkt zadnjih 6 neparnih elemenata niza.
Ako neparnih brojeva ima manje od 6, ispišite produkt svih neparnih. Ako neparnih brojeva uopće nema u nizu, ispišite 1.
Kod: | #include <stdio.h>
int main (void) {
int n, i, x[17], br=0;
double produkt=1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
for (i=n-1; i>=0; i--) {
if ((x[i]%2) && (br<6)) {
produkt*=x[i];
++br;
}
}
printf("%g", produkt);
return 0;
} |
Nadam se da će se dati nekom pogledati, već 3 sata buljim u kodove i ne razumijem što šteka. 1. se ruši na nekom test primjeru sa 130 brojeva koji mi se nije dao tipkati, ali meni je radio za dosta mojih primjera sa razumnim brojem elemenata niza, a u drugom je problem taj produkt. Uzeo sam double jer je produkt 6 velika broja prilično velik. Za test primjer koji se od mene traži "13 5310 5727 2904 8091 7237 7439 6752 3893 6901 6221 5539 8544 6993", čini mi se da jedino double može to ispisati i na kalkulatoru sam provjerio i ispada mi isto kao u programu, pa pretpostavljam da je ipak neki problem u tipu varijable ali ne znam koji tip da stavim jer za long long int isto ne radi.
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 18:27 pon, 4. 1. 2010 Naslov: |
|
|
Kod prvog ne valja trazenje maximuma. Recimo da imas brojeve
15, 21, 3,
tebi ce maksimum ispasti 21 (jer na njega inicijaliziras [tt]a[/tt]) iako nije djeljiv s 15.
U drugom, stavi obicni [tt]int[/tt]; nisam tada racunao da ce netko uzeti u obzir da se tu ocekuje overflow, pa da ce staviti neki pametniji tip. Nagodinu cu promijeniti u sumu, ali sada ne mogu da ne zeznem nekog drugog. Kao krpez, dodat cu nekakvu napomenu. Hvala!
Fascinantno je da je to stari zadatak i do sada nitko nije skuzio propust... trecu godinu za redom. :D
Kod prvog ne valja trazenje maximuma. Recimo da imas brojeve
15, 21, 3,
tebi ce maksimum ispasti 21 (jer na njega inicijaliziras a) iako nije djeljiv s 15.
U drugom, stavi obicni int; nisam tada racunao da ce netko uzeti u obzir da se tu ocekuje overflow, pa da ce staviti neki pametniji tip. Nagodinu cu promijeniti u sumu, ali sada ne mogu da ne zeznem nekog drugog. Kao krpez, dodat cu nekakvu napomenu. Hvala!
Fascinantno je da je to stari zadatak i do sada nitko nije skuzio propust... trecu godinu za redom.
_________________ 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] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 7:56 uto, 5. 1. 2010 Naslov: |
|
|
Ispravio sam u zadatku s produktom tip u int i proradio je, ali još uvijek imam problema sa zadatkom :
Napišite program koji učitava prirodni broj n<131, te niz od n cijelih brojeva. Program treba pronaći najveći element niza djeljiv s 15, te u originalnom poretku ispisati indekse onih elementa niza kojima je prva znamenka jedna od znamenki pronađenog maksimuma.
Ako traženi maksimum ne postoji, program ne smije ništa ispisati. Ispisane brojeve odvojite razmacima.
Ispravio sam onu grešku sa inicijalizacijom. Sada sam napravio petlju koja ide po cijelom nizu i traži broj koji je djeljiv sa 15. Ako postoji broj djeljiv sa 15 inicijalizira a na taj broj i postavlja varijablu br na 1. Sljedeći dio programa se izvršava samo ako je nađen broj djeljiv sa 15 tj. ako je br==1 (if (br) { .....}). Što se tiče ove varijable j, probao sam i s njom i bez nje i uvijek javlja da je krivo. Tu varijablu sam bio stavio za svaki slučaj ako se možda ne traži indeks i tog maksimuma nego svih brojeva koji zadovoljavaju uvijet da im je prva znamenka jednaka nekoj znamenci maximuma, ali kako sam rekao probao sam i s tom varijablom i bez nje i javlja da je krivo u oba slučaja. Unutar petlje za provjeru uvijet postoje još varijable b i a1 koji su ustvari apsolutna vrijednost. A1 je apsolutna vrijednost maximuma, a b je apsolutna vrijednost člana niza na kojeg dođe petlja. Kad imam apsolutne vrijednosti tek onda vadim znamenke i vršim usporedbu. Ako je zadovoljen uvjet da je 1. znamenka od b jednaka nekoj od znamenki od a ispisujem i(printf("%d ", i). Evo to su bili komentari na program tako da bi možda bio malo jasniji svaki dio i da se možda lakše nađe bug koji ima. Sad ide ispravljena verzija zadatka :
[code:1]#include <stdio.h>
int main (void) {
int n, x[130], i, j, br=0, a, b, z1, z2, a1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
for(i=0; i<n; i++)
if (x[i]%15==0) {
a=x[i];
br=1;
j=i; }
if (br) {
for (i=0; i<n; i++)
if ((x[i]%15==0) && (x[i]>a))
{ a=x[i];
j=i; }
for (i=0; i<n; i++) {
if (i!=j) {
if (x[i]<0)
b=0-x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=0-a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
}
return 0;
}[/code:1]
Ispravio sam u zadatku s produktom tip u int i proradio je, ali još uvijek imam problema sa zadatkom :
Napišite program koji učitava prirodni broj n<131, te niz od n cijelih brojeva. Program treba pronaći najveći element niza djeljiv s 15, te u originalnom poretku ispisati indekse onih elementa niza kojima je prva znamenka jedna od znamenki pronađenog maksimuma.
Ako traženi maksimum ne postoji, program ne smije ništa ispisati. Ispisane brojeve odvojite razmacima.
Ispravio sam onu grešku sa inicijalizacijom. Sada sam napravio petlju koja ide po cijelom nizu i traži broj koji je djeljiv sa 15. Ako postoji broj djeljiv sa 15 inicijalizira a na taj broj i postavlja varijablu br na 1. Sljedeći dio programa se izvršava samo ako je nađen broj djeljiv sa 15 tj. ako je br==1 (if (br) { .....}). Što se tiče ove varijable j, probao sam i s njom i bez nje i uvijek javlja da je krivo. Tu varijablu sam bio stavio za svaki slučaj ako se možda ne traži indeks i tog maksimuma nego svih brojeva koji zadovoljavaju uvijet da im je prva znamenka jednaka nekoj znamenci maximuma, ali kako sam rekao probao sam i s tom varijablom i bez nje i javlja da je krivo u oba slučaja. Unutar petlje za provjeru uvijet postoje još varijable b i a1 koji su ustvari apsolutna vrijednost. A1 je apsolutna vrijednost maximuma, a b je apsolutna vrijednost člana niza na kojeg dođe petlja. Kad imam apsolutne vrijednosti tek onda vadim znamenke i vršim usporedbu. Ako je zadovoljen uvjet da je 1. znamenka od b jednaka nekoj od znamenki od a ispisujem i(printf("%d ", i). Evo to su bili komentari na program tako da bi možda bio malo jasniji svaki dio i da se možda lakše nađe bug koji ima. Sad ide ispravljena verzija zadatka :
Kod: | #include <stdio.h>
int main (void) {
int n, x[130], i, j, br=0, a, b, z1, z2, a1;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%d", &x[i]);
for(i=0; i<n; i++)
if (x[i]%15==0) {
a=x[i];
br=1;
j=i; }
if (br) {
for (i=0; i<n; i++)
if ((x[i]%15==0) && (x[i]>a))
{ a=x[i];
j=i; }
for (i=0; i<n; i++) {
if (i!=j) {
if (x[i]<0)
b=0-x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=0-a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
}
return 0;
} |
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
Postano: 14:29 uto, 5. 1. 2010 Naslov: |
|
|
cini mi se da, iako jako kompliciras, i imas dosta nepotrebnih stvari
npr, tokom samog ucitavanja niza mozes nac najveceg djeljivog sa 15
svaki broj koji ucitas nakon sta si vidio dal je to ili nije najveci djeljiv sa 15 mozes pomnozit sa -1 ako je negativan
kasnije mozes maximum pomnozit sa -1 ako treba
tako da nemas provjere
i sad se vise ne sjecam...
ono tipa 0-a je ist onako... nepotrebno pisat 0
stvar radi, samo makni ono i!=j
eventualno ti ne radi jer nemas #include <stdlib.h>, neznam sta se sad tamo nalazi, al mozda bi po standardu trebalo bit, pa nadodaj to i kazem, makni za i!=j....
trebalo bi radit, za onaj primjer koji si naveo ti radi kad maknes...
cini mi se da, iako jako kompliciras, i imas dosta nepotrebnih stvari
npr, tokom samog ucitavanja niza mozes nac najveceg djeljivog sa 15
svaki broj koji ucitas nakon sta si vidio dal je to ili nije najveci djeljiv sa 15 mozes pomnozit sa -1 ako je negativan
kasnije mozes maximum pomnozit sa -1 ako treba
tako da nemas provjere
i sad se vise ne sjecam...
ono tipa 0-a je ist onako... nepotrebno pisat 0
stvar radi, samo makni ono i!=j
eventualno ti ne radi jer nemas #include <stdlib.h>, neznam sta se sad tamo nalazi, al mozda bi po standardu trebalo bit, pa nadodaj to i kazem, makni za i!=j....
trebalo bi radit, za onaj primjer koji si naveo ti radi kad maknes...
_________________ Mario Berljafa
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 16:15 uto, 5. 1. 2010 Naslov: |
|
|
[quote="Gino"]cini mi se da, iako jako kompliciras, i imas dosta nepotrebnih stvari
npr, tokom samog ucitavanja niza mozes nac najveceg djeljivog sa 15
svaki broj koji ucitas nakon sta si vidio dal je to ili nije najveci djeljiv sa 15 mozes pomnozit sa -1 ako je negativan
kasnije mozes maximum pomnozit sa -1 ako treba
tako da nemas provjere
i sad se vise ne sjecam...
ono tipa 0-a je ist onako... nepotrebno pisat 0
stvar radi, samo makni ono i!=j
eventualno ti ne radi jer nemas #include <stdlib.h>, neznam sta se sad tamo nalazi, al mozda bi po standardu trebalo bit, pa nadodaj to i kazem, makni za i!=j....
trebalo bi radit, za onaj primjer koji si naveo ti radi kad maknes...[/quote]
Evo ispravio sam sve i opet dobivam u mailu ovu poruku : Provjera zad: 1 (netočno za input: '130 15 -6 -22 0 8 -2 -70 41 14 67 -73 -58
-80 -90 32 -39 32 42 24 1 35 99 -9 -100 -36 72 5 23 98 -71 6 12 24 85 -88 -69
-18 -58 72 97 -91 99 -61 -71 -91 71 -9 41 13 -85 -58 -52 -87 34 -52 -22 5 54
-100 2 84 7 -86 7 -9 -74 39 74 -31 10 71 -22 9 -91 8 19 81 99 -41 -7 -86 2 41
-73 -65 90 6 40 44 7 -59 27 -87 -44 -67 5 -18 73 -21 52 -18 -51 -71 92 -42 38 10
-62 36 69 32 51 -29 -28 78 6 -38 -16 -55 -95 91 -13 33 -97 43 66 9 -75 38 88') . Ovo je sad kod koji sam poslao :
[code:1]#include <stdio.h>
int main (void) {
int n, x[130], i, br=0, a, a1, b, z1, z2;
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &x[i]);
if (x[i]%15==0) {
a=x[i];
br=1;
}
}
if (br) {
for (i=0; i<n; i++)
if ((x[i]%15==0) && (x[i]>a))
a=x[i];
for (i=0; i<n; i++) {
if (x[i]<0)
b=-1*x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=-1*a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
return 0;
}[/code:1]
Gino (napisa): | cini mi se da, iako jako kompliciras, i imas dosta nepotrebnih stvari
npr, tokom samog ucitavanja niza mozes nac najveceg djeljivog sa 15
svaki broj koji ucitas nakon sta si vidio dal je to ili nije najveci djeljiv sa 15 mozes pomnozit sa -1 ako je negativan
kasnije mozes maximum pomnozit sa -1 ako treba
tako da nemas provjere
i sad se vise ne sjecam...
ono tipa 0-a je ist onako... nepotrebno pisat 0
stvar radi, samo makni ono i!=j
eventualno ti ne radi jer nemas #include <stdlib.h>, neznam sta se sad tamo nalazi, al mozda bi po standardu trebalo bit, pa nadodaj to i kazem, makni za i!=j....
trebalo bi radit, za onaj primjer koji si naveo ti radi kad maknes... |
Evo ispravio sam sve i opet dobivam u mailu ovu poruku : Provjera zad: 1 (netočno za input: '130 15 -6 -22 0 8 -2 -70 41 14 67 -73 -58
-80 -90 32 -39 32 42 24 1 35 99 -9 -100 -36 72 5 23 98 -71 6 12 24 85 -88 -69
-18 -58 72 97 -91 99 -61 -71 -91 71 -9 41 13 -85 -58 -52 -87 34 -52 -22 5 54
-100 2 84 7 -86 7 -9 -74 39 74 -31 10 71 -22 9 -91 8 19 81 99 -41 -7 -86 2 41
-73 -65 90 6 40 44 7 -59 27 -87 -44 -67 5 -18 73 -21 52 -18 -51 -71 92 -42 38 10
-62 36 69 32 51 -29 -28 78 6 -38 -16 -55 -95 91 -13 33 -97 43 66 9 -75 38 88') . Ovo je sad kod koji sam poslao :
Kod: | #include <stdio.h>
int main (void) {
int n, x[130], i, br=0, a, a1, b, z1, z2;
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &x[i]);
if (x[i]%15==0) {
a=x[i];
br=1;
}
}
if (br) {
for (i=0; i<n; i++)
if ((x[i]%15==0) && (x[i]>a))
a=x[i];
for (i=0; i<n; i++) {
if (x[i]<0)
b=-1*x[i];
else
b=x[i];
while (b>0) {
z1=b%10;
b/=10;
}
if (a<0)
a1=-1*a;
else
a1=a;
while (a1>0) {
z2=a1%10;
if (z1==z2) {printf("%d ", i); break; }
a1/=10;
}
}
}
return 0;
} |
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 17:48 uto, 5. 1. 2010 Naslov: |
|
|
Broj 0 ima jednu znamenku (nulu), a ti za njega preskocis cijelu petlju, a time preskocis i postavljanje varijable [tt]z1[/tt].
Tome ti sluzi ispis na cemu je stvar pala: pogledas koji je maximum (pomocni ispis koji mozes ubaciti dok doma testiras program) i onda prodjes kroz niz i vidis sto ne ispisuje, a trebao bi ili sto ispisuje, a ne bi trebao. Unos 130 brojeva nije neki problem (copy/paste ili - dok isprobavas i trazis gresku - hardkodiras u program).
Inace, trazenje prve znamenke je lakse ovako izvesti:
[code:1]int z1 = (x[i] < 0 ? -x[i] : x[i]);
while (z1 >= 10) z1 /= 10;[/code:1]
Dakle, dijelis s 10 dok ne padnes na manje od dvije znamenke. Ljepsi kod, a ujedno radi i za nulu.
Broj 0 ima jednu znamenku (nulu), a ti za njega preskocis cijelu petlju, a time preskocis i postavljanje varijable z1.
Tome ti sluzi ispis na cemu je stvar pala: pogledas koji je maximum (pomocni ispis koji mozes ubaciti dok doma testiras program) i onda prodjes kroz niz i vidis sto ne ispisuje, a trebao bi ili sto ispisuje, a ne bi trebao. Unos 130 brojeva nije neki problem (copy/paste ili - dok isprobavas i trazis gresku - hardkodiras u program).
Inace, trazenje prve znamenke je lakse ovako izvesti:
Kod: | int z1 = (x[i] < 0 ? -x[i] : x[i]);
while (z1 >= 10) z1 /= 10; |
Dakle, dijelis s 10 dok ne padnes na manje od dvije znamenke. Ljepsi kod, a ujedno radi i za nulu.
_________________ 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] |
|
jkrstic Forumaš(ica)
Pridružen/a: 01. 10. 2009. (19:28:31) Postovi: (AC)16
Spol:
Lokacija: Somewhere in time
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 18:50 uto, 5. 1. 2010 Naslov: |
|
|
[quote="vsego"]Broj 0 ima jednu znamenku (nulu), a ti za njega preskocis cijelu petlju, a time preskocis i postavljanje varijable [tt]z1[/tt].
Tome ti sluzi ispis na cemu je stvar pala: pogledas koji je maximum (pomocni ispis koji mozes ubaciti dok doma testiras program) i onda prodjes kroz niz i vidis sto ne ispisuje, a trebao bi ili sto ispisuje, a ne bi trebao. Unos 130 brojeva nije neki problem (copy/paste ili - dok isprobavas i trazis gresku - hardkodiras u program).
Inace, trazenje prve znamenke je lakse ovako izvesti:
[code:1]int z1 = (x[i] < 0 ? -x[i] : x[i]);
while (z1 >= 10) z1 /= 10;[/code:1]
Dakle, dijelis s 10 dok ne padnes na manje od dvije znamenke. Ljepsi kod, a ujedno radi i za nulu.[/quote]
Hehehe puno hvala. Ajme nisam do sad znao kolko jedna mala nula može našteti i koliko se možeš iživcirati zbog jedne nule. Cijeli dan razmišljam u ovom zadatku, razbijam glavu tražeći grešku, a greška je u jednoj maloj usamljenoj nuli :P. Zadatak je sada točan i napokon je i peta zadaća u potpunosti točna. Jupiii ! :D
vsego (napisa): | Broj 0 ima jednu znamenku (nulu), a ti za njega preskocis cijelu petlju, a time preskocis i postavljanje varijable z1.
Tome ti sluzi ispis na cemu je stvar pala: pogledas koji je maximum (pomocni ispis koji mozes ubaciti dok doma testiras program) i onda prodjes kroz niz i vidis sto ne ispisuje, a trebao bi ili sto ispisuje, a ne bi trebao. Unos 130 brojeva nije neki problem (copy/paste ili - dok isprobavas i trazis gresku - hardkodiras u program).
Inace, trazenje prve znamenke je lakse ovako izvesti:
Kod: | int z1 = (x[i] < 0 ? -x[i] : x[i]);
while (z1 >= 10) z1 /= 10; |
Dakle, dijelis s 10 dok ne padnes na manje od dvije znamenke. Ljepsi kod, a ujedno radi i za nulu. |
Hehehe puno hvala. Ajme nisam do sad znao kolko jedna mala nula može našteti i koliko se možeš iživcirati zbog jedne nule. Cijeli dan razmišljam u ovom zadatku, razbijam glavu tražeći grešku, a greška je u jednoj maloj usamljenoj nuli . Zadatak je sada točan i napokon je i peta zadaća u potpunosti točna. Jupiii !
|
|
[Vrh] |
|
|