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