1  #include <iostream>
  2  #include <fstream>
  3  #include <iomanip>
  4  
  5  using namespace std;
  6  
  7  struct adat
  8  {
  9      string kod;
 10      string valasz;
 11      int pontszam;       //A 6.feladatnál kap értéket, 7-ben rendezzük majd!
 12  }teszt[500];
 13  
 14  string megoldas;    //A forrásfájl elso sora
 15  int N;              //A fájlban lévo adatok száma
 16  
 17  void kiir(string sz)
 18  {
 19      cout << "-----------------------------------------------" << endl;
 20      cout << sz << endl;
 21      cout << "-----------------------------------------------" << endl;
 22  }
 23  
 24  void F1_F2()
 25  {
 26      kiir("1. feladat");
 27      cout << "Fájl beolvasása..." << endl;
 28      ifstream fbe;
 29      fbe.open("valaszok.txt");
 30      fbe >> megoldas;
 31      int i=0;
 32      while(!fbe.eof())
 33      {
 34          fbe >> teszt[i].kod;
 35          fbe >> teszt[i].valasz;
 36          i++;
 37      }
 38      kiir("2. feladat");
 39      N=i-1;  //-1 a fájl utolsó üres sora miatt!!
 40      cout << "A vetélkedon " << N << " versenyzo indult." << endl;
 41      fbe.close();
 42  }
 43  
 44  void F4(string s);
 45  
 46  void F3()
 47  {
 48      //KIVÁLASZTÁS
 49      kiir("3. feladat");
 50      string v_kod;
 51      cout << "A versenyzo azonosítója = ";
 52      cin >> v_kod;
 53      int i=0;
 54      while(teszt[i].kod!=v_kod)  //Kiválasztás, mert biztosan megvan ez a kód
 55      {
 56          i++;
 57      }
 58      cout << teszt[i].valasz << " (a versenyzo válasza)" << endl;
 59      F4(teszt[i].valasz);
 60  }
 61  
 62  void F4(string s)
 63  {
 64      //A 3. feladatból, F3()-ból indítjuk, ezért definiáltam F3() elott
 65      //Csak, hogy ilyent is lássunk :)
 66      kiir("4. feladat");
 67      cout << megoldas << endl;
 68      for(int i=0;i<s.length();i++)
 69      {
 70          if(s[i]==megoldas[i])
 71          {
 72              cout << '+';
 73          }
 74          else
 75          {
 76              cout << " ";
 77          }
 78      }
 79      cout << endl;
 80  }
 81  
 82  void F5()
 83  {
 84      kiir("5. feladat");
 85      //MEGSZÁMLÁLÁS
 86      int fszama;
 87      cout << "A feladat sorszáma = ";
 88      cin >> fszama;
 89      char jo=megoldas[fszama-1];     //A megadott feladatsorszámnak megfelelo betu
 90      int jo_megoldas=0;
 91      for(int i=0;i<N;i++)
 92      {
 93          if(teszt[i].valasz[fszama-1]==jo) jo_megoldas++;
 94      }
 95      float szazalek=(float)jo_megoldas/(float)N*100; //"instant" konvertálás floattá! :)
 96      //Szerkesztési okokból lesz két soros a kiírás
 97      cout << "A feladatra " << jo_megoldas << " fo, a versenyzok ";
 98      cout  << setprecision(4) << szazalek << "%-a adott helyes választ." << endl;
 99  }
100  
101  void F6()
102  {
103      //ÖSSZEGZÉS
104      kiir("6. feladat");
105      //Elokészítjük a 7. feladatot is!
106      cout << "A versenyzok pontszámának meghatározása..." << endl;
107      int pontok[14]={3,3,3,3,3,4,4,4,4,4,5,5,5,6};
108      for(int i=0;i<N;i++) teszt[i].pontszam=0;
109      ofstream fki;
110      fki.open("pontok.txt");
111  
112      for(int i=0;i<N;i++)    //Versenyzonként
113      {
114          for(int j=0;j<14;j++)   //A versenyzo 14 karakteres megoldásának vizsgálata
115          {
116              if(teszt[i].valasz[j]==megoldas[j])
117              {
118                  teszt[i].pontszam+=pontok[j];
119              }
120          }
121          fki << teszt[i].kod << " " << teszt[i].pontszam << endl;
122      }
123      fki.close();
124  }
125  
126  void F7()
127  {
128      kiir("7. feladat");
129      int helyezes=1;     //1 elso díjas biztosan lesz
130      //RENDEZÉS
131      for(int i=0;i<N-1;i++)
132          for(int j=i+1;j<N;j++)
133              if(teszt[i].pontszam<teszt[j].pontszam) swap(teszt[i],teszt[j]);
134  
135      cout << helyezes << ". díj (" << teszt[0].pontszam << " pont) :" << teszt[0].kod << endl;
136      int i=1;
137      //KIVÁLOGATÁS(?)
138      while(helyezes<3)   //Maximum 3. helyezésig megyünk
139      {
140          if(teszt[i].pontszam<teszt[i-1].pontszam)
141          {
142              helyezes++;     //Csak akkor ugorjon a helyezés, ha eltéro pontszám jön
143          }
144          cout << helyezes << ". díj (" << teszt[i].pontszam << " pont) :" << teszt[i].kod << endl;
145          i++;
146      }
147  }
148  
149  int main()
150  {
151      setlocale(LC_ALL, "hun");
152      F1_F2();
153      F3();
154      F5();
155      F6();
156      F7();
157      return 0;
158  }