1 #include <iostream>
2 #include <fstream>
3 #include <windows.h>
4
5 using namespace std;
6
7 struct futar{
8 int km;
9 int ft;
10 } adatok[7][40];
11
12 int elso_nap=7+1, utolso_nap=0, napi_km[7];
13
14 void kiir(int szam)
15 {
16 cout << endl;
17 cout << szam << ". FELADAT" << endl;
18 cout << "................" << endl;
19 }
20
21 void F1()
22 {
23 /*mátrix nullázása, hogy ha egy nap nem volt fuvar, vagy nem volt 40 fuvar,
24 csak kevesebb, akkor ott nulla legyen. Ezt később ki tudjuk használni.*/
25 for(int i=0;i<7;i++)
26 {
27 for(int j=0;j<40;j++)
28 {
29 adatok[i][j].km=0;
30 }
31 }
32 ifstream be;
33 be.open("tavok.txt");
34 int nap, fuvar;
35 int i=0;
36 while(!be.eof())
37 {
38 be >> nap;
39
40 if(nap<elso_nap) elso_nap=nap; //minimumkeresés
41 if(nap>utolso_nap) utolso_nap=nap; //maximumkeresés
42 be >> fuvar;
43 be >> adatok[nap-1][fuvar-1].km; //Ez itt a lényeg, azINDEXELÉS!!!!!
44 cout << nap << " " << fuvar << " " << adatok[nap-1][fuvar-1].km << endl;
45 i++;
46 }
47 cout << "Első nap: " << elso_nap << " utolsó nap: " << utolso_nap << endl;
48 be.close();
49 }
50
51 void F2()
52 {
53 cout << elso_nap << ".nap első fuvar: " << adatok[elso_nap-1][0].km << " km volt" << endl;
54 }
55
56 void F3()
57 {
58 //lineáris keresés a végétől az eleje felé
59 int j=39;
60 while(j>-1&&adatok[utolso_nap-1][j].km==0)
61 {
62 j--;
63 }
64
65 if(j>-1)
66 {
67 cout << "A(z) " << utolso_nap << ". nap (utolsó nap) utolsó fuvar: " << adatok[utolso_nap-1][j].km << " km" << endl;
68 }
69 }
70
71 void F4()
72 {
73 int i=0; int db=0;
74 for(int i=0;i<7;i++)
75 {
76 if(adatok[i][0].km==0)
77 {
78 cout << i+1 << ". napon nem dolgozott" << endl;
79 db++;
80 }
81 }
82 if(db==0) cout << "Minden nap dolgozott!" << endl;
83 }
84
85 void F5()
86 {
87 int max_fuvar=0, mikor;
88 for(int i=0;i<7;i++)
89 {
90 int j=0;
91 while(j<40&&adatok[i][j].km!=0)
92 {
93 j++;
94 }
95 if(j<40)
96 {
97 if(j>max_fuvar)
98 {
99 max_fuvar=j;
100 mikor=i+1;
101 }
102 }
103 }
104 cout << "A(z) " << mikor << ". napon ment a legtöbbet!" << endl;
105 }
106
107 void F6_seged() //napi összegzés
108 {
109 //ha kevés elem van, így is adhatunk nekik kezdőértéket
110 napi_km[7]=(0,0,0,0,0,0,0);
111
112 for(int i=0;i<7;i++)
113 {
114 for(int j=0;j<40;j++)
115 {
116 napi_km[i]=napi_km[i]+adatok[i][j].km;
117 }
118 }
119 }
120
121 void F6()
122 {
123 F6_seged(); //napi összegzés
124 //F6_seged alapjan itt már csak ki kell írni az adatokat!
125 for(int i=0;i<7;i++)
126 {
127 cout << i+1 << ". nap: " << napi_km[i] << " km" << endl;
128 }
129 }
130
131 int F7_kalkulator(int tav)
132 {
133 // 1 - 2 km 500 Ft
134 // 3 - 5 km 700 Ft
135 // 6 - 10 km 900 Ft
136 // 11 - 20 km 1400 Ft
137 // 21 - 30 km 2000 Ft
138
139 int fizet=0;
140 if(tav<3) fizet=500;
141 else if(tav<6) fizet=700;
142 else if(tav<11) fizet=900;
143 else if(tav<21) fizet=1400;
144 else if(tav<31) fizet=2000;
145 else fizet=0; // :) Ez a feladatból következik, nem... :)
146
147 return fizet;
148 }
149
150 void F7()
151 {
152 int tavolsag;
153
154 cout << "Adjon meg egy távolságot: ";
155 cin >> tavolsag;
156 cout << "Erre jár " << F7_kalkulator(tavolsag) << " Ft." << endl;
157 }
158
159 void F8()
160 {
161 ofstream ki;
162 ki.open("dijazas.txt");
163 //Itt is nagyon jól kihasználhatjuk a mátrixunk előnyeit,
164 //mely mátrix - ugye - napok és utak szerint indexelt!!
165 for(int i=0;i<7;i++) //napok szerint megy a ciklus
166 {
167 for(int j=0;j<40;j++) //azon belül pedig utanként
168 {
169 if(adatok[i][j].km!=0) //csak akkor írjuk ki a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
170 {
171 //csak egyszerűen a kalkulátorra bízzuk a számolást és rögtön kiírjuk az eredményt!
172 //képernyőre...
173
174 //a 9. feladathoz kell, hogy ez a ft mező is feltöltésre kerüljön.
175 //akár itt is összegezhetnénk a keresetet, de meghagyjuk a 9. pontnak!
176 adatok[i][j].ft=F7_kalkulator(adatok[i][j].km);
177 cout << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
178 //...és fájlba
179 ki << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
180 }
181 }
182 }
183 ki.close();
184 }
185
186 void F9()
187 {
188 int kereset=0;
189 //Egyszerű összegzés mátrix elemekre
190 for(int i=0;i<7;i++) //napok szerint megy a ciklus
191 {
192 for(int j=0;j<40;j++) //azon belül pedig utanként
193 {
194 if(adatok[i][j].km!=0) //csak akkor számolunk a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
195 {
196 kereset=kereset+adatok[i][j].ft;
197 }
198 }
199 }
200 cout << "Heti munka díjazása: " << kereset << " Ft" << endl;
201 }
202
203 int main()
204 {
205 setlocale(LC_ALL, "hun");
206 kiir(1);
207 F1();
208 kiir(2);
209 F2();
210 kiir(3);
211 F3();
212 kiir(4);
213 F4();
214 kiir(5);
215 F5();
216 kiir(6);
217 F6();
218 kiir(7);
219 F7();
220 kiir(8);
221 F8();
222 kiir(9);
223 F9();
224 return 0;
225 }