lift200905_C++.cpp


  1  #include <iostream>         // cin és cout parancsok
  2  #include <fstream>          // fájlkezelés
  3  #include <vector>           // vector adattípushoz
  4  #include <set>              // set (halmaz) adattípushoz
  5  #include <algorithm>        // min és max függvények
  6  #include <ctime>            // srand és rand függvények (véletlenszámok)
  7  
  8  using namespace std;
  9  
 10  struct igeny
 11  {
 12      int o, p, mp, cs, be, ki;
 13  };
 14  
 15  int hely;       // 2. és 5. feladat
 16  int cspszam;    // 6. és 7. feladat
 17  int szintek;    // 4. feladat
 18  int csapat;     // 7. feladat
 19  set<int> nem;   // 7. feladat
 20  
 21  void F1(vector<igeny> &igenyek)
 22  {
 23      cout << "1. feladat - adatok beolvasása..." << endl;
 24      igeny temp;
 25      ifstream fbe;
 26      fbe.open("igeny.txt");
 27      int igenyszam;
 28      fbe >> szintek;
 29      fbe >> cspszam;
 30      fbe >> igenyszam;
 31      while(fbe>>temp.o&&fbe>>temp.p&&fbe>>temp.mp&&fbe>>temp.cs&&fbe>>temp.be&&fbe>>temp.ki)
 32      {
 33          igenyek.push_back(temp);
 34      }
 35      fbe.close();
 36      /*
 37      for(auto elem:igenyek)
 38          cout << elem.o << " " << elem.p << " " << elem.mp << " " << elem.cs << " " << elem.be << " " << elem.ki << endl;
 39      */
 40  }
 41  
 42  void F2()
 43  {
 44      cout << "****************************************************************\n2. feladat" << endl;
 45      cout << "Kérem a lift indulási helyét! ";
 46      cin >> hely;
 47  }
 48  
 49  void F3(vector<igeny> igenyek)
 50  {
 51      cout << "****************************************************************\n3. feladat" << endl;
 52      int utolso=igenyek[igenyek.size()-1].ki;
 53      printf("A lift a(z) %d. szinten áll az utolsó igény teljesítése után.\n", utolso);
 54  }
 55  
 56  void F4(vector<igeny> igenyek)
 57  {
 58      cout << "****************************************************************\n4. feladat" << endl;
 59      int min_sz=szintek;
 60      int max_sz=0;
 61      for(auto elem:igenyek)
 62      {
 63          min_sz=min(min_sz,min(elem.be,elem.ki));
 64          max_sz=max(max_sz,max(elem.be,elem.ki));
 65      }
 66      printf("A legalacsonyabb szint: %d\n", min_sz);
 67      printf("A legmagasabb szint...: %d\n", max_sz);
 68  }
 69  
 70  void F5(vector<igeny> igenyek)
 71  {
 72      cout << "****************************************************************\n5. feladat" << endl;
 73      int aktual=hely;                // ez az a hely, ahol a legelején áll a lift (lsd. 2. feladat)
 74      int ures=0, utas=0;             // megfelelő számlálók inicializálása
 75      for(auto elem:igenyek)          // végigmegyünk az igényeken...
 76      {
 77          if(elem.be<elem.ki) utas++;     // ha induló szint kisebb, akkor felfelé megy utassal
 78          if(elem.be>aktual) ures++;      // ha a lift alacsonyabb szinten van a híváskor, akkor üresen megy fel a szerelőkhöz
 79          aktual=elem.ki;                 // ahol kiszállnak az lesz az "új" altuális hely
 80      }
 81      printf("A lift %d alkalommal ment felfelé utasokkal.\n", utas);
 82      printf("A lift %d alkalommal ment felfelé utasok nélkül.\n", ures);
 83  }
 84  
 85  void F6(vector<igeny> igenyek)
 86  {
 87      cout << "****************************************************************\n6. feladat" << endl;
 88      int csapatok[cspszam]={0};
 89      for(auto elem:igenyek)
 90      {
 91          csapatok[elem.cs-1]++;
 92      }
 93      for(int i=0;i<cspszam;i++)
 94      {
 95          if(csapatok[i]==0)
 96          {
 97              nem.insert(i+1);
 98              cout << i+1 << " ";
 99          }
100      }
101      cout << endl;
102  }
103  
104  void F7(vector<igeny> igenyek)
105  {
106      cout << "****************************************************************\n7. feladat" << endl;
107      srand(time(NULL));
108      do
109      {
110          csapat=rand()%cspszam+1;
111      }
112      while(nem.count(csapat)>0);
113      printf("A véletlenszerűen kiválasztott csapat: %d\n", csapat);
114  
115      bool gyalog=false;                          // gyalog mennek-e a szerelők
116      bool kezd=true;                             // az adott csapat először kezdő állapotát nézem-e
117      int kiszallas;                              // ahol kiszállnak a liftből
118      for(auto elem:igenyek)
119      {
120          if(elem.cs==csapat)                     // megvan a csapatunk
121          {
122              if(kezd)                            // most kezdjük vele a viszgálatot
123              {
124                  kiszallas=elem.ki;              // ahol kiszállnak a liftből
125                  kezd=false;                     // innentől már nem kezdőállapotot nézünk majd
126              }
127              else
128              {
129                  if(elem.be!=kiszallas)          // ha a beszállási hely eltér attól ahol előzőleg hagyták a liftet, akkor gyalog mentek a két szint között
130                  {
131                      printf("Gyalogosan közlekedtek a(z) %d. ", kiszallas);
132                      printf("és  a(z) %d. szint között!\n", elem.be);
133                      gyalog=true;                // volt gyaloglás
134                  }
135                  kiszallas=elem.ki;          // ezt ne felejtsük el aktualizálni...
136              }
137          }
138      }
139      if(!gyalog) printf("Nem bizonyítható szabálytalanság!\n");    // ha nem volt gyaloglás a vizsgálat végén, akkor...
140  }
141  
142  void F8(vector<igeny> igenyek)
143  {
144      cout << "****************************************************************\n8. feladat - adatok kiírása..." << endl;
145      ofstream fki;
146      int fkod;
147      string siker;
148      fki.open("blokkol.txt");
149      for(auto elem:igenyek)
150      {
151          if(elem.cs==csapat)
152          {
153              cout << "Indulási emelet: " << elem.be << endl;           // képernyőre
154              fki << "Indulási emelet: " << elem.be << endl;            // fájlba
155              cout << "Célemelet: " << elem.ki << endl;
156              fki << "Célemelet: " << elem.ki << endl;
157              cout << "Feladatkód: ";
158              cin >> fkod;
159              fki << "Feladatkód: " << fkod << endl;
160              cout << "Befejezés ideje: " << elem.o << ":" << elem.p << ":" << elem.mp << endl;
161              fki << "Befejezés ideje: " << elem.o << ":" << elem.p << ":" << elem.mp << endl;
162              cout << "Sikeresség: ";
163              cin >> siker;
164              fki << "Sikeresség: " << siker << endl;
165          }
166      }
167      fki.close();
168  }
169  
170  int main()
171  {
172      setlocale(LC_ALL,"");
173  
174      vector<igeny> igenyek;
175      igenyek.reserve(100);
176      F1(igenyek);
177      F2();
178      F3(igenyek);
179      F4(igenyek);
180      F5(igenyek);
181      F6(igenyek);
182      F7(igenyek);
183      F8(igenyek);
184      return 0;
185  }