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  }