Cena parkinga po zonama¶
Autor zadatka: Olja Anđelovski <andjelovski.olja@uns.ac.rs>
Iz zadate ulazne datoteke učitati statički niz struktura, pri čemu se struktura parking
sastoji od sledećih polja:
naziv grada (jedna reč, do 30 karaktera)
naziv zone (jedna reč, do 6 karaktera)
registracija vozila (jedna reč, do 8 karaktera)
broj provedenih sati (pozitivan broj)
ZONA |
CENA PO SATU |
---|---|
crvena |
60 din |
žuta |
55 din |
zelena |
40 din |
plava |
0 din |
Napisati funkciju za računanje ukupne cene parkinga posebno za vozila koja se nalaze u crvenoj, zelenoj i žutoj zoni. Izračunate vrednosti ispisati na terminal. Kroz argumente komandne linije proslediti naziv ulazne datoteke.
Primer poziva:
./parking vozila.txt
sa zadatim ulazom u datoteci vozila.txt
:
Beograd zuta BG401-AA 1
Beograd zuta BG123-EC 2
Kragujevac crvena KG001-OP 3
Beograd zelena BG217-EE 4
Krusevac plava KS100-KV 10
Beograd plava BG666-VR 4
Beograd crvena BG711-QW 2
i očekivanim ispisom na terminal:
Ukupna cena parkinga za vozila u crvenoj zoni je 300 dinara.
Ukupna cena parkinga za vozila u zutoj zoni je 165 dinara.
Ukupna cena parkinga za vozila u zelenoj zoni je 160 dinara.
Primer rešenja¶
1#include <stdio.h>
2#include <string.h>
3#include <stdlib.h>
4
5#define MAX_GRAD 31
6#define MAX_ZONA 7
7#define MAX_REGISTRACIJA 9
8#define MAX_MESTA 20
9
10struct parking {
11 char grad[MAX_GRAD];
12 char zona[MAX_ZONA];
13 char registracijaVozila[MAX_REGISTRACIJA];
14 unsigned brojProvedenihSati;
15};
16
17FILE *safe_fopen(char filename[], char mode[], int error_code);
18void ucitavanjeVozila(FILE *in, struct parking p[], int *n);
19void cenePoZoni(struct parking c[], int n);
20
21int main(int arg_num, char **args){
22 if (arg_num != 2) {
23 printf("Program treba pozvati na sledeci nacin: "
24 "%s nazivUlazneDatoteke.txt\n", args[0]);
25 exit(1);
26 }
27
28 char *in_filename = args[1];
29 FILE *in = safe_fopen(in_filename, "r", 1);
30
31 struct parking p[MAX_MESTA];
32
33 int n;
34
35 ucitavanjeVozila(in, p, &n);
36 cenePoZoni(p, n);
37
38 fclose(in);
39 return 0;
40}
41
42FILE *safe_fopen(char filename[], char mode[], int error_code){
43 FILE *fp = fopen(filename, mode);
44
45 if(fp == NULL) {
46 printf("Nije moguce otvoriti datoteku '%s'!", filename);
47 exit(error_code);
48 }
49
50 return fp;
51}
52
53void ucitavanjeVozila(FILE *in, struct parking p[], int *n){
54 *n = 0;
55 while(fscanf(in, "%s %s %s %u",
56 p[*n].grad,
57 p[*n].zona,
58 p[*n].registracijaVozila,
59 &p[*n].brojProvedenihSati
60 )
61 != EOF) {
62 (*n)++;
63 }
64}
65
66void cenePoZoni(struct parking c[], int n){
67 unsigned crvena=0, zuta=0, zelena=0;
68 int i;
69
70 for(i=0; i<n; i++) {
71 if (strcmp(c[i].zona,"crvena")==0) {
72 crvena+=c[i].brojProvedenihSati*60;
73 } else if (strcmp(c[i].zona,"zuta")==0) {
74 zuta+=c[i].brojProvedenihSati*55;
75 } else if (strcmp(c[i].zona,"zelena")==0) {
76 zelena+=c[i].brojProvedenihSati*40;
77 }
78 }
79
80 printf("\nUkupna cena parkinga za vozila u crvenoj zoni je %u dinara.",
81 crvena);
82 printf("\nUkupna cena parkinga za vozila u zutoj zoni je %u dinara.",
83 zuta);
84 printf("\nUkupna cena parkinga za vozila u zelenoj zoni je %u dinara.\n",
85 zelena);
86
87}
88
89