﻿#include <iostream>
#include <fstream>
#include <cstdlib>


using namespace std;

struct egyaminosav{

    string rovidnev, jele;
    int c, h, o, n, s;


}aminosav[50];

int molekulatomeg(egyaminosav aminosav) {
///molekulatömeget adja vissza, 2. feladathoz
    return aminosav.c*12 + aminosav.h*1 + aminosav.o*16 + aminosav.n*14 + aminosav.s*32;

}
int main()
{
    setlocale(LC_ALL, "hun");
    ///1. feladat
    ifstream be;
    be.open("aminosav.txt");
    if(be.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }

    int i=0;
    while(be >> aminosav[i].rovidnev >> aminosav[i].jele >> aminosav[i].c >> aminosav[i].h >> aminosav[i].o >> aminosav[i].n >> aminosav[i].s) {

       i++;
    }
    int db=i;
    be.close();
    ///a szén atomtömege 12, a hidrogéné 1, az oxigéné 16, a nitrogéné 14 és a kén atomtömege 32

    for(i=0; i<db-1; i++) {

        for(int j=i+1; j<db; j++) {

        if(molekulatomeg(aminosav[i]) > molekulatomeg(aminosav[j])) {
            egyaminosav csere = aminosav[i];
            aminosav[i] = aminosav[j];
            aminosav[j] = csere;
           }
        }

    }

    ///2. feladat
    ofstream ki;
    ki.open("eredmeny.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }
    cout << "3. feladat" << endl;
    ki << "3. feladat" << endl;
    for(i=0; i<db; i++) {

        cout << aminosav[i].rovidnev << " " << molekulatomeg(aminosav[i]) << endl;
        ki << aminosav[i].rovidnev << " " << molekulatomeg(aminosav[i]) << endl;

    }

    ///4. feladat
    ifstream be2;
    be2.open("bsa.txt");
    if(be2.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }

    string jel;
    string BSA[1000];
    int k=0;
    int C=0, H=0, O=0, N=0, S=0;
    while(be2 >> jel) {

        for(i=0; i<db; i++) {

            if(aminosav[i].jele==jel) {
                C+=aminosav[i].c;
                H+=aminosav[i].h;
                O+=aminosav[i].o;
                N+=aminosav[i].n;
                S+=aminosav[i].s;
            }
        }
       BSA[k]=jel;
       k++;

    }
    be2.close();

    H-=2*k;  ///vízmolekula kilépése miatt H2o!
    O-=k;

    cout << "4. feladat" << endl;
    cout << "C " << C << " H " << H << " O " << O << " N " << N << " S " << S << endl;
    ki << "4. feladat" << endl;
    ki << " C " << C << " H " << H << " O " << O << " N " << N << " S " << S << endl;

    ///5. feladat

    int szamlalo=1;
    int index=1;
    int hossz=1;
    for(unsigned int i=0; i < sizeof(BSA)/sizeof(string); i++){

       // cout << BSA[i];
        if(BSA[i]=="Y" || BSA[i]=="T" || BSA[i]=="F") {

            if(szamlalo>hossz) {
            hossz=szamlalo;
            index=i;

            }
    szamlalo=1;

        }
    szamlalo++;
    }

    cout << "5. feladat" << endl;
    cout << "A BSA lánc leghosszabb darabja: " << hossz << " kezdet helye: " << index+2-hossz<< " végének helye: " << index << endl;
    ki << "5. feladat" << endl;
    ki << "A BSA lánc leghosszabb darabja: " << hossz << " kezdet helye: " << index+2-hossz<< " végének helye: " << index << endl;

    ///6. feladat

    bool hasit=false;
    i=0;
    C=0;
    while(!hasit && i!=sizeof(BSA)/sizeof(string)-1) {

        if(BSA[i]=="R" && (BSA[i+1]=="A" || BSA[i+1]=="V")) {

          hasit=true;

        }
         if(BSA[i]=="C") C++;
    i++;
    }
    cout << "6. feladat" << endl;
    cout << "Az elsõ fehérjelánc részletben " << C << " Ciszterin (C) található." << endl;
    ki << "6. feladat" << endl;
    ki << "Az elsõ fehérjelánc részletben " << C << " Ciszterin (C) található." << endl;
    ki.close();

    cin.get();
    return 0;
}
