1 #include <iostream>
2 #include <fstream>
3
4 using namespace std;
5
6 struct adatok
7 {
8 string aru[20]; //maximum 20 áru lehet egy vevőnél
9 int ar[20]; //Érdemes az áruk árát is rögtön rögzíteni;
10 int db; //ennyi áru van a vevőnél
11 };
12
13 adatok vevo[1000]; //Kevesebb is elég lenne: mondjuk 500 :)
14
15 //Az egyszerűség kedvéért globálisak!!
16 int f_db; //FIZETÉSEK száma
17 int x_ssz, x_db; //4. feladathoz és az utána jövő feladatokhoz
18 string x_aru; //4. feladathoz és az utána jövő feladatokhoz
19
20 void kiir(string sz)
21 {
22 cout << sz << endl;
23 }
24
25 void rendez(int v, int a)
26 {
27 if(a>0)
28 {
29 //RENDEZZÜNK
30 for(int i=0;i<a-1;i++)
31 {
32 for(int j=i+1;j<a;j++)
33 {
34 if(vevo[v].aru[i]>vevo[v].aru[j])
35 {
36 swap(vevo[v].aru[i],vevo[v].aru[j]);
37 swap(vevo[v].ar[i],vevo[v].ar[j]);
38 }
39 }
40 }
41 //Beárazás
42 int azonos_db=0;
43 vevo[v].ar[0]=500;
44 for(int i=1;i<a;i++)
45 {
46 if(vevo[v].aru[i]==vevo[v].aru[i-1])
47 {
48 azonos_db++;
49 if(azonos_db>1) vevo[v].ar[i]=400;
50 else vevo[v].ar[i]=450;
51 }
52 else
53 {
54 azonos_db=0;
55 vevo[v].ar[i]=500;
56 }
57 }
58 }
59 else
60 {
61 vevo[v].ar[a]=500;
62 }
63
64 }
65
66 void F1()
67 {
68 //EBBEN LESZ: Megszámlálás és Rendezés
69 ifstream fbe;
70 fbe.open("penztar.txt");
71
72 string sor;
73 f_db=0;
74 int i=0; //Vevő indexeléséhez
75 int j=0; //Egy vevő áruinak indexeléséhez
76
77 while(!fbe.eof())
78 {
79 getline(fbe,sor);
80 if(sor=="F")
81 {
82 rendez(i,j); //Muszáj rendezni az adott vevő áruit, mert összevissza lehetnek az árunevek,
83 //rendezve viszont meg tudjuk állapítani az azonos áruneveket és így az áraikat is!
84 vevo[i].db=j; //Mennyi áru van az adott vevőnél
85 f_db++; //FIZETÉSEK számlálása
86 i++; //Következő vevő indexe
87 j=0; //Új vevő jön, így az árukat is újra indexeljük
88 }
89 else
90 {
91 //Vásárolt áruk feldolgozása (max 20)
92 vevo[i].aru[j]=sor;
93 j++; //áru index léptetése, ezért majd a vevo[i].db jó lesz (a ++ miatt)!
94 }
95
96 }
97 //BEOLVASOTT ADATOK KÉPERNYŐRE ÍRÁSA
98 //CSAK AZ ÖNKONTROLL KEVÉÉRT! :)
99 for(int i=0;i<f_db;i++) //VEVŐK
100 {
101 cout << i+1 << ". vevő:" << endl;
102 for(int j=0;j<vevo[i].db;j++) //ÉS ÁRUIK
103 {
104
105 cout << vevo[i].aru[j] << ", ";
106 cout << vevo[i].ar[j] << endl;
107
108 }
109 }
110 }
111
112 void F2()
113 {
114 cout << "A fizetések száma: " << f_db << endl;
115 }
116
117 void F3()
118 {
119 cout << "Az első vásárló " << vevo[0].db << " db árucikket vásárolt." << endl;
120 }
121
122 void F4()
123 {
124 cout << "Adja meg egy vásárlás sorszámát! ";
125 cin >> x_ssz;
126 cout << "Adja meg egy árucikk nevét! ";
127 cin >> x_aru;
128 cout << "Adja meg a vásárolt darabszámot! ";
129 cin >> x_db;
130 }
131
132 void F5()
133 {
134 //EBBEN LESZ: Lineáris keresés és lesz Megszámlálás
135 int elso, utolso, alkalom=0, db=0;
136 //Kérdés: készítsünk klasszikus keresést, vagy FOR ciklussal rohanjunk végig az adatokon? Hm?
137 //Az általunk kitalált adatszerkezet miatt egyszerűbb a FOR ciklusos keresés
138 elso=0;
139 for(int i=0;i<f_db;i++) //VEVŐK
140 {
141
142 for(int j=0;j<vevo[i].db;j++) //ÉS ÁRUIK
143 {
144 if(vevo[i].aru[j]==x_aru)
145 {
146 if(elso==0) elso=i+1; //+1, csak a szokásos indexelés és darab viszony :)
147 utolso=i+1;
148 db++;
149 }
150 }
151 if(db>0) alkalom++;
152 db=0;
153 }
154 cout << "Az első vásárlás sorszáma: " << elso << endl;
155 cout << "Az utolsó vásárlás sorszáma: " << utolso << endl;
156 cout << alkalom << " vásárlás során vettek belőle." << endl;
157 }
158
159 int ertek(int darab)
160 {
161 int fizess=0;
162 for(int i=0;i<darab;i++)
163 {
164 if(i<3) fizess+=(500-i*50);
165 else fizess+=400;
166 }
167 return fizess;
168 }
169
170 void F6()
171 {
172 cout << x_db << " darab vételekor fizetendő: " << ertek(x_db) << endl;
173 }
174
175 void F7()
176 {
177 int i=x_ssz-1;
178 int db=1;
179 for(int j=1;j<vevo[i].db+1;j++)
180 {
181 db=1;
182 while(vevo[i].aru[j-1]==vevo[i].aru[j])
183 {
184 j++; db++;
185 }
186 cout << db << " " << vevo[i].aru[j-1] << endl;
187 }
188 }
189
190 void F8()
191 {
192 ofstream fki;
193 fki.open("osszeg.txt");
194 int v_fizet;
195 for(int i=0;i<f_db;i++) //VEVŐK
196 {
197 v_fizet=0;
198 for(int j=0;j<vevo[i].db;j++) //ÉS ÁRUIK
199 {
200 v_fizet+=vevo[i].ar[j];
201 }
202 fki << i+1 << ": " << v_fizet << endl;
203 }
204 fki.close();
205 }
206
207 int main()
208 {
209 setlocale(LC_ALL, "hun");
210 kiir("1. feladat");
211 F1();
212 kiir("2. feladat");
213 F2();
214 kiir("3. feladat");
215 F3();
216 kiir("4. feladat");
217 F4();
218 kiir("5. feladat");
219 F5();
220 kiir("6. feladat");
221 F6();
222 kiir("7. feladat");
223 F7();
224 kiir("8. feladat");
225 F8();
226
227 return 0;
228 }