|
eutazas201910C++.cpp
|
|
1 #include <iostream> // cin és cout parancsok
2 #include <fstream> // fájlkezelés
3 #include <vector> // vector adattípushoz
4
5 using namespace std;
6
7 struct adat
8 {
9 string allomas; // megálló sorszáma
10 string fido; // felszállás ideje (ééééhhnn-óópp)
11 string id; // kártya azonosító
12 string berlet; // bérlet típusa vagy JGY (jeggyel utazó)
13 string lejar; // dátum vagy 0-10 közötti érték
14 };
15
16 void F1(vector<adat> &a)
17 {
18 ifstream fbe;
19 fbe.open("utasadat.txt");
20 adat temp;
21 while(fbe>>temp.allomas&&fbe>>temp.fido&&fbe>>temp.id&&fbe>>temp.berlet&&fbe>>temp.lejar)
22 {
23 a.push_back(temp);
24 }
25 fbe.close();
26 }
27
28 void F2(vector<adat> a)
29 {
30 cout << "2. feladat" << endl;
31 printf("A buszra %d utas akart felszállni.\n",a.size());
32 }
33
34 void F3(vector<adat> a)
35 {
36 cout << "3. feladat" << endl;
37 // nem szállhat fel valaki, ha lejárt a bérlete vagy nincs már jegye
38 int nem=0;
39 bool ervenytelen;
40 for(auto elem:a)
41 {
42 ervenytelen=(elem.berlet!="JGY"&&elem.lejar<elem.fido.substr(0,8))||(elem.berlet=="JGY"&&elem.lejar=="0");
43 if(ervenytelen)
44 {
45 nem++;
46 }
47 }
48 printf("A buszra %d utas nem szállhatott fel.\n",nem);
49 }
50
51 void F4(vector<adat> a)
52 {
53 cout << "4. feladat" << endl;
54 vector<int> megallo;
55 megallo.reserve(30);
56 for(int i=0;i<30;i++) megallo[i]=0;
57 for(auto elem:a)
58 {
59 megallo[atoi(elem.allomas.c_str())]++; // atoi: standard c stringet (c_str()) alakít integerré
60 }
61 int max_felszallo=0, allomas;
62 for(int i=0;i<30;i++)
63 {
64 if(megallo[i]>max_felszallo)
65 {
66 max_felszallo=megallo[i];
67 allomas=i;
68 }
69 }
70 printf("A legtöbb utas (%d fõ) a %d. megállóban próbált felszállni.\n",max_felszallo,allomas);
71 }
72
73 void F5(vector<adat> a)
74 {
75 cout << "5. feladat" << endl;
76 // FEB Felnõtt bérlet
77 // TAB Tanulóbérlet (kedvezményes)
78 // NYB Nyugdíjas bérlet (kedvezményes)
79 // NYP 65 év feletti bérlet (ingyenes)
80 // RVS Rokkant, vak, siket vagy kísérõ bérlet (ingyenes)
81 // GYK Iskolakezdés elõtti gyerekbérlet (ingyenes)
82 // JGY Jegy
83 int ingyen=0, kedvezmeny=0;
84 bool ingyenes, kedvezmenyes,ervenyes;
85 for(auto elem:a)
86 {
87 ervenyes=(elem.berlet!="JGY"&&elem.lejar>=elem.fido.substr(0,8));
88 if(ervenyes)
89 {
90 ingyenes=(elem.berlet=="NYP"||elem.berlet=="RVS"||elem.berlet=="GYK");
91 kedvezmenyes=(elem.berlet=="TAB"||elem.berlet=="NYB");
92 if(ingyenes) ingyen++;
93 if(kedvezmenyes) kedvezmeny++;
94 }
95 }
96 printf("Ingyenesen utazók száma: %d fõ\n",ingyen);
97 printf("A kedvezményesen utazók száma: %d fõ\n",kedvezmeny);
98 }
99 int napokszama(int e1, int h1, int n1, int e2, int h2, int n2)
100 {
101 h1 = (h1 + 9) % 12;
102 e1 = e1 - h1 / 10;
103 int d1 = 365*e1 + e1 / 4 - e1 / 100 + e1 / 400 + (h1*306 + 5) / 10 + n1 - 1;
104 h2 = (h2 + 9) % 12;
105 e2 = e2 - h2 / 10;
106 int d2 = 365*e2 + e2 / 4 - e2 / 100 + e2 / 400 + (h2*306 + 5) / 10 + n2 - 1;
107 return d2-d1;
108 }
109
110 void F7(vector<adat> a)
111 {
112 ofstream fki;
113 fki.open("figyelmeztetes.txt");
114 int e1,h1,n1,e2,h2,n2;
115 int nap;
116 for(auto elem:a)
117 {
118 if(elem.berlet!="JGY")
119 {
120 e1=atoi(elem.fido.substr(0,4).c_str());
121 h1=atoi(elem.fido.substr(4,2).c_str());
122 n1=atoi(elem.fido.substr(6,2).c_str());
123 e2=atoi(elem.lejar.substr(0,4).c_str());
124 h2=atoi(elem.lejar.substr(4,2).c_str());
125 n2=atoi(elem.lejar.substr(6,2).c_str());
126 nap=napokszama(e1,h1,n1,e2,h2,n2);
127 if(nap>=0&&nap<=3)
128 {
129 fki << elem.id << " " << elem.lejar.substr(0,4) << "-" << elem.lejar.substr(4,2) << "-" << elem.lejar.substr(6,2) << endl;
130 }
131 }
132 }
133 fki.close();
134 }
135
136 int main()
137 {
138 setlocale(LC_ALL,"");
139 vector<adat> adatok;
140 F1(adatok);
141 F2(adatok);
142 F3(adatok);
143 F4(adatok);
144 F5(adatok);
145 F7(adatok);
146 return 0;
147 }