#include <iostream>
#include <iomanip>      //setprecision() miatt kell
#include <fstream>
#include <ctime>        //time() függvény miatt kell
#include <cstdlib>      //srand() és rand() függvények miatt kell

using namespace std;

int db, f_db;     //fájlban szereplo adatok száma, illetve az F-ek száma

void kiir(string s)
{
    cout << s << endl;
}

string feldob()
{
    string k;

    int pf;

    pf=rand()%2;     //véletlen szám: 0 vagy 1

    if(pf==1) k="I";
    else k="F";

    return k;
}

void F1()
{
    kiir("1. feladat");
    cout << "Pénzfeldobás eredménye: " << feldob() << endl;

}

void F2()
{
    string tipp, gep;
    kiir("2. feladat");
    cout << "Tippeljen! (F/I)=";
    cin >> tipp;
    tipp=toupper(tipp[0]);  //A string 1. karakterét állítsuk nagybetusre!
    gep=feldob();
    cout << "A tipp " << tipp << ", a dobás eredménye " << gep << " volt." << endl;
    if(tipp==gep) cout << "Ön eltalálta!";
    else cout << "Ön nem találta el!";
    cout << endl;
}

void F3()
{
    kiir("3. feladat");
    string dobas;
    ifstream fbe;
    fbe.open("kiserlet.txt");
    f_db=0;     // F-ek száma
    db=0;       // dobások száma
    while(!fbe.eof())
    {
        dobas="";
        fbe >> dobas;
        if(dobas.length()>0)    //A forrásfájl végén lévo üres sor miatt kell!
        {
            db++;
            if(dobas=="F") f_db++;  // Itt számoljuk az F-eket is (a következo feladathoz jó lesz)!
        }
    }
    cout << "A kísérlet " << db << " dobásból állt. (" << f_db << ")" << endl;
    fbe.close();
}

void F4()
{
    kiir("4. feladat");

    float rel_gyak_f=(float)f_db/(float)db;     //Konvertálni kell az intbol floatra, mert különben
                                                //nincs törtrész
    rel_gyak_f=rel_gyak_f*100;                  //Csak hogy % legyen :)
    cout << "A kísérlet során a fej relatív gyakorisága ";
    cout << setprecision(4) << rel_gyak_f << "%";   //setprecision - ehhez kellett az iomanip az elején
                                                //setprecision a tizedesjegyekhez!
    cout << " volt." << endl;
}

void F5()
{
    kiir("5. feladat");
    string dobas;
    db=0;   //FF-ek száma
    f_db=0; //F-ek száma
    ifstream fbe;
    fbe.open("kiserlet.txt");

    while(!fbe.eof())
    {
        dobas="";
        fbe >> dobas;
        if(dobas.length()>0)
        {
            if(dobas=="F") f_db++;  //Ha F jön 1-gyel növeljük
            if(dobas=="I")          //Ha I jön, megnézzük az F-ek számát
            {
                if(f_db==2) db++;   //Ha 2 akkor növeljük az FF esetek számát
                f_db=0;             //és újra kezdjük majd az F-ek számolását
            }
        }
    }
    fbe.close();
    cout << "A kísérlet során " << db << " alkalommal dobtak pontosan két fejet egymás után!" << endl;
}

void F6()
{
    kiir("6. feladat");
    string dobas;
    db=0;
    int maxhossz=0; //maximumkereséshez
    int hely;       //hol kezdodik a leghosszabb F-es sorozat
    f_db=0;         //F-ek száma
    ifstream fbe;
    fbe.open("kiserlet.txt");
    while(!fbe.eof())
    {
        dobas="";
        fbe >> dobas;
        if(dobas.length()>0)
        {
            db++;   //dobások száma, a helyhez kell
            if(dobas=="F") f_db++;
            if(dobas=="I")  //Ha I jön, akkor vége egy F-es sorozatnak
            {
                if(f_db>maxhossz)   //megnézzük a hosszát (max. keresés)
                {
                    maxhossz=f_db;
                    hely=db-maxhossz;
                }
                f_db=0;     //AZ F-es sorozatok számolását "újra" kezdjük
            }
        }
    }
    cout << "A leghosszabb tisztafej sorozat " << maxhossz;
    cout << " tagból áll, kezdete a(z) " << hely << ". dobás." << endl;
}

void F7()
{
    kiir("7. feladat");
    ofstream fki;
    fki.open("dobasok.txt");
    string sorozatok[1000]={""};    //1000 db string, mind üres
    f_db=0;     //FFFF-ek száma
    int i_db=0; //FFFI sorozatok száma
    for(int i=0;i<1000;i++)
    {

        for(int j=0;j<4;j++)
        {
            sorozatok[i]+=feldob(); //szöveg összefuzése
        }
        if(sorozatok[i]=="FFFF") f_db++;
        if(sorozatok[i]=="FFFI") i_db++;
    }

    cout << "FFFF: " << f_db << " FFFI: " << i_db << endl;
    cout << "Fájl írása...";
    fki << "FFFF: " << f_db << " FFFI: " << i_db << endl;
    for(int i=0;i<1000;i++)
    {
        fki << sorozatok[i] << " ";
    }
    fki.close();
    cout << "...vége!" << endl;
}

int main()
{
    setlocale(LC_ALL, "hun");
    srand(time(NULL));  //véletlenszám-generátor inicializálása
                        //csak azért kell, hogy minden futtatáskor más számok legyenek,
                        //egyébként elhagyható
    F1();
    F2();
    F3();
    F4();
    F5();
    F6();
    F7();

    return 0;
}
