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
./a.out 13.5 < timovi-stdout.txt
Primer ulazne datoteke timovi-stdinout.txt
:
6
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
Ispis programa na standardnom izlazu:
Unesite broj timova: 1. tim: 2. tim: 3. tim: 4. tim: 5. tim: 6. tim:
USA meksicka 7.50 6.50
SPANIJA kineska 9.10 8.60
NORVESKA italijanska 8.70 9.50
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}
1#include <stdio.h>
2#include <stdlib.h>
3
4#define MAX_DRZAVA 21
5#define MAX_VRSTA_HRANE 21
6
7#define MAX_SIZE 30
8
9typedef struct tim_st
10{
11 char drzava[MAX_DRZAVA];
12 char vrsta_hrane[MAX_VRSTA_HRANE];
13 double ocena_publike;
14 double ocena_zirija;
15} TIM;
16
17void ucitaj_timove(TIM *t, int *pn);
18void ispisi_izabrane(TIM *t, int n, double prag);
19double prosek_izabranih_timova(TIM *t, int n, double prag);
20int tim_je_prosao(double ocena_publike, double ocena_zirija, double prag);
21
22int main(int argc, char **argv)
23{
24 TIM timovi[MAX_SIZE];
25 int n;
26
27 if(argc != 2)
28 {
29 printf("Primer poziva: %s 13.5\n", argv[0]);
30 exit(EXIT_FAILURE);
31 }
32
33 ucitaj_timove(timovi, &n);
34 printf("\n\n");
35 double prag = atof(argv[1]);
36 ispisi_izabrane(timovi, n, prag);
37
38 printf("Prosecna ocena timova koji su prosli u sledeci krug takmicenja je: %.2f\n",
39 prosek_izabranih_timova(timovi, n, prag));
40
41 return EXIT_SUCCESS;
42}
43
44void ucitaj_timove(TIM *t, int *pn)
45{
46 do
47 {
48 printf("Unesite broj timova: ");
49 scanf("%d", pn);
50 } while (*pn <= 0 || *pn > MAX_SIZE);
51
52 int i;
53
54 for(i = 0;i < *pn;i++)
55 {
56 printf("%d. tim: ", i + 1);
57 scanf("%s %s %lf %lf",
58 t[i].drzava,
59 t[i].vrsta_hrane,
60 &t[i].ocena_publike,
61 &t[i].ocena_zirija);
62 }
63}
64
65void ispisi_izabrane(TIM *t, int n, double prag)
66{
67 int i;
68
69 for(i = 0;i < n;i++)
70 {
71 if(tim_je_prosao(t[i].ocena_publike, t[i].ocena_zirija, prag))
72 {
73 printf("%s %s %.2lf %.2lf\n",
74 t[i].drzava,
75 t[i].vrsta_hrane,
76 t[i].ocena_publike,
77 t[i].ocena_zirija);
78 }
79 }
80}
81
82double prosek_izabranih_timova(TIM *t, int n, double prag)
83{
84 int i, brojac = 0;
85 double suma = 0.0;
86
87 for(i = 0;i < n;i++)
88 {
89 if(tim_je_prosao(t[i].ocena_publike, t[i].ocena_zirija, prag))
90 {
91 suma += t[i].ocena_publike + t[i].ocena_zirija;
92 brojac++;
93 }
94 }
95
96 return suma / brojac;
97}
98
99int tim_je_prosao(double ocena_publike, double ocena_zirija, double prag)
100{
101 return ocena_publike + ocena_zirija >= prag;
102}