Kulinarsko takmičenje

Autor zadatka: Milena Počuča <milenapocuca@uns.ac.rs>

Iz zadate ulazne datoteke timovi.txt učitati statički niz struktura, pri čemu se struktura tim_st sastoji od sledećih polja:

  • država tima (jedna reč, do 20 karaktera)

  • vrsta spremane hrane (jedna reč, do 20 karaktera)

  • ocena od publike (realan broj)

  • ocena od žirija (realan broj)

Pronaći sve timove koji su prošli u sledeći krug i ispisati ih na terminal. Tim prolazi u sledeći krug takmičenja ukoliko je ukupna ocena (od publike i žirija) veća od granice potrebne za prolazak. Granica potrebna za prolazak u sledeći krug takmičenja se prosleđuje kao poslednji argument komandne linije. Pronaći prosečnu ocenu timova koji su prosli u sledeći krug.

Na standardni izlaz (terminal) ispisati i prosečnu ocenu timova koji su prošli u sledeći krug.

Primer poziva:

./program timovi.txt 13.5

sa zadatim ulazom u datoteci timovi.txt:

USA meksicka 7.5 6.5
CANADA tajlandska 6.2 4.3
SPANIJA kineska 9.1 8.6
SLOVENIJA indijska 5.3 6.8
NORVESKA italijanska 8.7 9.5
CESKA libanska 4.7 3.9

i očekivanim izlazom na terminalu:

USA meksicka 7.5 6.5
SPANIJA kineska 9.1 8.6
NORVESKA italijanska 8.7 9.5
Prosecna ocena timova koji su prosli u sledeci krug takmicenja je: 16.63

Primer rešenja

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include<string.h>
 4
 5typedef struct tim_st {
 6  char drzava[21];
 7  char vrsta[21];
 8  float publika;
 9  float ziri;
10}TIM;
11
12FILE* otvori(char *ime, char *mode){
13  FILE* fp = fopen(ime, mode);
14  
15  if(fp==NULL) {
16    printf("Doslo je do greske prilikom otvaranja datoteke %s",
17    ime);
18    exit(EXIT_FAILURE);
19  }
20  return fp;
21
22}
23
24int ucitaj(FILE* in, TIM* timovi) {
25  int i = 0;
26  
27  while(fscanf(in, "%s %s %f %f", timovi[i].drzava, 
28          timovi[i].vrsta, 
29          &timovi[i].publika, 
30          &timovi[i].ziri)!=EOF) {
31    i++;
32  }
33  
34  return i;
35
36}
37
38void ispisi(TIM* timovi, int n, float granica) {
39  int i, brojac = 0;
40  float suma = 0;
41  for(i=0;i<n;i++) {
42    if(timovi[i].publika + timovi[i].ziri > granica) {
43     printf("%s %s %.1f %.1f\n", timovi[i].drzava, 
44               timovi[i].vrsta, 
45               timovi[i].publika, 
46               timovi[i].ziri);
47     suma += timovi[i].publika + timovi[i].ziri;
48     brojac++;
49    } 
50  }
51  printf("Prosecna ocena timova koji su prosli u sledeci " 
52      "krug takmicenja je: %.2f\n", suma/brojac);
53}
54
55int main(int brArg, char* args[]) {
56
57  if(brArg!=3) {
58    printf("Program nije dobro pozvan");
59    exit(EXIT_FAILURE);
60  }
61  
62  FILE *in = otvori(args[1], "r");
63  TIM timovi[20];
64  int n = ucitaj(in, timovi);
65  ispisi(timovi, n, atof(args[2]));
66  
67  fclose(in);
68  return 0;
69}