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  }