5.DZ
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Programiranje 1 i 2

#1: 5.DZ Autor/ica: Youth PostPostano: 15:18 pet, 30. 1. 2015
    —
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;
}

#2:  Autor/ica: hendrix PostPostano: 16:09 pet, 30. 1. 2015
    —
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.

#3:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 16:27 pet, 30. 1. 2015
    —
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.

#4:  Autor/ica: Youth PostPostano: 17:26 pet, 30. 1. 2015
    —
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

#5: Sličan problem Autor/ica: Josip1996 PostPostano: 15:29 sub, 31. 1. 2015
    —
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:  68 Time(s)


#6:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 17:45 sub, 31. 1. 2015
    —
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];

#7:  Autor/ica: pubava PostPostano: 21:25 sri, 10. 6. 2015
    —
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;}

#8:  Autor/ica: El_Loco PostPostano: 21:38 sri, 10. 6. 2015
    —
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.

#9:  Autor/ica: pubava PostPostano: 5:39 čet, 11. 6. 2015
    —
Ispravila sam to i sad radi. Hvala! Smile



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin