#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>
#include <vector>
using namespace std;

struct komplex {
    float re, im;
};

struct komplexpar {
    komplex egyik, masik;
};

int fele(int bemenet) {
    return bemenet / 2;
}

bool elsobetuje(string szoveg, char c) {
    return szoveg[0] == c;
}

float tav(komplexpar par) {
    return sqrt((par.egyik.re - par.masik.re)*(par.egyik.re - par.masik.re) +
                (par.egyik.im - par.masik.im)*(par.egyik.im - par.masik.im));
}

void kiment(ofstream &f, komplex szam) {
    f << szam.re << " " << szam.im << endl;
}

komplex betolt(ifstream &f) {
    komplex eredmeny;
    f >> eredmeny.re >> eredmeny.im;
    return eredmeny;
}

komplex sum(vector<komplex> szamok) {
    komplex eredmeny = {0, 0};
    for (unsigned i = 0; i < szamok.size(); i++) {
        eredmeny.re += szamok[i].re;
        eredmeny.im += szamok[i].im;
    }
    return eredmeny;
}

int main() {
        int pont=0;

        komplex k;
        k.re=0.0;
        k.im=1.0;
        if (k.re==0.0) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        komplex l;
        l.re=1.0;
        l.im=0.0;
        komplexpar p;
        p.egyik=k;
        p.masik=l;
        if (p.egyik.re==0.0 && p.masik.im==0.0) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        int a1 = fele(6);
        int a2 = fele(8);
        if (a1==3 && a2==4) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        bool a3 = elsobetuje("abc",'a');
        bool a4 = elsobetuje("abc",'b');
        if (a3==true && a4==false) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        komplexpar p1,p2;
        p1.egyik.re=1.0;
        p1.egyik.im=0.0;
        p1.masik.re=-1.0;
        p1.masik.im=0.0;
        p2.egyik.re=3.0;
        p2.egyik.im=0.0;
        p2.masik.re=0.0;
        p2.masik.im=-4.0;
        //a tav() fuggveny euklideszi tavolsagot szamol a komplex szamsikon
        if (tav(p1)==2.0 && tav(p2)==5.0) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        ofstream ki("__zhfile.txt");
        ki << fixed << setprecision(1); //ez a sor csak azert kell, hogy a szamok "1" helyett "1.0" alakban keruljenek a fajlba: innentol fix abrazolas van 1 tizedessel
        kiment(ki,p2.egyik);
        ki.close();
        ifstream be1("__zhfile.txt");
        string sor;
        getline(be1,sor);
        be1.close();
        if (sor=="3.0 0.0") ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        komplex p3;
        ifstream be2("__zhfile.txt");
        p3=betolt(be2);
        if (p3.re==3.0 && p3.im==0.0) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        vector<komplex> v(10);
        for (int i=0;i<v.size();i++) {
                v[i].re=i;
                v[i].im=1;
        }
        komplex s = sum(v);
        if (s.re==45.0 && s.im==10.0) ++pont; else cout << "A feltetel a "<<__LINE__<<" sorban nem teljesul"<<endl;

        cout <<endl << pont << "/8 pont" << endl;
        if (pont==8) cout << "Megvan a beugro!" << endl;
}
