1  #include <iostream>
  2  #include <iomanip>      //setprecision() miatt kell
  3  #include <fstream>
  4  #include <ctime>        //time() függvény miatt kell
  5  #include <cstdlib>      //srand() és rand() függvények miatt kell
  6  
  7  using namespace std;
  8  
  9  int db, f_db;     //fájlban szereplo adatok száma, illetve az F-ek száma
 10  
 11  void kiir(string s)
 12  {
 13      cout << s << endl;
 14  }
 15  
 16  string feldob()
 17  {
 18      string k;
 19  
 20      int pf;
 21  
 22      pf=rand()%2;     //véletlen szám: 0 vagy 1
 23  
 24      if(pf==1) k="I";
 25      else k="F";
 26  
 27      return k;
 28  }
 29  
 30  void F1()
 31  {
 32      kiir("1. feladat");
 33      cout << "Pénzfeldobás eredménye: " << feldob() << endl;
 34  
 35  }
 36  
 37  void F2()
 38  {
 39      string tipp, gep;
 40      kiir("2. feladat");
 41      cout << "Tippeljen! (F/I)=";
 42      cin >> tipp;
 43      tipp=toupper(tipp[0]);  //A string 1. karakterét állítsuk nagybetusre!
 44      gep=feldob();
 45      cout << "A tipp " << tipp << ", a dobás eredménye " << gep << " volt." << endl;
 46      if(tipp==gep) cout << "Ön eltalálta!";
 47      else cout << "Ön nem találta el!";
 48      cout << endl;
 49  }
 50  
 51  void F3()
 52  {
 53      kiir("3. feladat");
 54      string dobas;
 55      ifstream fbe;
 56      fbe.open("kiserlet.txt");
 57      f_db=0;     // F-ek száma
 58      db=0;       // dobások száma
 59      while(!fbe.eof())
 60      {
 61          dobas="";
 62          fbe >> dobas;
 63          if(dobas.length()>0)    //A forrásfájl végén lévo üres sor miatt kell!
 64          {
 65              db++;
 66              if(dobas=="F") f_db++;  // Itt számoljuk az F-eket is (a következo feladathoz jó lesz)!
 67          }
 68      }
 69      cout << "A kísérlet " << db << " dobásból állt. (" << f_db << ")" << endl;
 70      fbe.close();
 71  }
 72  
 73  void F4()
 74  {
 75      kiir("4. feladat");
 76  
 77      float rel_gyak_f=(float)f_db/(float)db;     //Konvertálni kell az intbol floatra, mert különben
 78                                                  //nincs törtrész
 79      rel_gyak_f=rel_gyak_f*100;                  //Csak hogy % legyen :)
 80      cout << "A kísérlet során a fej relatív gyakorisága ";
 81      cout << setprecision(4) << rel_gyak_f << "%";   //setprecision - ehhez kellett az iomanip az elején
 82                                                  //setprecision a tizedesjegyekhez!
 83      cout << " volt." << endl;
 84  }
 85  
 86  void F5()
 87  {
 88      kiir("5. feladat");
 89      string dobas;
 90      db=0;   //FF-ek száma
 91      f_db=0; //F-ek száma
 92      ifstream fbe;
 93      fbe.open("kiserlet.txt");
 94  
 95      while(!fbe.eof())
 96      {
 97          dobas="";
 98          fbe >> dobas;
 99          if(dobas.length()>0)
100          {
101              if(dobas=="F") f_db++;  //Ha F jön 1-gyel növeljük
102              if(dobas=="I")          //Ha I jön, megnézzük az F-ek számát
103              {
104                  if(f_db==2) db++;   //Ha 2 akkor növeljük az FF esetek számát
105                  f_db=0;             //és újra kezdjük majd az F-ek számolását
106              }
107          }
108      }
109      fbe.close();
110      cout << "A kísérlet során " << db << " alkalommal dobtak pontosan két fejet egymás után!" << endl;
111  }
112  
113  void F6()
114  {
115      kiir("6. feladat");
116      string dobas;
117      db=0;
118      int maxhossz=0; //maximumkereséshez
119      int hely;       //hol kezdodik a leghosszabb F-es sorozat
120      f_db=0;         //F-ek száma
121      ifstream fbe;
122      fbe.open("kiserlet.txt");
123      while(!fbe.eof())
124      {
125          dobas="";
126          fbe >> dobas;
127          if(dobas.length()>0)
128          {
129              db++;   //dobások száma, a helyhez kell
130              if(dobas=="F") f_db++;
131              if(dobas=="I")  //Ha I jön, akkor vége egy F-es sorozatnak
132              {
133                  if(f_db>maxhossz)   //megnézzük a hosszát (max. keresés)
134                  {
135                      maxhossz=f_db;
136                      hely=db-maxhossz;
137                  }
138                  f_db=0;     //AZ F-es sorozatok számolását "újra" kezdjük
139              }
140          }
141      }
142      cout << "A leghosszabb tisztafej sorozat " << maxhossz;
143      cout << " tagból áll, kezdete a(z) " << hely << ". dobás." << endl;
144  }
145  
146  void F7()
147  {
148      kiir("7. feladat");
149      ofstream fki;
150      fki.open("dobasok.txt");
151      string sorozatok[1000]={""};    //1000 db string, mind üres
152      f_db=0;     //FFFF-ek száma
153      int i_db=0; //FFFI sorozatok száma
154      for(int i=0;i<1000;i++)
155      {
156  
157          for(int j=0;j<4;j++)
158          {
159              sorozatok[i]+=feldob(); //szöveg összefuzése
160          }
161          if(sorozatok[i]=="FFFF") f_db++;
162          if(sorozatok[i]=="FFFI") i_db++;
163      }
164  
165      cout << "FFFF: " << f_db << " FFFI: " << i_db << endl;
166      cout << "Fájl írása...";
167      fki << "FFFF: " << f_db << " FFFI: " << i_db << endl;
168      for(int i=0;i<1000;i++)
169      {
170          fki << sorozatok[i] << " ";
171      }
172      fki.close();
173      cout << "...vége!" << endl;
174  }
175  
176  int main()
177  {
178      setlocale(LC_ALL, "hun");
179      srand(time(NULL));  //véletlenszám-generátor inicializálása
180                          //csak azért kell, hogy minden futtatáskor más számok legyenek,
181                          //egyébként elhagyható
182      F1();
183      F2();
184      F3();
185      F4();
186      F5();
187      F6();
188      F7();
189  
190      return 0;
191  }