2
Zadaća iz Programiranja 30.9.2004 1. (40 bodova) Napisati funkciju: void ispisiNiz(char *niz) koja će slučajnim poretkom ispisati sve znakove iz zadanog niza. Npr. ispisiNiz ("ABC"); će ispisati jedan od sljedećih 6 nizova: ABC ili ACB ili BAC ili BCA ili CAB ili CBA. Dozvoljeno je mijenjati zadani niz. void ispisiNiz(char *niz){ short sl, i; while (strlen(niz)){ sl = rand() % strlen(niz); printf("%c", niz[sl]); strcpy(&niz[sl], &niz[sl+1]); /* ili:for(i = sl; niz[i]; i++ ) niz[i] = niz[i+1]; niz[i] = 0; */ } } 2. (40 bodova) Slijedna formatirana datoteka "prekrsaji.txt" sadrži zapise o prometnim prekršajima vozača. Svaki redak sadrži: šifra vozača (long) # ime i prezime (char[30+1]) # naziv prekršaja (char[100+1]) # broj bodova (short) \n Retci u datoteci su sortirani uzlazno po šifri vozača (jedan vozač može imati više prekršaja odnosno redaka u datoteci). Napisati program koji će ispisati ime i prezime vozača sa najvećim ukupnim brojem bodova. Ukoliko više vozača ima jednak broj ukupnih bodova, ispisati onoga sa najvećom šifrom. void main(){ long sifVoz, sifPreth = -1, maxBrBod = 0; int brBod, trBod = 0; char imeP[30+1], maxImeP[30+1]; FILE *f; if ((f=fopen("d:\\temp\\prekrsaji.txt", "r"))==NULL){ printf("Pogreska kod otvaranja datoteke!"); exit(1); } while(fscanf(f, "%ld#%[^#]#%*[^#]#%d%*c", &sifVoz, imeP, &brBod) == 3){ if (sifVoz == sifPreth){ trBod += brBod; } else { trBod = brBod; } if (trBod >= maxBrBod){ maxBrBod = trBod; strcpy(maxImeP, imeP); } sifPreth = sifVoz; } printf("%s", maxImeP); }

11_30.09.2004

Embed Size (px)

DESCRIPTION

Rok

Citation preview

Page 1: 11_30.09.2004

Zadaća iz Programiranja

30.9.2004

1. (40 bodova)

Napisati funkciju: void ispisiNiz(char *niz)

koja će slučajnim poretkom ispisati sve znakove iz zadanog niza.

Npr. ispisiNiz ("ABC");

će ispisati jedan od sljedećih 6 nizova: ABC ili ACB ili BAC ili BCA ili CAB ili CBA.

Dozvoljeno je mijenjati zadani niz.

void ispisiNiz(char *niz){

short sl, i;

while (strlen(niz)){

sl = rand() % strlen(niz);

printf("%c", niz[sl]);

strcpy(&niz[sl], &niz[sl+1]);

/* ili:for(i = sl; niz[i]; i++ )

niz[i] = niz[i+1];

niz[i] = 0;

*/

}

}

2. (40 bodova)

Slijedna formatirana datoteka "prekrsaji.txt" sadrži zapise o prometnim prekršajima

vozača. Svaki redak sadrži: šifra vozača

(long) #

ime i prezime

(char[30+1]) #

naziv prekršaja

(char[100+1]) #

broj bodova

(short) \n

Retci u datoteci su sortirani uzlazno po šifri vozača (jedan vozač može imati više prekršaja

odnosno redaka u datoteci).

Napisati program koji će ispisati ime i prezime vozača sa najvećim ukupnim brojem bodova.

Ukoliko više vozača ima jednak broj ukupnih bodova, ispisati onoga sa najvećom šifrom. void main(){

long sifVoz, sifPreth = -1, maxBrBod = 0;

int brBod, trBod = 0;

char imeP[30+1], maxImeP[30+1];

FILE *f;

if ((f=fopen("d:\\temp\\prekrsaji.txt", "r"))==NULL){

printf("Pogreska kod otvaranja datoteke!");

exit(1);

}

while(fscanf(f, "%ld#%[^#]#%*[^#]#%d%*c", &sifVoz, imeP, &brBod) == 3){

if (sifVoz == sifPreth){

trBod += brBod;

} else {

trBod = brBod;

}

if (trBod >= maxBrBod){

maxBrBod = trBod;

strcpy(maxImeP, imeP);

}

sifPreth = sifVoz;

}

printf("%s", maxImeP);

}

Page 2: 11_30.09.2004

3. (35 bodova)

Napisati funkciju prototipa: float *gen_mat_udaljenosti(float *tocke, int brRed)

Zadano polje *tocke je matrica sa 2 stupca i brRed redaka. Redak i predstavlja x i y

koordinate točke i. Napraviti i vratiti matricu udaljenosti svih točki (zadanih matricom

tocke) pri čemu element novonastale matrice sa (i,j) koordinatama predstavlja udaljenost

točaka i i j.

Npr. za zadanu matricu: 0 0 0 sqrt(2) 2

1 1 treba generirati matricu: sqrt(2) 0 sqrt(2)

1 0 2 sqrt(2) 0

float *gen_mat_udaljenosti(float *tocke, int brRed){

int i,j;

float *m = (float *) malloc(sizeof(float) * brRed * brRed);

if (m == NULL) return NULL;

for (i=0; i<brRed; i++)

for (j=i; j<brRed; j++){

m[j*brRed+i] = m[i*brRed+j] = sqrt(

pow((tocke[i*2] - tocke[j*2]) ,2)

+ pow((tocke[i*2+1] - tocke[j*2+1]),2)

);

}

return m;

}

4. (35 bodova)

Neformatirana datoteka "lokomotiva.dat" sadrži podatke o lokomotivama:

šifra lokomotive long

naziv polje od 100 znakova

šifra prvog vagona long

Direktna neformatirana datoteka "vagoni.dat" sadrži podatke o vagonima:

šifra vagona long

broj mjesta short

šifra slijedećeg vagona long

pri čemu šifra vagona odgovara rednom broju zapisa u datoteci. Posljednji vagon u

kompoziciji za šifru sljedećeg vagona ima -1.

Napisati funkciju koja će vratiti šifru lokomotive koja uključuje najviše mjesta odnosno u

čijoj kompoziciji su vagoni sa maksimalnim ukupnim brojem mjesta. Ukoliko dođe do

pogreške vratiti -1.

nije napisano rješenje