1  #include <iostream>
  2  #include <fstream>
  3  #include <conio.h>
  4  #include <stdio.h>
  5  #include <windows.h>
  6  #include <cmath>  //math.h
  7  #include <ctime>
  8  #include <string>
  9  
 10  using namespace std;
 11  
 12  struct honap
 13  {
 14      string hn;  //hónap neve
 15      int nap;    //hónap napjainak száma
 16      int ksz;    //hónap kezdõsorszáma
 17  } ho[12];  //12 hónap tömbje, minden eleme 3 mezõbõl áll
 18  
 19  struct foglalas
 20  {
 21      int s, sz, e, t, v, r;
 22      string az;
 23  } fogl[1000];
 24  
 25  int N;
 26  
 27  void F1()
 28  {
 29      ifstream be;
 30      be.open("pitypang.txt");
 31  
 32      be >> N;
 33  
 34      for(int i=0;i<N;i++)
 35      {
 36          be >> fogl[i].s;
 37          be >> fogl[i].sz;
 38          be >> fogl[i].e;
 39          be >> fogl[i].t;
 40          be >> fogl[i].v;
 41          be >> fogl[i].r;
 42          be >> fogl[i].az;
 43      }
 44      be.close();
 45  }
 46  
 47  void F1_2()
 48  {
 49      ifstream be;
 50      be.open("honapok.txt");
 51      for(int i=0;i<12;i++)
 52      {
 53          be >> ho[i].hn;
 54          be >> ho[i].nap;
 55          be >> ho[i].ksz;
 56          cout << ho[i].hn << " " << ho[i].nap << ho[i].ksz << endl;
 57      }
 58      be.close();
 59  }
 60  
 61  void F2()
 62  {
 63      int max=0;
 64      int maxth=fogl[max].t-fogl[max].e;
 65  
 66      for(int i=1;i<N;i++)
 67      {
 68          if(fogl[i].t-fogl[i].e>maxth)
 69          {
 70              max=i;
 71              maxth=fogl[i].t-fogl[i].e;
 72          }
 73      }
 74      cout << fogl[max].az << " (" << fogl[max].e << ") - " << maxth << endl;
 75  }
 76  
 77  void F3()
 78  {
 79      int bev=0;
 80      int fiz;
 81  
 82      ofstream ki;
 83      ki.open("bevetel.txt");
 84  
 85      for(int i=0;i<N;i++)
 86      {
 87          if(fogl[i].e<121) fiz=9000;
 88          if(fogl[i].e>=121&&fogl[i].e<244) fiz=10000;
 89          if(fogl[i].e>=244) fiz=8000;
 90  
 91          //pótágy 2000/éj
 92          if(fogl[i].v>2) fiz=fiz+(fogl[i].t-fogl[i].e)*2000;
 93  
 94          //reggeli 1100/fõ/nap
 95          if(fogl[i].r==1) fiz=fiz+fogl[i].v*(fogl[i].t-fogl[i].e)*1100;
 96  
 97          ki << fogl[i].s << ":" << fiz << endl;
 98  
 99          bev=bev+fiz;
100          fiz=0;
101      }
102      ki.close();
103  
104      cout << "Összbevétel: " << bev << endl;
105  }
106  
107  int hol_van(int x)
108  {
109      int honap=0;
110      for(int i=0;i<12;i++)
111      {
112          if(i<11)
113          {
114              if(x>=ho[i].ksz&&x<ho[i+1].ksz) honap=i;  //Január-november
115          }
116          else
117          {
118              if(x>=ho[i].ksz) honap=i;
119          }
120      }
121      return honap;
122  }
123  
124  void F4()
125  {
126      int vej[12];
127      for(int i=0;i<12;i++) vej[i]=0;
128  
129      int erk_honap;
130      int tav_honap;
131  
132      for(int i=0;i<N;i++)
133      {
134          erk_honap=hol_van(fogl[i].e);
135          tav_honap=hol_van(fogl[i].t);
136  
137          if(erk_honap==tav_honap)
138          {
139              vej[erk_honap]+=(fogl[i].t-fogl[i].e)*fogl[i].v;
140          }
141          else
142          {
143              vej[erk_honap]+=(ho[tav_honap].ksz-fogl[i].e)*fogl[i].v;
144              vej[tav_honap]+=(fogl[i].t-ho[tav_honap].ksz)*fogl[i].v;
145          }
146          // cout << "vej: " << vej[erk_honap] << " " << vej[tav_honap] << endl;
147      }
148  
149      for(int i=0;i<12;i++)
150      {
151          cout << i+1 << ": " << vej[i] << " vendégéj" << endl;
152      }
153  }
154  
155  void F5()
156  {
157      char szabad[27][365];
158      for(int i=0;i<27;i++)
159      {
160          for(int j=0;j<365;j++)
161          {
162              szabad[i][j]=true;
163          }
164      }
165  
166      int x,y,z;  //x - szoba (sor), y - érkezés napja (oszlopok)  z - távozás napja
167      for(int i=0;i<N;i++)
168      {
169          x=fogl[i].sz-1;  //-1 mert indexek elcsusznak
170          y=fogl[i].e-1;
171          z=fogl[i].t-1;
172          //foglalások alapján false-ra állítjuk a foglalt napokat az egyes szobákban
173          for(int j=y;j<z;j++)
174          {
175              szabad[x][j]=false;
176          }
177      }
178      //adatok bekérése a felhasználótól: mikor jön és hány éjszakára
179      int enap, ejsz;
180      cout << "Új foglalás" << endl;
181      cout << "Érkezési nap sorszáma: ";
182      cin >> enap;
183      cout << "Eltöltendõ éjszakák száma:";
184      cin >> ejsz;
185      //ejsz hosszú TRUE értékû sorozat keresése a SZABAD mátrixban
186      bool van=false;
187      int j,db;
188      //szobánként haladunk
189      for(int i=0;i<27;i++)
190      {
191          j=enap-1; db=0;   //számoljuk az egymást követõ szabad napokat egy-egy szobánál ejsz hosszú "szakaszon"
192          while(j<enap+ejsz-1)
193          {
194              if(szabad[i][j]) db++;
195              j++;
196          }
197          if(db==ejsz)
198          {
199              van=true;
200              cout << i+1 << ". szoba" << endl;
201              break;  //Nem elegáns, de ha volt ilyen szabad sorozat, akkor fejezzük be!
202          }
203      }
204      if(!van) cout << "Nincs szabad szoba ebben az idõszakban!" << endl;
205  }
206  int main()
207  {
208      setlocale(LC_ALL, "hun");
209      cout << "1. feladat" << endl;
210      F1();
211      F1_2();
212      cout << "2. feladat" << endl;
213      F2();
214      cout << "3. feladat" << endl;
215      F3();
216      cout << "4. feladat" << endl;
217      F4();
218      cout << "5. feladat" << endl;
219      F5();
220      return 0;
221  }