#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int telkek[60][3];
int db;
int terulet(int, int);
int ado(int,int);
int index(int);         ///a házszám függvényében visszadaja a tömb indexét
int tavolsag(int);
bool szembenvan(int, int);

int main()
{
    setlocale(LC_ALL,"hun");
    ///1. feladat
    cout << "1. feladat: beolvasás" << endl;
    ifstream be;
    be.open("telkek.txt");
    if(be.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }
    be >> db;
    int i=0;
    while(be >> telkek[i][0] >> telkek[i][1] >> telkek[i][2]){

        i++;
    }
    be.close();

    ///2. feladat
    cout << "2. feladat: Távolság: " ;
    int tav=0;
    for(i=0; i<db; i++) {
        tav+=telkek[i][1];
    }
    cout << tav+180 << " m" << endl;

    ///3. feladat
    cout << "3. feladat: " << endl;
    int db20=0;
    for(i=0; i<db; i++) {
        if(telkek[i][0]%2==0 && telkek[i][1]<=20) db20++;
    }
    cout << "Teljes utcafrontos beépítést " << db20 << " db telek esetén kell alkalmazni a Jólétsoron." << endl;

    ///4. feladat
    cout << "4. feladat: " << endl;
    int minT=3200, maxT=0, maxHsz, minHsz;
    for(i=0; i<db; i++) {
        if(telkek[i][0]%2==1){
           if(terulet(telkek[i][1],telkek[i][2])>maxT){
              maxHsz=telkek[i][0];
              maxT=terulet(telkek[i][1],telkek[i][2]);
           }
           if(terulet(telkek[i][1],telkek[i][2])<minT){
              minHsz=telkek[i][0];
              minT=terulet(telkek[i][1],telkek[i][2]);
           }
        }
    }
    cout << "A legnagyobb területű telek házszáma: " << maxHsz << " és területe: " << maxT << endl;
    cout << "A legkisebb területű telek házszáma: " << minHsz << " és területe: " << minT << endl;
    cout << "A két telek között " << abs(maxHsz-minHsz)/2-1 << " db telek van." << endl;

    ///5. feladat
    cout << "5. feladat: Bevétel a Gazdasoron: " ;
    int bevetel=0;
    for(i=0; i<db; i++) {
        if(telkek[i][0]%2==1){
            bevetel+=ado(telkek[i][1],telkek[i][2]);
        }
    }
    cout << bevetel << " Ft" << endl;

    ///6. feladat
    cout << "6. feladat: A három utolsó telek a Jólétsoron: " << endl;
    if(db%2==0) maxHsz=db;
    else maxHsz=db-1;
    cout << "Házszám: " << maxHsz << " Távolság: " << tavolsag(maxHsz) << endl;
    cout << "Házszám: " << maxHsz-2 << " Távolság: " << tavolsag(maxHsz-2) << endl;
    cout << "Házszám: " << maxHsz-4 << " Távolság: " << tavolsag(maxHsz-4) << endl;

    ///7. feladat
    cout << "7. feladat: A Jólétsor telkeinek hosszának fájlba ítása: " << endl;
    ofstream ki;
    ki.open("joletsor.csv");
    if(ki.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }
    for(int PsHsz=2; PsHsz<=db; PsHsz+=2) {      ///a páros házszámokon végig megyünk
        int hossz=70;
        for(int PnHsz=1; PnHsz<=db; PnHsz+=2){   ///a páratlan házszámokon végig megyünk
            if(szembenvan(PsHsz,PnHsz) && 70-telkek[index(PnHsz)][2]<hossz){ ///ha szemben vannak és hossz kisebb, mint ....
                hossz=70-telkek[index(PnHsz)][2];
            }
        }
        ki << PsHsz << ";" << telkek[index(PsHsz)][1] << ";" << hossz << endl;
    }
    ki.close();
    cout << "Az adatokat fájlba írtuk.";
    cin.get();
    return 0;
}

int terulet(int szelesseg, int hosszusag){

    return szelesseg*hosszusag;

}
int ado(int szelesseg, int hosszusag){
    int terulet=szelesseg*hosszusag;
    int ft;
    if(terulet<=700) ft=700*51;
    else if(terulet<=1000) ft=700*51+(terulet-700)*39;
    else ft=700*51+300*39+200;
    if(szelesseg<=15 || hosszusag<=25) ft*=0.8;
    if(ft%100>=50) ft=ft/100*100+100; ///pl ft=6378, ft%100=68, ft/100=63, ft/100*100=6300, ft/100*100+100=6400
    else ft=ft/100*100;
    return ft;
}

int index(int hazszam){
    int i=0;
    while(hazszam!=telkek[i][0] && i<db) i++;
    return i;
}

int tavolsag(int hazszam){
    int tav=0;

    while(hazszam>0){

        hazszam-=2;
        tav+=telkek[index(hazszam)][1];
    }
    return tav;
}

bool szembenvan(int hazszam_1, int hazszam_2){
    bool szemben=true;
    if(tavolsag(hazszam_1)>tavolsag(hazszam_2+2) || tavolsag(hazszam_1+2)<tavolsag(hazszam_2)) szemben=false;
    return szemben;
}
