#include <iostream>
#include <fstream>
#include <windows.h>

using namespace std;

struct futar{
    int km;
    int ft;
} adatok[7][40];

int elso_nap=7+1, utolso_nap=0, napi_km[7];

void kiir(int szam)
{
    cout << endl;
    cout << szam << ". FELADAT" << endl;
    cout << "................" << endl;
}

void F1()
{
    /*mátrix nullázása, hogy ha egy nap nem volt fuvar, vagy nem volt 40 fuvar,
     csak kevesebb, akkor ott nulla legyen. Ezt később ki tudjuk használni.*/
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<40;j++)
        {
            adatok[i][j].km=0;
        }
    }
    ifstream be;
    be.open("tavok.txt");
    int nap, fuvar;
    int i=0;
    while(!be.eof())
    {
        be >> nap;

        if(nap<elso_nap) elso_nap=nap;  //minimumkeresés
        if(nap>utolso_nap) utolso_nap=nap;  //maximumkeresés
        be >> fuvar;
        be >> adatok[nap-1][fuvar-1].km;  //Ez itt a lényeg, azINDEXELÉS!!!!!
        cout << nap << " " << fuvar << " " << adatok[nap-1][fuvar-1].km << endl;
        i++;
    }
    cout << "Első nap: " << elso_nap << " utolsó nap: " << utolso_nap << endl;
    be.close();
}

void F2()
{
    cout << elso_nap << ".nap első fuvar: " << adatok[elso_nap-1][0].km << " km volt" << endl;
}

void F3()
{
    //lineáris keresés a végétől az eleje felé
    int j=39;
    while(j>-1&&adatok[utolso_nap-1][j].km==0)
    {
        j--;
    }

    if(j>-1)
    {
        cout << "A(z) " << utolso_nap << ". nap (utolsó nap) utolsó fuvar: " << adatok[utolso_nap-1][j].km << " km" << endl;
    }
}

void F4()
{
    int i=0; int db=0;
    for(int i=0;i<7;i++)
    {
        if(adatok[i][0].km==0)
    {
    cout << i+1 << ". napon nem dolgozott" << endl;
    db++;
        }
    }
    if(db==0) cout << "Minden nap dolgozott!" << endl;
}

void F5()
{
    int max_fuvar=0, mikor;
    for(int i=0;i<7;i++)
    {
        int j=0;
        while(j<40&&adatok[i][j].km!=0)
        {
            j++;
        }
        if(j<40)
        {
            if(j>max_fuvar)
            {
                max_fuvar=j;
                mikor=i+1;
            }
        }
    }
    cout << "A(z) " << mikor << ". napon ment a legtöbbet!" << endl;
}

void F6_seged()   //napi összegzés
{
    //ha kevés elem van, így is adhatunk nekik kezdőértéket
    napi_km[7]=(0,0,0,0,0,0,0);

    for(int i=0;i<7;i++)
    {
        for(int j=0;j<40;j++)
        {
            napi_km[i]=napi_km[i]+adatok[i][j].km;
        }
    }
}

void F6()
{
    F6_seged();   //napi összegzés
    //F6_seged alapjan itt már csak ki kell írni az adatokat!
    for(int i=0;i<7;i++)
    {
        cout << i+1 << ". nap: " << napi_km[i] << " km" << endl;
    }
}

int F7_kalkulator(int tav)
{
    //  1 -  2 km  500 Ft
    //  3 -  5 km  700 Ft
    //  6 - 10 km  900 Ft
    // 11 - 20 km 1400 Ft
    // 21 - 30 km 2000 Ft

    int fizet=0;
    if(tav<3) fizet=500;
    else if(tav<6) fizet=700;
         else if(tav<11) fizet=900;
              else if(tav<21) fizet=1400;
                   else if(tav<31) fizet=2000;
                        else fizet=0; // :) Ez a feladatból következik, nem... :)

    return fizet;
}

void F7()
{
    int tavolsag;

    cout << "Adjon meg egy távolságot: ";
    cin >> tavolsag;
    cout << "Erre jár " << F7_kalkulator(tavolsag) << " Ft." << endl;
}

void F8()
{
    ofstream ki;
    ki.open("dijazas.txt");
    //Itt is nagyon jól kihasználhatjuk a mátrixunk előnyeit,
    //mely mátrix - ugye - napok és utak szerint indexelt!!
    for(int i=0;i<7;i++)  //napok szerint megy a ciklus
    {
        for(int j=0;j<40;j++)   //azon belül pedig utanként
        {
            if(adatok[i][j].km!=0)  //csak akkor írjuk ki a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
            {
                //csak egyszerűen a kalkulátorra bízzuk a számolást és rögtön kiírjuk az eredményt!
                //képernyőre...

                //a 9. feladathoz kell, hogy ez a ft mező is feltöltésre kerüljön.
                //akár itt is összegezhetnénk a keresetet, de meghagyjuk a 9. pontnak!
                adatok[i][j].ft=F7_kalkulator(adatok[i][j].km);
                cout << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
                //...és fájlba
                ki   << i+1 << ". nap " << j+1 << ". út: " << adatok[i][j].ft << " Ft" << endl;
            }
        }
    }
    ki.close();
}

void F9()
{
    int kereset=0;
    //Egyszerű összegzés mátrix elemekre
    for(int i=0;i<7;i++)  //napok szerint megy a ciklus
    {
        for(int j=0;j<40;j++)   //azon belül pedig utanként
        {
            if(adatok[i][j].km!=0)  //csak akkor számolunk a mátrix alapján a Ft-ot, ha ott tényleg volt út!!
            {
                kereset=kereset+adatok[i][j].ft;
            }
        }
    }
    cout << "Heti munka díjazása: " << kereset << " Ft" << endl;
}

int main()
{
    setlocale(LC_ALL, "hun");
    kiir(1);
    F1();
    kiir(2);
    F2();
    kiir(3);
    F3();
    kiir(4);
    F4();
    kiir(5);
    F5();
    kiir(6);
    F6();
    kiir(7);
    F7();
    kiir(8);
    F8();
    kiir(9);
    F9();
    return 0;
}
