Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Youth Forumaš(ica)
Pridružen/a: 29. 07. 2013. (14:17:53) Postovi: (4)16
|
Postano: 15:18 pet, 30. 1. 2015 Naslov: 5.DZ |
|
|
Molim da mi netko pomogne naći logičku grešku u sljedećem zadatku:
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 7, 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.
Za ovaj ulaz kaže da je netočan izlaz:
[quote]130 69 -51 -49 -81 -51 -3 24 -94 -12 26 -91 38 -34 92 -3 42 -73 -52 81 -11 26 -42 39 -38 -96 -13 -92 66 -26 45 35 -57 95 87 -38 -56 -17 87 -50 72 12 -41 10 79 -50 -94 21 -22 -46 1 68 81 60 6 -58 65 94 -49 30 -33 97 -36 10 92 -49 73 -65 34 59 -15 6 -29 45 -85 -51 95 -78 70 -27 -24 -29 -60 -44 -69 47 -1 96 40 51 26 -93 48 91 18 39 -59 -10 75 76 -52 -41 -19 19 -97 -3 69 99 19 38 -29 96 -92 12 -49 -61 -42 51 -65 99 2 61 -95 -51 51 24 89 92 -86 63 67[/quote]
[code:1]
#include <stdio.h>
int prvaznam( int n ){
if( n < 0 ) n = -n;
while( n > 10 )
n /= 10;
return n;
}
int znamenke[10], nizprvihznamenaka[130];
int znamcalc( int n ){
if( n < 0 ) n = -n;
while( n > 0 ){
znamenke[n%10] = 1;
n /= 10;
}
}
int main(void){
int n, i, niz[130], max, ima = 0, pp = 0;
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &niz[i]);
for( i = 0; i < n; i++ )
if( (!ima || max < niz[i]) && niz[i] % 7 == 0 ){
max = niz[i];
ima = 1;
}
znamcalc( max );
for( i = 0; i < n; i++ )
nizprvihznamenaka[i] = prvaznam(niz[i]);
if( ima )
for( i = 0; i < n; i++ )
if( znamenke[nizprvihznamenaka[i]] == 1 )
if( pp == 0 ){
printf("%d", i);
pp = 1;
}else
printf(" %d", i);
return 0;
}
[/code:1]
Molim da mi netko pomogne naći logičku grešku u sljedećem zadatku:
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 7, 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.
Za ovaj ulaz kaže da je netočan izlaz:
Citat: | 130 69 -51 -49 -81 -51 -3 24 -94 -12 26 -91 38 -34 92 -3 42 -73 -52 81 -11 26 -42 39 -38 -96 -13 -92 66 -26 45 35 -57 95 87 -38 -56 -17 87 -50 72 12 -41 10 79 -50 -94 21 -22 -46 1 68 81 60 6 -58 65 94 -49 30 -33 97 -36 10 92 -49 73 -65 34 59 -15 6 -29 45 -85 -51 95 -78 70 -27 -24 -29 -60 -44 -69 47 -1 96 40 51 26 -93 48 91 18 39 -59 -10 75 76 -52 -41 -19 19 -97 -3 69 99 19 38 -29 96 -92 12 -49 -61 -42 51 -65 99 2 61 -95 -51 51 24 89 92 -86 63 67 |
Kod: |
#include <stdio.h>
int prvaznam( int n ){
if( n < 0 ) n = -n;
while( n > 10 )
n /= 10;
return n;
}
int znamenke[10], nizprvihznamenaka[130];
int znamcalc( int n ){
if( n < 0 ) n = -n;
while( n > 0 ){
znamenke[n%10] = 1;
n /= 10;
}
}
int main(void){
int n, i, niz[130], max, ima = 0, pp = 0;
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &niz[i]);
for( i = 0; i < n; i++ )
if( (!ima || max < niz[i]) && niz[i] % 7 == 0 ){
max = niz[i];
ima = 1;
}
znamcalc( max );
for( i = 0; i < n; i++ )
nizprvihznamenaka[i] = prvaznam(niz[i]);
if( ima )
for( i = 0; i < n; i++ )
if( znamenke[nizprvihznamenaka[i]] == 1 )
if( pp == 0 ){
printf("%d", i);
pp = 1;
}else
printf(" %d", i);
return 0;
}
|
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
Postano: 16:09 pet, 30. 1. 2015 Naslov: |
|
|
Sto kad je nula taj maksimum? Funkcija [tt]znamcalc()[/tt] ti onda bas i ne radi najbolje, koliko vidim.
Btw, neovisno o tome, probaj se rijesiti navike koristenja globalnih varijabli na ovom kolegiju jer, koliko se sjecam, takve stvari "ne prolaze" na redovnim kolokvijima.
Logika iza zadatka je, koliko vidim, na mjestu, ali se to bez vecih problema moze rijesiti i "normalnim" prolascima kroz niz i bez dodatnih polja.
Sto kad je nula taj maksimum? Funkcija znamcalc() ti onda bas i ne radi najbolje, koliko vidim.
Btw, neovisno o tome, probaj se rijesiti navike koristenja globalnih varijabli na ovom kolegiju jer, koliko se sjecam, takve stvari "ne prolaze" na redovnim kolokvijima.
Logika iza zadatka je, koliko vidim, na mjestu, ali se to bez vecih problema moze rijesiti i "normalnim" prolascima kroz niz i bez dodatnih polja.
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:27 pet, 30. 1. 2015 Naslov: |
|
|
Ovo spada u koristenje "dodatnih" nizova, tako da na kolokviju ne bi "proslo", barem ne za sve bodove.
Greska je ovdje:
[code:1]int prvaznam( int n ){
if( n < 0 ) n = -n;
while( n > 10 )
n /= 10;
return n;
}[/code:1]
Koja je prva znamenka broja -10, a sto ce ova funkcija reci na to? (hint: problem je sa svim brojevima oblika [tex]10n, n \in \mathbb{Z}[/tex])
Takodjer, Hendrix je dobro primijetio: funkcija [tt]znamcalc[/tt] nigdje ne inicijalizira [tt]znamenke[/tt] na nule, sto znaci da je program radi korektno ako i samo ako je maksimum pandigitalan u dekadskoj bazi.
Ovo spada u koristenje "dodatnih" nizova, tako da na kolokviju ne bi "proslo", barem ne za sve bodove.
Greska je ovdje:
Kod: | int prvaznam( int n ){
if( n < 0 ) n = -n;
while( n > 10 )
n /= 10;
return n;
} |
Koja je prva znamenka broja -10, a sto ce ova funkcija reci na to? (hint: problem je sa svim brojevima oblika [tex]10n, n \in \mathbb{Z}[/tex])
Takodjer, Hendrix je dobro primijetio: funkcija znamcalc nigdje ne inicijalizira znamenke na nule, sto znaci da je program radi korektno ako i samo ako je maksimum pandigitalan u dekadskoj bazi.
_________________ 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] |
|
Youth Forumaš(ica)
Pridružen/a: 29. 07. 2013. (14:17:53) Postovi: (4)16
|
|
[Vrh] |
|
Josip1996 Forumaš(ica)
Pridružen/a: 31. 01. 2015. (15:27:30) Postovi: (2)16
|
Postano: 15:29 sub, 31. 1. 2015 Naslov: Sličan problem |
|
|
Imam sličan problem 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 13, 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.
Provjera zad: 3 (netočno za input: 130 -77 -75 19 -45 -82 26 -54 -17 -100 43 -94 -18 60 -44 6 73 25 55 34 -100 9 26 13 -37 -72 37 55 25 -83 5 -83 -59 31 36 -4 50 -38 42 -67 -38 -15 -61 44 -56 -4 -50 -84 -79 -96 51 -79 13 -23 35 77 5 -29 31 -70 -11 -64 -53 30 68 83 -74 18 -55 68 52 7 -47 91 -49 -2 -13 1 15 8 5 -35 30 -82 42 -36 95 -53 35 26 -23 -77 62 24 54 30 7 80 -53 52 48 99 -42 -99 90 10 -1 -24 -90 -87 85 16 -22 14 34 -80 78 29 -33 13 -46 44 37 -85 -33 -10 46 74 -30 94 26)
Imam sličan problem 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 13, 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.
Provjera zad: 3 (netočno za input: 130 -77 -75 19 -45 -82 26 -54 -17 -100 43 -94 -18 60 -44 6 73 25 55 34 -100 9 26 13 -37 -72 37 55 25 -83 5 -83 -59 31 36 -4 50 -38 42 -67 -38 -15 -61 44 -56 -4 -50 -84 -79 -96 51 -79 13 -23 35 77 5 -29 31 -70 -11 -64 -53 30 68 83 -74 18 -55 68 52 7 -47 91 -49 -2 -13 1 15 8 5 -35 30 -82 42 -36 95 -53 35 26 -23 -77 62 24 54 30 7 80 -53 52 48 99 -42 -99 90 10 -1 -24 -90 -87 85 16 -22 14 34 -80 78 29 -33 13 -46 44 37 -85 -33 -10 46 74 -30 94 26)
Description: |
|
Download |
Filename: |
Zadatak 3.c |
Filesize: |
1.61 KB |
Downloaded: |
274 Time(s) |
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 17:45 sub, 31. 1. 2015 Naslov: |
|
|
Zar nula nije znamenka? (ref. funkcija [tt]prvazn[/tt] i prerano iskakanje iz programa ako je [tt]max13 == 0[/tt])?
Nadalje, cemu sluzi linija 86:
[code:1] if(a[i]!=max13)[/code:1]:?:
Btw, ovo ti nece proci na kolokviju, jer ne spada u ANSI C:
[code:1] scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
...
p=max13;
while(p)
{
p/=10;
bro++;
if (p==0) break;
}
int b[bro];[/code:1]
Zar nula nije znamenka? (ref. funkcija prvazn i prerano iskakanje iz programa ako je max13 == 0)?
Nadalje, cemu sluzi linija 86:
Btw, ovo ti nece proci na kolokviju, jer ne spada u ANSI C:
Kod: | scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
...
p=max13;
while(p)
{
p/=10;
bro++;
if (p==0) break;
}
int b[bro]; |
_________________ 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] |
|
pubava Forumaš(ica)
Pridružen/a: 08. 10. 2014. (13:47:07) Postovi: (A)16
|
Postano: 21:25 sri, 10. 6. 2015 Naslov: |
|
|
2. zadatak iz datoteka:
Napišite program koji čita datoteku "dcxzxi.in", te ju prepisuje u datoteku "dcxzxi.out" tako da u prepisivanju sva pojavljivanja stringa "qlt" zamijeni stringom "xilbmbx".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Isprobala sam program i radi, osim ako nisam neki slucaj izostavila. Moze mi netko reci u cemu je problem?
[code:1]
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in, *out;
char c, d, k;
if((in=fopen("dcxzxi.in", "r"))==NULL)
{printf("Ne mogu ucitati datoteku!");
exit(1);}
if((out=fopen("dcxzxi.out", "w"))==NULL)
{printf("Ne mogu ucitati datoteku!");
fclose(in);
exit(1);
}
while((c=fgetc(in))!=EOF)
{
if(c=='q')
{
d=fgetc(in);
if(d=='l')
{
k=fgetc(in);
if(k=='t')
{
fprintf(out, "%s", "xilbmbx");
continue;
}
else if(k!=EOF)
{
fprintf(out, "%c%c%c", c, d, k);
continue;
}
}
else if(d!=EOF)
{
fprintf(out, "%c%c", c, d);
continue;
}
}
else fprintf(out, "%c", c);
}
fclose(in);fclose(out);
return 0;}
[/code:1]
2. zadatak iz datoteka:
Napišite program koji čita datoteku "dcxzxi.in", te ju prepisuje u datoteku "dcxzxi.out" tako da u prepisivanju sva pojavljivanja stringa "qlt" zamijeni stringom "xilbmbx".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Isprobala sam program i radi, osim ako nisam neki slucaj izostavila. Moze mi netko reci u cemu je problem?
Kod: |
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in, *out;
char c, d, k;
if((in=fopen("dcxzxi.in", "r"))==NULL)
{printf("Ne mogu ucitati datoteku!");
exit(1);}
if((out=fopen("dcxzxi.out", "w"))==NULL)
{printf("Ne mogu ucitati datoteku!");
fclose(in);
exit(1);
}
while((c=fgetc(in))!=EOF)
{
if(c=='q')
{
d=fgetc(in);
if(d=='l')
{
k=fgetc(in);
if(k=='t')
{
fprintf(out, "%s", "xilbmbx");
continue;
}
else if(k!=EOF)
{
fprintf(out, "%c%c%c", c, d, k);
continue;
}
}
else if(d!=EOF)
{
fprintf(out, "%c%c", c, d);
continue;
}
}
else fprintf(out, "%c", c);
}
fclose(in);fclose(out);
return 0;}
|
|
|
[Vrh] |
|
El_Loco Forumaš(ica)
Pridružen/a: 26. 05. 2012. (15:25:04) Postovi: (31)16
Spol:
|
Postano: 21:38 sri, 10. 6. 2015 Naslov: |
|
|
[quote="pubava"]2. zadatak iz datoteka:
Napišite program koji čita datoteku "dcxzxi.in", te ju prepisuje u datoteku "dcxzxi.out" tako da u prepisivanju sva pojavljivanja stringa "qlt" zamijeni stringom "xilbmbx".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Isprobala sam program i radi, osim ako nisam neki slucaj izostavila. Moze mi netko reci u cemu je problem?
[code:1]
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in, *out;
char c, d, k;
if((in=fopen("dcxzxi.in", "r"))==NULL)
{printf("Ne mogu ucitati datoteku!");
exit(1);}
if((out=fopen("dcxzxi.out", "w"))==NULL)
{printf("Ne mogu ucitati datoteku!");
fclose(in);
exit(1);
}
while((c=fgetc(in))!=EOF)
{
if(c=='q')
{
d=fgetc(in);
if(d=='l')
{
k=fgetc(in);
if(k=='t')
{
fprintf(out, "%s", "xilbmbx");
continue;
}
else if(k!=EOF)
{
fprintf(out, "%c%c%c", c, d, k);
continue;
}
}
else if(d!=EOF)
{
fprintf(out, "%c%c", c, d);
continue;
}
}
else fprintf(out, "%c", c);
}
fclose(in);fclose(out);
return 0;}
[/code:1][/quote]
Ako dobro vidim, ne radi za "qlqlt" ili "qqlt", dakle, kada d ili k budu q.
pubava (napisa): | 2. zadatak iz datoteka:
Napišite program koji čita datoteku "dcxzxi.in", te ju prepisuje u datoteku "dcxzxi.out" tako da u prepisivanju sva pojavljivanja stringa "qlt" zamijeni stringom "xilbmbx".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Isprobala sam program i radi, osim ako nisam neki slucaj izostavila. Moze mi netko reci u cemu je problem?
Kod: |
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in, *out;
char c, d, k;
if((in=fopen("dcxzxi.in", "r"))==NULL)
{printf("Ne mogu ucitati datoteku!");
exit(1);}
if((out=fopen("dcxzxi.out", "w"))==NULL)
{printf("Ne mogu ucitati datoteku!");
fclose(in);
exit(1);
}
while((c=fgetc(in))!=EOF)
{
if(c=='q')
{
d=fgetc(in);
if(d=='l')
{
k=fgetc(in);
if(k=='t')
{
fprintf(out, "%s", "xilbmbx");
continue;
}
else if(k!=EOF)
{
fprintf(out, "%c%c%c", c, d, k);
continue;
}
}
else if(d!=EOF)
{
fprintf(out, "%c%c", c, d);
continue;
}
}
else fprintf(out, "%c", c);
}
fclose(in);fclose(out);
return 0;}
|
|
Ako dobro vidim, ne radi za "qlqlt" ili "qqlt", dakle, kada d ili k budu q.
|
|
[Vrh] |
|
pubava Forumaš(ica)
Pridružen/a: 08. 10. 2014. (13:47:07) Postovi: (A)16
|
|
[Vrh] |
|
|