or2010avgust_rjesenja

Upload: aleem-spaho

Post on 05-Apr-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 or2010avgust_rjesenja

    1/6

    Univerzitet u Sarajevu

    Elektrotehniki fakultet Sarajevo

    Predmet: Osnove raunarstva

    Rjeenja nekih zadataka- popravni ispit odran 25. 8. 2010 -

    2a (grupa A). Napisati funkciju koja prima niz pozitivnih cijelih brojeva te pozitivan cijeli broj n, a

    zatim vraa broj lanova kod kojih je suma suma cifara djeljiva sa brojem n.

    int zad2aa(int* niz, int vel, int n) {

    int suma, tmp, br=0;

    for (i=0; i0) {

    suma = suma + tmp%10;

    tmp = tmp/10;

    }

    if (suma%n == 0) br++;

    }

    return br;

    }

    2a (grupa B). Napisati funkciju koja prima niz pozitivnih cijelih brojeva te pozitivan cijeli broj n, a

    zatim vraa broj lanova niza kod kojih je suma prve i zadnje cifre jednaka broju n.

    int zad2ab(int* niz, int vel, int n) {

    int prva, zadnja, tmp, br=0;

    for (i=0; i0) {zadnja=tmp%10;

    tmp = tmp/10;

    }

    if (prva+zadnja == n) br++;

    }

    return br;

    }

    2b (slino je u obje grupe). Napisati funkciju koja prima string koji sadri etverocifreni broj koji

    predstavlja ifru grada/opine. Ovaj broj je oblika:

    ABCK

    Pri emu su cifre ABC redni broj a K je suma pomou koje se provjerava ispravnost broja. Ukoliko

  • 7/31/2019 or2010avgust_rjesenja

    2/6

    string sadri znakove koji nisu cifre ili broj cifara nije 4 funkcija vraa 0. U suprotnom izraunava se

    suma po formuli

    K = 11 - (2*A + 3*B + 4*C)/11;

    Ako ova suma odgovara etvrtoj cifri broja funkcija vraa broj 1, u suprotnom vraa broj 0.

    int provjera_ispravnosti(char *string) {

    char *p = string;

    // Provjera prva dva uslova

    int duzina=0;

    while (*p != '\0') {

    duzina++;

    if (*p < '0' || *p > '9') return 0;

    p++;

    }

    if (duzina != 4) return 0;

    // Provjera sume

    p = string;

    int k = 11 - (2*(*p-'0') + 3*(*(p+1)-'0') + 4*(*(p+2)-'0'))/11;

    if (k == *(p+3) - '0') return 1;

    else return 0;

    }

    3 (slino je u obje grupe). Data je datoteka izbori2010.txt sljedeeg oblika:

    struct glas {

    char imekandidata[20];char prezimekandidata[20];

    char imestranke[20];

    }

    Svaki slog u datoteci predstavlja jedan glas za navedenog kandidata. Ko nije redovno dolazio na

    predavanja vjerovatno ne zna ta u informatici znai "slog". Po sistemu otvorenih lista, svaki glas za

    kandidata ujedno predstavlja i glas za stranku kojoj kandidat pripada. Na ekranu ispisati kandidata

    koji je dobio najvie glasova. Pored toga, u datoteku stranke.txt ispisati broj glasova za stranke u

    sljedeem obliku

    STRANKA GLASOVA

    Za izbore je registrovano 500 kandidata i 50 stranaka.

    #include

    struct glas {

    char imekandidata[20];

    char prezimekandidata[20];

    char imestranke[20];

    };

    int main() {

    FILE *ulaz, *izlaz;struct glas glasovi[1000]; // jako veliki broj

  • 7/31/2019 or2010avgust_rjesenja

    3/6

    // Nizovi glasova za kandidate i stranke e biti suplji, odnosno broj glasova za kandidata

    // ce biti registrovan samo prvi put gdje se kandidat javlja

    // Zato deklarisemo ove nizove na istu velicinu kao i niz glasova

    int kandidati[1000] = {0}, stranke[1000] = {0};

    int i=0, j;

    if ((ulaz = fopen("izbori2010.txt", "r")) == NULL) {printf ("Greska pri otvaranju ulazne datoteke.\n");

    exit (1);

    }

    if ((izlaz = fopen("stranke.txt","w"))==NULL) {

    printf("Greska pri otvaranju izlazne datoteke.\n");

    fclose(ulaz);

    exit (2);

    }

    while (fscanf(ulaz, "%20s%20s%20s\n", glasovi[i].imekandidata,glasovi[i].prezimekandidata, glasovi[i].imestranke) == 3 && i

  • 7/31/2019 or2010avgust_rjesenja

    4/6

    printf ("Kandidat sa najvise glasova je %s %s koji je osvojio %d glasova.\n",

    glasovi[maxj].imekandidata, glasovi[maxj].prezimekandidata, max);

    // U datoteku ispisujemo stranke sa glasovima, NESORTIRANO

    for (j=0; j

  • 7/31/2019 or2010avgust_rjesenja

    5/6

    exit (1);

    }

    if ((izlaz = fopen("stranke.txt","w"))==NULL) {

    printf("Greska pri otvaranju izlazne datoteke.\n");

    fclose(ulaz);

    exit (2);

    }

    while (fscanf(ulaz, "%20s%20s%20s\n", glasovi[i].imekandidata,

    glasovi[i].prezimekandidata, glasovi[i].imestranke) == 3 && i

  • 7/31/2019 or2010avgust_rjesenja

    6/6

    maxj=j;

    }

    }

    printf ("Kandidat sa najvise glasova je %s %s koji je osvojio %d glasova.\n",

    kandidati[maxj].imekandidata, kandidati[maxj].prezimekandidata, max);

    // U datoteku ispisujemo stranke sa glasovima, NESORTIRANOfor (j=0; j