Upload
pero-kvrzica
View
218
Download
0
Embed Size (px)
DESCRIPTION
Rok
Citation preview
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);
}
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