or2010avgust_rjesenja
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