Autoservis

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

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

  • model (jedna reč, do 20 karaktera)

  • vrsta servisa (jedna reč, do 20 karaktera)

  • kubikaža (prirodan broj)

  • budžet vlasnika (prirodan broj)

Vrsta servisa koji je potreban za automobil može biti MALI ili VELIKI. Budžet vlasnika predstavlja količinu novca koju je je vlasnik automobila spreman da izdvoji za željeni servis.

Stvarna cena servisiranja automobila zavisi od vrste servisa i od kubikaže automobila. Cena servisiranja data je u tabeli ispod:

Kubikaža

Cena malog servisa

Cena velikog servisa

kubikaza<1300

5 000

10 000

1300<=kubikaza<1800

8 000

15 000

kubikaza>=1800

12 000

25 000

Na standardni izlaz (terminal) ispisati sve automobile za koje se cena servisiranja uklapa u budžet vlasnika.

Primer poziva:

./program automobili.txt

sa zadatim ulazom u datoteci automobili.txt:

CLS-320 MALI 3000 20000
Compass VELIKI 1400 20000
A3 MALI 1200 4000
Panamera MALI 2500 40000
CLA-200 VELIKI 1750 13000
MiTo VELIKI 1250 12000

i očekivanim izlazom na terminalu:

CLS-320 MALI 3000 20000
Compass VELIKI 1400 20000
Panamera MALI 2500 40000
MiTo VELIKI 1250 12000

Primer rešenja

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include<string.h>
 4
 5typedef struct auto_st {
 6  char model[21];
 7  char servis[21];
 8  unsigned budzet;
 9  unsigned kubikaza;
10}AUTO;
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, AUTO* auti) {
25  int i = 0;
26  
27  while(fscanf(in, "%s %s %u %u", auti[i].model, 
28          auti[i].servis, 
29          &auti[i].kubikaza, 
30          &auti[i].budzet)!=EOF) {
31    i++;
32  }
33  
34  return i;
35
36}
37void ispisi_auto(AUTO automobil) {
38  printf("%s %s %u %u\n", automobil.model, 
39        automobil.servis, 
40        automobil.kubikaza,
41        automobil.budzet);
42}
43
44void ispisi(AUTO* auti, int n) {
45  int i;
46  for(i=0;i<n;i++) {
47    if(auti[i].kubikaza < 1300 && 
48      strcmp(auti[i].servis, "MALI")== 0 && 
49      auti[i].budzet >= 5000) {
50        ispisi_auto(auti[i]);
51    } else if(auti[i].kubikaza < 1300 && 
52      strcmp(auti[i].servis, "VELIKI")== 0 && 
53      auti[i].budzet >= 10000) {
54        ispisi_auto(auti[i]);
55    }
56     else if(auti[i].kubikaza >= 1300 && 
57      auti[i].kubikaza < 1800 && 
58      strcmp(auti[i].servis, "MALI")== 0 && 
59      auti[i].budzet >= 8000) {
60        ispisi_auto(auti[i]);
61
62    } else if(auti[i].kubikaza >= 1300 && 
63      auti[i].kubikaza < 1800 && 
64      strcmp(auti[i].servis, "VELIKI")== 0 && 
65      auti[i].budzet >= 15000) {
66        ispisi_auto(auti[i]);
67    }
68     else if (auti[i].kubikaza >= 1800 && 
69      strcmp(auti[i].servis, "MALI")== 0 && 
70      auti[i].budzet >= 12000) {
71        ispisi_auto(auti[i]);
72     } else if (auti[i].kubikaza >= 1800 && 
73      strcmp(auti[i].servis, "VELIKI")== 0 && 
74      auti[i].budzet >= 25000) {
75        ispisi_auto(auti[i]);
76     }
77  }
78}
79
80int main(int brArg, char* args[]) {
81
82  if(brArg!=2) {
83    printf("Program nije dobro pozvan");
84    exit(EXIT_FAILURE);
85  }
86  
87  FILE *in = otvori(args[1], "r");
88  AUTO auti[20];
89  int n = ucitaj(in, auti);
90  ispisi(auti, n);
91  
92  fclose(in);
93  return 0;
94}
95