C++ programozás – 2006 május emelt informatika érettségi – Fehérje

A feladat leírását, melynek a megoldását közzéteszem, innen töltheted le. Az innen letölthető tömörített állományokban megtalálod a Code::Blocks-ban megnyitható projectet, és a feladat a forrásait. A kicsomagoláshoz a 7zip nevű ingyenes programot javaslom.

A feladat megoldása az esetleges központi megoldások logikájától eltérhet. Véleményem szerint nem a trükkös megoldások azok, amelyeket hamarabb kitalál az ember, hanem a több lépésben, de elemi algoritmusok használatával készített megoldás az, amely sok esetben sokkal hamarabb elkészül.

Jöjjön akkor a forráskód:

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

struct feherje
{
    string rovid;
    string betu;
    int c;
    int h;
    int o;
    int n;
    int s;
    int mtomeg;

    string toString()
    {
        stringstream ss;
        ss << rovid << " " << betu << " " << c << " " << h <<
           " " << o << " " << n << " " << s << " " << mtomeg << endl;
        return ss.str();
    }
};

feherje keres( string betu, feherje feherjek[], int meret )
{
    for( int i = 0; i < meret; i++ )
    {
        if( feherjek[i].betu == betu )
        {
            return feherjek[i];
        }
    }
    return feherjek[0];
}

int main()
{
// 1. feladat
    int meret = 0;
    ifstream input("aminosav.txt");
    string sor;

    while( getline(input,sor) )
    {
        meret++;
    }
    meret /= 7;
    feherje feherjek[meret];
    input.clear();
    input.seekg(0);

    for( int i = 0; i < meret; i++ )
    {
        input >> feherjek[i].rovid;
        input >> feherjek[i].betu;
        input >> feherjek[i].c;
        input >> feherjek[i].h;
        input >> feherjek[i].o;
        input >> feherjek[i].n;
        input >> feherjek[i].s;
// 2. feladat
        feherjek[i].mtomeg = feherjek[i].c * 12
                           + feherjek[i].h
                           + feherjek[i].o * 16
                           + feherjek[i].n * 14
                           + feherjek[i].s * 32;
    }
    input.close();

/*
    for( int i = 0; i < meret; i++ )
    {
        cout << feherjek[i].toString();
    }
*/
// 3. feladat
    for( int i = 0; i < meret-1; i++ )
    {
        for( int j = i+1; j < meret; j++ )
        {
            if( feherjek[i].mtomeg > feherjek[j].mtomeg )
            {
                feherje csere = feherjek[i];
                feherjek[i] = feherjek[j];
                feherjek[j] = csere;
            }
        }
    }

    ofstream output("eredmeny.txt");
    output << "3. feladat" << endl;
    for( int i = 0; i < meret; i++ )
    {
        output << feherjek[i].rovid << " " << feherjek[i].mtomeg << endl;
    }

// 4. feladat
    int mdarab[5] = {0};
    ifstream input2("bsa.txt");
    string s;
    int kapcs = -1;
    stringstream bsalanc;
    while( getline(input2, s) )
    {
        bsalanc << s;
        feherje f = keres(s,feherjek, meret);
        mdarab[0] += f.c;
        mdarab[1] += f.h;
        mdarab[2] += f.o;
        mdarab[3] += f.n;
        mdarab[4] += f.s;
        kapcs++;
    }

    mdarab[1] -= kapcs*2;
    mdarab[2] -= kapcs;

    output << endl << "4. feladat" << endl;
    output << "C " << mdarab[0] << " H " << mdarab[1] << " O " << mdarab[2] <<
         " N " << mdarab[3] << " S " << mdarab[4];

    cout << endl << "4. feladat" << endl;
    cout << "C " << mdarab[0] << " H " << mdarab[1] << " O " << mdarab[2] <<
         " N " << mdarab[3] << " S " << mdarab[4] << endl;

// 5. feladat
    cout << endl << "5. feladat" << endl;
    int toresdb = 0;
    string bsa = bsalanc.str();
    int hossz = bsa.length();
    for( int i = 0; i < hossz; i++ )
    {
        if( bsa[i] == 'Y' || bsa[i] == 'W' || bsa[i] == 'F' )
        {
            toresdb++;
        }
    }
    toresdb++;
    string lancok[toresdb];

    int hely = 0;
    int elozo = 0;
    for( int i = 0; i < hossz; i++ )
    {
        if( bsa[i] == 'Y' || bsa[i] == 'W' || bsa[i] == 'F' )
        {
            lancok[hely] = bsa.substr(elozo,i-elozo+1);
            elozo = i+1;
            hely++;
        }
    }

    int max = 0;
    for( int i = 1; i < toresdb; i++ )
    {
        if( lancok[i].length() > lancok[max].length() )
        {
            max = i;
        }
    }
    int kezdet = 0;
    for( int i = 0; i < max; i++ )
    {
        kezdet += lancok[i].length();
    }

    cout << "hossza: " << lancok[max].length() << " kezdet helye: " <<
         kezdet << " lanc vege: " << kezdet+lancok[max].length() << endl;

// 6. feladat
    cout << endl << "6. feladat" << endl;
    string elso;
    int elsohossz;
    for( int i = 0; i < hossz-1; i++ )
    {
        if( bsa[i] == 'R' && ( bsa[i+1] == 'A' || bsa[i+1] == 'V' ) )
        {
            elso = bsa.substr(0,i+1);
            elsohossz = i+1;
            break;
        }
    }

    int dbc = 0;
    for( int i = 0; i < elsohossz; i++ )
    {
        if( elso[i] == 'C' )
        {
            dbc++;
        }
    }
    cout << "A Factor XI enzim altal hasitott elso darabban " << dbc <<
         " darab Cisztein talalhato." << endl;

    return 0;
}

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .