///////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
// https://www.its.edu.rs/
// Predmet: Osnove Programiranja – Programski jezik C
// Program na koji iz datoteke igraci.txt čita podatke o igračima
// na svetskom prvenstvu u fudbalu, pronalazi igrača sa najvećim brojem
// ostvarenih poena, na standardnom izlazu ispisuje ime tog igrača
// i broj ostvarenih poena.
// Smatra se da datoteka igraci.txt postoji.
////////////////////////////////////////////////////////////////////
#include <stdio.h>
//Definisanje simbolickih konstanti
#define MAX_IME 50
#define MAX_IGRACA 1000
//Definisanje strukture koja sadrzi podatke o igracu
typedef struct igrac{
char imePrezime[MAX_IME];
float visina;
float tezina;
int minuta;
int golova;
int asistencija;
int autogolova;
int zutih;
int crvenih;
}Igrac;
//Deklarisanje globalnih promenljivih
Igrac najboljiIgrac;
int maxBodova;
//Prototipovi funkcija
int ucitajIgrace(FILE *f, Igrac *x);
int brojBodova(Igrac x);
main()
{
//Definisanje promenljivih
// fajl
FILE *f;
// niz igraca
Igrac nizIgraca[MAX_IGRACA];
int i, brojIgraca=0;
//Otvaranje fajla za citanje, sa proverom postojanja
if((f=fopen("igraci.txt", "r"))==NULL)
{
printf(" *** Greska prilikom otvaranja fajla <igraci.txt>!
");
return;
}
// Petlja koja ucitava podatke iz fajla i broji njihov ukupan broj
while (ucitajIgrace(f, &nizIgraca[brojIgraca]))
brojIgraca++;
//Ispis zaglavlja
printf("
+———————+——-+——-+—–+—-+—-+—-+—-+—-+—-+");
printf("
| Ime i prezime| V | T | M | G | AS | AG | Z | C | UB |");
printf("
+———————+——-+——-+—–+—-+—-+—-+—-+—-+—-+");
//Petlja koja tabelarno ispisuje podatke o igracu
for(i=0; i<brojIgraca; i++)
{
printf("
|%20s | %5.1f | %5.1f | %3d |%3d |%3d |%3d |%3d |%3d |%3d |", nizIgraca[i].imePrezime, nizIgraca[i].visina, nizIgraca[i].tezina, nizIgraca[i].minuta, nizIgraca[i].golova, nizIgraca[i].asistencija, nizIgraca[i].autogolova, nizIgraca[i].zutih, nizIgraca[i].crvenih, brojBodova(nizIgraca[i]));
}
//Ispis najboljeg igraca turnira
printf("
+———————+——-+——-+—–+—-+—-+—-+—-+—-+—-+");
printf("
| Najbolji igrac turnira je: |");
printf("
| %20s, sa osvojenih %3d bodova |",najboljiIgrac.imePrezime, brojBodova(najboljiIgrac));
printf("
+————————————————————————-+");
printf("
| Legenda: |");
printf("
| |");
printf("
| V – visina igraca T – tezina igraca M – odigranih minuta |");
printf("
| G – broj datih golova AS – broj asistencija AG – broj autogolova |");
printf("
| Z – zutih kartona C – crvenih kartona UB – ukupno bodova |");
printf("
+————————————————————————-+");
printf("
");
}
// Funkcija koja ucitava podatke o jednom igracu iz date datoteke. Vraca da li su podaci uspesno procitani
int ucitajIgrace(FILE *f, Igrac *x)
{
//Ucitavanje podataka za igraca iz fajla
fscanf(f, "%s%f%f%d%d%d%d%d%d", x->imePrezime, &(x->visina), &(x->tezina), &(x->minuta), &(x->golova), &(x->asistencija), &(x->autogolova), &(x->zutih), &(x->crvenih));
//Funkcija vraca <false> kada stigne do kraj fajla
if(feof(f))
return 0;
return 1;
}
//funkcija za izracunavanje broja bodova
int brojBodova(Igrac x)
{
//Izracunavanje bodova na osnovu odigrane minutaze
// igrac svakako dobije bod
int bodovi=1;
if(x.minuta>200)
{
// igrac dobija dodatni bod ako je igrao preko 200 min
bodovi++;
if(x.minuta>400)
{
// igrac dobija drugi dodatni bod ako je igrao preko 400 min
bodovi++;
}
}
//Izracunavanje bodova na osnovu ostalih podataka
bodovi+=(x.golova*5);
bodovi+=(x.asistencija*3);
bodovi-=(x.autogolova*2);
bodovi-=(x.zutih);
bodovi-=(x.crvenih*3);
//Provera da li je trenutni igrac najbolji da sada
if(maxBodova<bodovi)
{
// Najbolji igrac je trenutni
najboljiIgrac=x;
// azuriranje maksimalnog broja bodova
maxBodova=bodovi;
}
//Funkcija vraca izracunati broj bodova
return bodovi;
}