C++ programozás – 2007 októberi emelt informatika érettségi – Foci

A feladat leírását, melynek a megoldását közzéteszem, innen töltheted le.

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

using namespace std;

struct meccs
{
    int fordulo;
    int hgol;
    int vgol;
    int hfgol;
    int vfgol;
    string hazai;
    string vendeg;

    string eredmeny()
    {
        stringstream ss;
        if( hgol > vgol )
        {
            ss << hgol << "-" << vgol;
        }
        else
        {
            ss << vgol << "-" << hgol;
        }
        return ss.str();
    }

    bool hazai_kikapott()
    {
        return vgol > hgol;
    }

    string forditott()
    {
        if( hgol > vgol && hfgol < vfgol )
        {
            return hazai;
        }
        else if( vgol > hgol && vfgol < hfgol )
        {
            return vendeg;
        }
        else
        {
            return "-";
        }
    }

    string toString()
    {
        stringstream ss;
        ss << fordulo << " " << hgol << " " << vgol <<
           " " << hfgol << " " << vfgol << " " <<
           hazai << " " << vendeg << endl;
        return ss.str();
    }
};

int main()
{
    // 1. feladat
    cout << endl << "1. feladat" << endl;
    ifstream input("meccs.txt");
    int meret;
    input >> meret;
    meccs meccsek[meret];
    for( int i = 0; i < meret; i++ )
    {
        input >> meccsek[i].fordulo >> meccsek[i].hgol >>
                 meccsek[i].vgol >> meccsek[i].hfgol >>
                 meccsek[i].vfgol >> meccsek[i].hazai >>
                 meccsek[i].vendeg;

        cout << meccsek[i].toString();
    }
    input.close();

    // 2. feladat
    cout << endl << "2. feladat" << endl;
    int fordulo;
    cout << "Adja meg a fordulo szamat: ";
    cin >> fordulo;

    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].fordulo == fordulo )
        {
            cout << meccsek[i].hazai << "-" <<
                    meccsek[i].vendeg << ": " <<
                    meccsek[i].hgol << "-" <<
                    meccsek[i].vgol << " (" <<
                    meccsek[i].hfgol << "-" <<
                    meccsek[i].vfgol << ")" << endl;
        }
    }

    // 3. feladat
    cout << endl << "3. feladat" << endl;
    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].forditott() != "-" )
        {
            cout << meccsek[i].fordulo << " " <<
                 meccsek[i].forditott() << endl;
        }
    }

    // 4. feladat
    cout << endl << "4. feladat" << endl;
    string csapat;
    cout << "Adjon meg egy csapatnevet: ";
    cin >> csapat;

    // 5. feladat
    cout << endl << "5. feladat" << endl;
    int lott = 0;
    int kapott = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].hazai == csapat )
        {
            lott += meccsek[i].hgol;
            kapott += meccsek[i].vgol;
        }
        else if( meccsek[i].vendeg == csapat )
        {
            lott += meccsek[i].vgol;
            kapott += meccsek[i].hgol;
        }
    }

    cout << "lott: " << lott << " kapott: " << kapott << endl;

    // 6. feladat
    cout << endl << "6. feladat" << endl;

    // 1. megoldas
    // kivalogatjuk azokat a meccseket,
    // ahol a hazai csapat kikapott
    int db = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].hazai == csapat &&
            meccsek[i].hazai_kikapott() )
        {
            db++;
        }
    }
    meccs hazaikikapott[db];
    db = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].hazai == csapat &&
            meccsek[i].hazai_kikapott() )
        {
            hazaikikapott[db] = meccsek[i];
            db++;
        }
    }

// megnezzuk, hogy a 21 fordulotol van-e kisebb
// (21-es fordulo nem letezhet, tehat ha van kisebb,
// akkor kikapott otthon)
    int min = 21;
    for( int i = 0; i < db; i++ )
    {
        if( hazaikikapott[i].fordulo < min )
        {
            min = hazaikikapott[i].fordulo;
        }
    }

    if( min == 21 )
    {
        cout << "A csapat otthon veretlen maradt." << endl;
    }
    else
    {
        cout << "A csapat eloszor a " << min <<
        " forduloban kapott ki eloszor otthon." << endl;
    }


    // 2. megoldas
    // 21-es fordulo nincs, igy ha attol kisebbet talalunk,
    // akkor kikapott
    int fordulomin = 21;
    for( int i = 0; i < meret; i++ )
    {
        if( meccsek[i].hazai == csapat &&
            meccsek[i].hazai_kikapott() &&
            meccsek[i].fordulo < fordulomin )
        {
            fordulomin = meccsek[i].fordulo;
        }
    }

    if( fordulomin == 21 )
    {
        cout << "A csapat otthon veretlen maradt." << endl;
    }
    else
    {
        cout << "A csapat eloszor a " << fordulomin <<
        " forduloban kapott ki eloszor otthon." << endl;
    }


    // 7. feladat
    cout << endl << "7. feladat" << endl;
    string eredmenyek[100];
    int erdarab[100] = {0};

    db = 0;
    for( int i = 0; i < meret; i++ )
    {
        int hely = 0;
        while( hely < db &&
               eredmenyek[hely] != meccsek[i].eredmeny() )
        {
            hely++;
        }

        if( hely == db )
        {
            eredmenyek[db] = meccsek[i].eredmeny();
            db++;
        }
        erdarab[hely]++;
    }

    // nem feladat, de az eredmenyeket meg az eredmeny
    // tipusa szerint sorba is lehetne rendezni

    for( int i = 0; i < db-1; i++ )
    {
        for( int j = i+1; j < db; j++ )
        {
            if( eredmenyek[i] > eredmenyek[j] )
            {
                swap(eredmenyek[i], eredmenyek[j] );
                swap(erdarab[i], erdarab[j] );
            }
        }
    }

    ofstream output("stat.txt");

    for( int i = 0; i < db; i++ )
    {
        output << eredmenyek[i] << ": " << erdarab[i] <<
               " darab" << endl;
    }


    return 0;
}

One Reply to “C++ programozás – 2007 októberi emelt informatika érettségi – Foci”

  1. Kedves Csaba!
    A 6. feladatban azt is meg kell adni, hogy melyik csapat verte meg a hazai csapatot. Ez hiányzik a megoldásodból.
    A feladathoz adott 2. megoldásod 197-es sora után be lehetne szúrni egy string-változót, amelyben tárolhatod a nyertes csapat nevét.
    Nem kötekedni akartam, csak észrevettem.
    Üdv
    Kriszta

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 .