1  #include <iostream>
  2  #include <fstream>
  3  #include <windows.h>
  4  
  5  using namespace std;
  6  
  7  struct futar{
  8      int km;
  9      int ft;
 10  } adatok[7][40];
 11  
 12  int elso_nap=7+1, utolso_nap=0, napi_km[7];
 13  
 14  void kiir(int szam)
 15  {
 16      cout << endl;
 17      cout << szam << ". FELADAT" << endl;
 18      cout << "................" << endl;
 19  }
 20  
 21  void F1()
 22  {
 23      /*mátrix nullázása, hogy ha egy nap nem volt fuvar, vagy nem volt 40 fuvar,
 24       csak kevesebb, akkor ott nulla legyen. Ezt később ki tudjuk használni.*/
 25      for(int i=0;i<7;i++)
 26      {
 27          for(int j=0;j<40;j++)
 28          {
 29              adatok[i][j].km=0;
 30          }
 31      }
 32      ifstream be;
 33      be.open("tavok.txt");
 34      int nap, fuvar;
 35      int i=0;
 36      while(!be.eof())
 37      {
 38          be >> nap;
 39  
 40          if(nap<elso_nap) elso_nap=nap;  //minimumkeresés
 41          if(nap>utolso_nap) utolso_nap=nap;  //maximumkeresés
 42          be >> fuvar;
 43          be >> adatok[nap-1][fuvar-1].km;  //Ez itt a lényeg, azINDEXELÉS!!!!!
 44          cout << nap << " " << fuvar << " " << adatok[nap-1][fuvar-1].km << endl;
 45          i++;
 46      }
 47      cout << "Első nap: " << elso_nap << " utolsó nap: " << utolso_nap << endl;
 48      be.close();
 49  }
 50  
 51  void F2()
 52  {
 53      cout << elso_nap << ".nap első fuvar: " << adatok[elso_nap-1][0].km << " km volt" << endl;
 54  }
 55  
 56  void F3()
 57  {
 58      //lineáris keresés a végétől az eleje felé
 59      int j=39;
 60      while(j>-1&&adatok[utolso_nap-1][j].km==0)
 61      {
 62          j--;
 63      }
 64  
 65      if(j>-1)
 66      {
 67          cout << "A(z) " << utolso_nap << ". nap (utolsó nap) utolsó fuvar: " << adatok[utolso_nap-1][j].km << " km" << endl;
 68      }
 69  }
 70  
 71  void F4()
 72  {
 73      int i=0; int db=0;
 74      for(int i=0;i<7;i++)
 75      {
 76          if(adatok[i][0].km==0)
 77      {
 78      cout << i+1 << ". napon nem dolgozott" << endl;
 79      db++;
 80          }
 81      }
 82      if(db==0) cout << "Minden nap dolgozott!" << endl;
 83  }
 84  
 85  void F5()
 86  {
 87      int max_fuvar=0, mikor;
 88      for(int i=0;i<7;i++)
 89      {
 90          int j=0;
 91          while(j<40&&adatok[i][j].km!=0)
 92          {
 93              j++;
 94          }
 95          if(j<40)
 96          {
 97              if(j>max_fuvar)
 98              {
 99                  max_fuvar=j;
100                  mikor=i+1;
101              }
102          }
103      }
104      cout << "A(z) " << mikor << ". napon ment a legtöbbet!" << endl;
105  }
106  
107  void F6_seged()   //napi összegzés
108  {
109      //ha kevés elem van, így is adhatunk nekik kezdőértéket
110      napi_km[7]=(0,0,0,0,0,0,0);
111  
112      for(int i=0;i<7;i++)
113      {
114          for(int j=0;j<40;j++)
115          {
116              napi_km[i]=napi_km[i]+adatok[i][j].km;
117          }
118      }
119  }
120  
121  void F6()
122  {
123      F6_seged();   //napi összegzés
124      //F6_seged alapjan itt már csak ki kell írni az adatokat!
125      for(int i=0;i<7;i++)
126      {
127          cout << i+1 << ". nap: " << napi_km[i] << " km" << endl;
128      }
129  }
130  
131  int F7_kalkulator(int tav)
132  {
133      //  1 -  2 km  500 Ft
134      //  3 -  5 km  700 Ft
135      //  6 - 10 km  900 Ft
136      // 11 - 20 km 1400 Ft
137      // 21 - 30 km 2000 Ft
138  
139      int fizet=0;
140      if(tav<3) fizet=500;
141      else if(tav<6) fizet=700;
142           else if(tav<11) fizet=900;
143                else if(tav<21) fizet=1400;
144                     else if(tav<31) fizet=2000;
145                          else fizet=0; // :) Ez a feladatból következik, nem... :)
146  
147      return fizet;
148  }
149  
150  void F7()
151  {
152      int tavolsag;
153  
154      cout << "Adjon meg egy távolságot: ";
155      cin >> tavolsag;
156      cout << "Erre jár " << F7_kalkulator(tavolsag) << " Ft." << endl;
157  }
158  
159  void F8()
160  {
161      ofstream ki;
162      ki.open("dijazas.txt");
163      //Itt is nagyon jól kihasználhatjuk a mátrixunk előnyeit,
164      //mely mátrix - ugye - napok és utak szerint indexelt!!
165      for(int i=0;i<7;i++)  //napok szerint megy a ciklus
166      {
167          for(int j=0;j<40;j++)   //azon belül pedig utanként
168          {
169              if(adatok[i][j].km!=0)  //csak akkor írjuk ki a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
170              {
171                  //csak egyszerűen a kalkulátorra bízzuk a számolást és rögtön kiírjuk az eredményt!
172                  //képernyőre...
173  
174                  //a 9. feladathoz kell, hogy ez a ft mező is feltöltésre kerüljön.
175                  //akár itt is összegezhetnénk a keresetet, de meghagyjuk a 9. pontnak!
176                  adatok[i][j].ft=F7_kalkulator(adatok[i][j].km);
177                  cout << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
178                  //...és fájlba
179                  ki   << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
180              }
181          }
182      }
183      ki.close();
184  }
185  
186  void F9()
187  {
188      int kereset=0;
189      //Egyszerű összegzés mátrix elemekre
190      for(int i=0;i<7;i++)  //napok szerint megy a ciklus
191      {
192          for(int j=0;j<40;j++)   //azon belül pedig utanként
193          {
194              if(adatok[i][j].km!=0)  //csak akkor számolunk a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
195              {
196                  kereset=kereset+adatok[i][j].ft;
197              }
198          }
199      }
200      cout << "Heti munka díjazása: " << kereset << " Ft" << endl;
201  }
202  
203  int main()
204  {
205      setlocale(LC_ALL, "hun");
206      kiir(1);
207      F1();
208      kiir(2);
209      F2();
210      kiir(3);
211      F3();
212      kiir(4);
213      F4();
214      kiir(5);
215      F5();
216      kiir(6);
217      F6();
218      kiir(7);
219      F7();
220      kiir(8);
221      F8();
222      kiir(9);
223      F9();
224      return 0;
225  }