1 #include <iostream>
2 #include <fstream>
3 #include <vector>
4 #include <map>
5 #include <algorithm>
6
7 using namespace std;
8
9 void igazolt_igazolatlan(string hiany,int darab[])
10 {
11 darab[0]=0,darab[1]=0;
12 for(int i=0;i<hiany.size();i++)
13 {
14 if(hiany[i]=='X') darab[0]++;
15 if(hiany[i]=='I') darab[1]++;
16 }
17 }
18
19 void F1(vector<string> &h,map<string,int> &n_h)
20 {
21 ifstream fbe;
22 fbe.open("naplo.txt");
23 string sor, datum, nev;
24
25 while(getline(fbe,sor))
26 {
27 if(sor[0]=='#')
28 {
29 datum=sor+"@";
30 }
31 else
32 {
33 nev=sor.substr(0,sor.size()-8);
34 n_h[nev]=0;
35 sor=datum+sor;
36 h.push_back(sor);
37 }
38 }
39 fbe.close();
40 }
41
42 void F2(vector<string> h)
43 {
44 cout << "------------------- 2. feladat -------------------" << endl;
45 printf("A naplóban %d bejegyzés van.\n",h.size());
46 }
47
48 void F3(vector<string> h,map<string,int> &n_h)
49 {
50 cout << "------------------- 3. feladat -------------------" << endl;
51 int ok=0,nemok=0,kukac;
52 string nev;
53 int darab[2];
54 for(auto elem:h)
55 {
56 igazolt_igazolatlan(elem.substr(elem.size()-7,elem.size()),darab);
57 ok+=darab[0];
58 nemok+=darab[1];
59 kukac=elem.find('@')+1;
60 nev=elem.substr(kukac,elem.size()-(8+kukac));
61 n_h[nev]+=(darab[0]+darab[1]);
62
63 }
64 printf("Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.\n",ok,nemok);
65 }
66
67 string hetnapja(int honap,int nap)
68 {
69 string napnev[7]= {"vasarnap", "hetfo", "kedd", "szerda", "csutortok", "pentek", "szombat"};
70 int napszam[12]={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335};
71 int napsorszam=(napszam[honap-1]+nap)%7;
72 return napnev[napsorszam];
73 }
74
75 void F5()
76 {
77 cout << "------------------- 5. feladat -------------------" << endl;
78 int honap,nap;
79 cout << "A hónap sorszáma=";
80 cin >> honap;
81 cout << "A nap sorszáma=";
82 cin >> nap;
83 cout << "Azon a napon " << hetnapja(honap,nap) << " volt." << endl;
84
85 }
86
87 void F6(vector<string> h)
88 {
89 cout << "------------------- 6. feladat -------------------" << endl;
90 string napneve;
91 int ora, honap,nap;
92 cout << "A nap neve="; cin >> napneve;
93 cout << "Az óra sorszáma="; cin >> ora;
94 string hianyzasok;
95 int db=0;
96 for(auto elem:h)
97 {
98 honap=atoi(elem.substr(2,4).c_str());
99 nap=atoi(elem.substr(5,7).c_str());
100 if(hetnapja(honap,nap)==napneve)
101 {
102 hianyzasok=elem.substr(elem.size()-7,elem.size());
103 if(hianyzasok[ora-1]=='X'||hianyzasok[ora-1]=='I') db++;
104 }
105 }
106 printf("Ekkor összesen %d óra hiányzás történt.\n",db);
107 }
108
109 bool hasonlit(pair<string, int>& a,pair<string, int>& b)
110 {
111 return a.second > b.second; // csökkenő rendezés
112 }
113
114 void sorting(map<string, int> &n_h,vector<pair<string, int>> &t)
115 {
116 //vector<pair<string, int>> temp;
117 for (auto items:n_h)
118 {
119 t.push_back(items);
120 }
121 sort(t.begin(),t.end(),hasonlit);
122 }
123
124 void F7(map<string,int> n_h)
125 {
126 cout << "------------------- 7. feladat -------------------" << endl;
127 vector<pair<string, int>> temp;
128 sorting(n_h,temp);
129 int maxi=temp[0].second;
130 cout << "A legtöbbet hiányzó tanulók: " << temp[0].first << " ";
131 int i=1;
132 while(temp[i].second==maxi)
133 {
134 cout << temp[i].first << " ";
135 i++;
136 }
137 cout << endl;
138 }
139
140 int main()
141 {
142 setlocale(LC_ALL,"");
143
144 vector<string> hianyzasok;
145 map<string,int> nevszerinti_hianyzasok;
146 F1(hianyzasok,nevszerinti_hianyzasok);
147 F2(hianyzasok);
148 F3(hianyzasok,nevszerinti_hianyzasok);
149 F5();
150 F6(hianyzasok);
151 F7(nevszerinti_hianyzasok);
152 return 0;
153 }