#include #include #define MAX 30 typedef struct { char sifra_sobe[MAX]; char naziv_sobe[MAX]; int tezina; } Soba; typedef struct { int id_tima; char naziv_tima[MAX]; } Tim; typedef struct { int id_tima; char sifra_sobe[MAX]; int vreme_bekstva; } Pokusaj; typedef struct { int id_tima; int broj_poena; float prosecno_vreme; } Rezultat; int ucitajSobe(char naziv_fajla[MAX], Soba sobe[MAX]) { FILE* fajl = fopen(naziv_fajla, "r"); int broj_soba; fscanf(fajl, "%d\n", &broj_soba); int i, j; for (i = 0; i < broj_soba; i++) { fscanf(fajl, "%s", sobe[i].sifra_sobe); fscanf(fajl, "%s", sobe[i].naziv_sobe); for (j = 0; j < strlen(sobe[i].naziv_sobe); j++) if (sobe[i].naziv_sobe[j] == '*') sobe[i].naziv_sobe[j] = ' '; fscanf(fajl, "%d\n", &sobe[i].tezina); printf("%s - %s - %d\n", sobe[i].sifra_sobe, sobe[i].naziv_sobe, sobe[i].tezina); } fclose(fajl); return broj_soba; } int ucitajTimove(char naziv_fajla[MAX], Tim timovi[MAX]) { FILE* fajl = fopen(naziv_fajla, "r"); int broj_timova = 0; while (!feof(fajl)) { fscanf(fajl, "%d %s\n", &timovi[broj_timova].id_tima, timovi[broj_timova].naziv_tima); broj_timova++; } fclose(fajl); return broj_timova; } int ucitajPokusaje(char naziv_fajla[MAX], Pokusaj pokusaji[MAX]) { FILE* fajl = fopen(naziv_fajla, "r"); int broj_pokusaja; fscanf(fajl, "%d\n", &broj_pokusaja); int i; for (i = 0; i < broj_pokusaja; i++) { fscanf(fajl, "%d %s %d\n", &pokusaji[i].id_tima, pokusaji[i].sifra_sobe, &pokusaji[i].vreme_bekstva); } fclose(fajl); return broj_pokusaja; } int formirajRezultate(Tim timovi[MAX], int broj_timova, Pokusaj pokusaji[MAX], int broj_pokusaja, Soba sobe[MAX], int broj_soba, Rezultat rezultati[MAX]) { int broj_rezultata = broj_timova; int i, j, k; for (i = 0; i < broj_timova; i++) { rezultati[i].id_tima = timovi[i].id_tima; rezultati[i].broj_poena = 0; rezultati[i].prosecno_vreme = 0.0; int broj_uspesnih_pokusaja = 0; int ukupno_vreme = 0; for (j = 0; j < broj_pokusaja; j++) { if ((pokusaji[j].id_tima == rezultati[i].id_tima) && (pokusaji[j].vreme_bekstva != -1)) { for (k = 0; k < broj_soba; k++) { if (strcmp(pokusaji[j].sifra_sobe, sobe[k].sifra_sobe) == 0) { rezultati[i].broj_poena += sobe[k].tezina; break; } } broj_uspesnih_pokusaja++; ukupno_vreme += pokusaji[j].vreme_bekstva; } } if (broj_uspesnih_pokusaja != 0) rezultati[i].prosecno_vreme = (float)ukupno_vreme / broj_uspesnih_pokusaja; } return broj_rezultata; } void sortirajRezultate(Rezultat rezultati[MAX], int broj_rezultata) { Rezultat t; int i, j; for (i = 0; i < broj_rezultata - 1; i++) { for (j = i + 1; j < broj_rezultata; j++) { if ((rezultati[i].broj_poena < rezultati[j].broj_poena) || ((rezultati[i].broj_poena == rezultati[j].broj_poena) && (rezultati[i].prosecno_vreme > rezultati[j].prosecno_vreme))) { t = rezultati[i]; rezultati[i] = rezultati[j]; rezultati[j] = t; } } } } void ispisiRezultate(char naziv_fajla[MAX], Rezultat rezultati[MAX], int broj_rezultata) { FILE* fajl = fopen(naziv_fajla, "w"); int i; for (i = 0; i < broj_rezultata; i++) fprintf(fajl, "%d - %d - %.2f\n", rezultati[i].id_tima, rezultati[i].broj_poena, rezultati[i].prosecno_vreme); fclose(fajl); } void najboljiTimovi(FILE* fajl, Rezultat rezultati[MAX], int broj_rezultata, Tim timovi[MAX], int broj_timova) { int broj_mesta = 1; int trenutni_poeni = rezultati[0].broj_poena; int i, j; for (i = 0; i < broj_rezultata; i++) { if (rezultati[i].broj_poena < trenutni_poeni) { trenutni_poeni = rezultati[i].broj_poena; broj_mesta++; } if (broj_mesta > 3) break; for (j = 0; j < broj_timova; j++) { if (rezultati[i].id_tima == timovi[j].id_tima) { fprintf(fajl, "%d: %s\n", broj_mesta, timovi[j].naziv_tima); break; } } } } int main() { char sobe_fajl[MAX] = "sobe.txt"; char timovi_fajl[MAX] = "timovi.txt"; char pokusaji_fajl[MAX] = "pokusaji.txt"; char izlazni_fajl[MAX] = "izlaz.txt"; Soba sobe[MAX]; Tim timovi[MAX]; Pokusaj pokusaji[MAX]; Rezultat rezultati[MAX]; int broj_soba = ucitajSobe(sobe_fajl, sobe); int broj_timova = ucitajTimove(timovi_fajl, timovi); int broj_pokusaja = ucitajPokusaje(pokusaji_fajl, pokusaji); int broj_rezultata = formirajRezultate(timovi, broj_timova, pokusaji, broj_pokusaja, sobe, broj_soba, rezultati); sortirajRezultate(rezultati, broj_rezultata); ispisiRezultate(izlazni_fajl, rezultati, broj_rezultata); FILE* fajl = fopen(izlazni_fajl, "a"); fprintf(fajl, "--------------------------\n"); najboljiTimovi(fajl, rezultati, broj_rezultata, timovi, broj_timova); fclose(fajl); return 0; }