Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

5.DZ (zadatak)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
Youth
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 29. 07. 2013. (14:17:53)
Postovi: (4)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 15:18 pet, 30. 1. 2015    Naslov: 5.DZ Citirajte i odgovorite

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]
Korisnički profil Pošaljite privatnu poruku
hendrix
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 03. 09. 2012. (15:59:06)
Postovi: (92)16
Sarma = la pohva - posuda
29 = 31 - 2

PostPostano: 16:09 pet, 30. 1. 2015    Naslov: Citirajte i odgovorite

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]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 16:27 pet, 30. 1. 2015    Naslov: Citirajte i odgovorite

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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Youth
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 29. 07. 2013. (14:17:53)
Postovi: (4)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 17:26 pet, 30. 1. 2015    Naslov: Citirajte i odgovorite

Hvala što ste uočili pogrešku. Nakon više pokušaja, uopće nisam uočila da je tu greška. Sada sve radi. Hvala :)
Hvala što ste uočili pogrešku. Nakon više pokušaja, uopće nisam uočila da je tu greška. Sada sve radi. Hvala Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Josip1996
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 31. 01. 2015. (15:27:30)
Postovi: (2)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 15:29 sub, 31. 1. 2015    Naslov: Sličan problem Citirajte i odgovorite

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)





Zadatak 3.c
 Description:

Download
 Filename:  Zadatak 3.c
 Filesize:  1.61 KB
 Downloaded:  206 Time(s)

[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 17:45 sub, 31. 1. 2015    Naslov: Citirajte i odgovorite

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:
Kod:
            if(a[i]!=max13)
Question

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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
pubava
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2014. (13:47:07)
Postovi: (A)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 21:25 sri, 10. 6. 2015    Naslov: Citirajte i odgovorite

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]
Korisnički profil Pošaljite privatnu poruku
El_Loco
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 26. 05. 2012. (15:25:04)
Postovi: (31)16
Spol: muško
Sarma = la pohva - posuda
14 = 27 - 13

PostPostano: 21:38 sri, 10. 6. 2015    Naslov: Citirajte i odgovorite

[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]
Korisnički profil Pošaljite privatnu poruku
pubava
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2014. (13:47:07)
Postovi: (A)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 5:39 čet, 11. 6. 2015    Naslov: Citirajte i odgovorite

Ispravila sam to i sad radi. Hvala! :)
Ispravila sam to i sad radi. Hvala! Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan