1 #include <conio.h>
2 #include <iostream>
3 #include <fstream>
4
5 using namespace std;
6
7 struct utas
8 {
9 int sorszam, ules, fel, le, fizet;
10 } utasok[500];
11
12 int e_szam; //eladott jegyek száma
13 int vonalhossz;
14 int ar_10;
15 int utvonal[201]; //0 és 200 km majd nem játszik
16
17 void kiir(int s)
18 {
19 cout << endl;
20 cout << s << ". feldat" << endl;
21 cout << "..............." << endl;
22 }
23
24 int kerekit(int ezt)
25 {
26 // 1,2,6,7 le 3,4,8,9 fel
27 int kerek;
28 int maradek=ezt%5;
29
30 if(maradek<3) kerek=ezt-maradek;
31 else kerek=ezt-maradek+5;
32
33 return kerek;
34 }
35
36 void F1()
37 {
38 int fizetendo; //beolvasáskor kiszámolhatjuk a fizetendõ díjat minden utasra
39 int megtett_ut;
40
41 ifstream be;
42 be.open("eladott.txt");
43
44 be >> e_szam;
45 be >> vonalhossz;
46 be >> ar_10;
47
48 cout << "Eladott jegyek száma: " << e_szam << endl;
49 cout << "Vonal hossza: " << vonalhossz << endl;
50 cout << "10 km ára: " << ar_10 << endl << endl;
51
52 for(int i=0;i<e_szam;i++)
53 {
54 utasok[i].sorszam=i+1;
55 be >> utasok[i].ules;
56 be >> utasok[i].fel;
57 be >> utasok[i].le;
58
59 megtett_ut=utasok[i].le-utasok[i].fel;
60 if(megtett_ut%10!=0) fizetendo=(megtett_ut/10+1)*ar_10;
61 else fizetendo=(megtett_ut/10)*ar_10;
62
63 utasok[i].fizet=kerekit(fizetendo);
64
65 //Adatok kiírása (nem kell), csak rossz szokás... .)
66 cout << utasok[i].sorszam << " ";
67 cout << utasok[i].ules << " ";
68 cout << utasok[i].fel << " ";
69 cout << utasok[i].le << " ";
70 cout << utasok[i].fizet << endl;
71 }
72 be.close();
73 }
74
75 void F2()
76 {
77 int i=e_szam-1;
78
79 cout << "Utolsó (" << utasok[i].sorszam << ".) utas adatai: " << endl;
80 cout << "Ülésszám: " << utasok[i].ules;
81 cout << " Beutazott távolság: " << utasok[i].le-utasok[i].fel << endl;
82 }
83
84 void F3()
85 {
86 for(int i=0;i<e_szam;i++)
87 {
88 if(utasok[i].fel==0&&utasok[i].le==vonalhossz)
89 {
90 cout << utasok[i].sorszam << " ";
91 }
92 }
93 cout << endl;
94 }
95
96 void F4()
97 {
98 //egyszerû összegzés a feladat
99
100 int bevetel=0;
101 for(int i=0;i<e_szam;i++)
102 {
103 bevetel=bevetel+utasok[i].fizet;
104 }
105 cout << "A társaság bevétele: " << bevetel << endl;
106 }
107
108 void F5()
109 {
110 //Több megoldás is lehetséges!!!
111
112 int max_fel=0;
113
114 //Második legnagyobb szám keresése felszálláskor
115 for(int i=1;i<e_szam;i++)
116 {
117 if(utasok[i].fel>max_fel&&utasok[i].fel!=vonalhossz) max_fel=utasok[i].fel;
118 }
119
120 cout << "Utolsó elõtti megálló felszállók esetén: " << max_fel << endl;
121
122 int max_le=0;
123
124 //Második legnagyobb szám keresése felszálláskor
125 for(int i=1;i<e_szam;i++)
126 {
127 if(utasok[i].le>max_le&&utasok[i].le!=vonalhossz) max_le=utasok[i].le;
128 }
129
130 cout << "Utolsó elõtti megálló leszállók esetén: " << max_le << endl;
131
132 //Végsõ maximum, azaz utolsó elõtti megálló
133 //Valószínû, hogy a max_fel és max_le azonos, de hát ki tudja?
134 int max;
135 if(max_fel>=max_le) max=max_fel; else max=max_le;
136
137 int fel_db=0, le_db=0;
138
139 for(int i=0;i<e_szam;i++)
140 {
141 if(utasok[i].fel==max) fel_db++;
142 if(utasok[i].le==max) le_db++;
143 }
144
145 cout << "Utolsó elõtti megállónál felszállók száma: " << fel_db << endl;
146 cout << "Utolsó elõtti megállónál leszállók száma : " << le_db << endl;
147 cout << endl;
148 cout << "Fel- és leszállók összesen: " << fel_db+le_db << endl;
149 }
150
151 void F6()
152 {
153 //Itt is több megoldás lehetséges!
154 for(int i=0;i<201;i++) utvonal[i]=0;
155 //Az utasok fel- és leszállása alapján növeljük az adott kilométernek megfelelõ tömbelemet,
156 //így jelezzük, hogy ott megálló volt
157 for(int i=0;i<e_szam;i++)
158 {
159 utvonal[utasok[i].fel]++;
160 utvonal[utasok[i].le]++;
161 }
162
163 int megallo_db=0;
164 //0 és 200 km most nem játszik
165 for(int i=1;i<200;i++)
166 {
167 if(utvonal[i]!=0) megallo_db++;
168 }
169 cout << "Az induló és a végállomás közötti megállók száma: " << megallo_db << endl;
170 }
171
172 void F7()
173 {
174 ofstream ki;
175 ki.open("kihol.txt");
176 int tav;
177 cout << "Távolság: ";
178 cin >> tav;
179
180 int ules[48];
181 //48 ülés van, kezdetben mind üres
182 for(int i=0;i<48;i++) ules[i]=0;
183
184 for(int i=0;i<e_szam;i++)
185 {
186 //ha tav=felszallasi hely, azt is kezeljuk
187 if(tav>=utasok[i].fel&&tav<utasok[i].le)
188 {
189 ules[utasok[i].ules-1]=utasok[i].sorszam;
190 }
191 }
192
193 for(int i=0;i<48;i++)
194 {
195 if(ules[i]==0)
196 {
197 ki << i+1 << ". ülés: üres" << endl;
198 cout << i+1 << ". ülés: üres" << endl;
199 }
200 else
201 {
202 ki << i+1 << ". ülés: " << ules[i] << ". utas" << endl;
203 cout << i+1 << ". ülés: " << ules[i] << ". utas" << endl;
204 }
205 }
206 ki.close();
207 }
208
209 int main()
210 {
211 setlocale(LC_ALL, "hun");
212 cout << "Helyjegy" << endl;
213 kiir(1);
214 F1();
215 kiir(2);
216 F2();
217 kiir(3);
218 F3();
219 kiir(4);
220 F4();
221 kiir(5);
222 F5();
223 kiir(6);
224 F6();
225 kiir(7);
226 F7();
227 return 0;
228 }