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 }