C++ programozás – 2012 májusi emelt informatika érettségi – futár

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;

// adattároló osztály
class futar
{
public:
    int nap;
    int sorszam;
    int km;
    int penz;

    string toString()
    {
        stringstream ss;
        ss << nap << " " << sorszam << " "
        << km<< " " << penz << endl;
        return ss.str();
    }
};

// mennyi km mennyi pénzt jelent
int getpenz( int km )
{
    int penz = 0;
    if( km <= 2 )
    {
        penz = 500;
    }
    else if( km <= 5 )
    {
        penz = 700;
    }
    else if( km <= 10 )
    {
        penz = 900;
    }
    else if( km <= 20 )
    {
        penz = 1400;
    }
    else if( km <= 30 )
    {
        penz = 2000;
    }
// nincs else ág, nem megfelelő értékek esetén 0 lesz.
    return penz;
}

int main()
{
    ifstream input("tavok.txt");
    int meret = 0;
    string sor;
// sorok megszámolása
    while( getline(input,sor) )
    {
        meret++;
    }

    futar fuvarok[meret];

// fájl elejére visszaállás
    input.clear();
    input.seekg(0);

// beolvasás
    for( int i = 0; i < meret; i++ )
    {
        input >> fuvarok[i].nap >> fuvarok[i].sorszam >> fuvarok[i].km;
// a pénz változót később vezettem be, de utólag a beolvasáskor beállítok
// egy nem valódi értéket
        fuvarok[i].penz = -1;
    }

// rendezés
    for( int i = 0; i < meret-1; i++ )
    {
        for( int j = i+1; j < meret; j++ )
        {
            futar csere;
            if( fuvarok[i].nap > fuvarok[j].nap
               || (fuvarok[i].nap == fuvarok[j].nap
                   && fuvarok[i].sorszam > fuvarok[j].sorszam) )
            {
                csere = fuvarok[i];
                fuvarok[i] = fuvarok[j];
                fuvarok[j] = csere;
            }
        }
    }

// rendezett tömb kiírása
// az utolsó elemnek még nincs értéke
    for( int i = 0; i < meret; i++ )
    {
        cout << fuvarok[i].toString();
    }
    cout << endl;

    // 2. feladat
    cout << endl << "2. feladat" << endl;
    cout << fuvarok[0].km << endl;

    // 3. feladat
    cout << endl << "3. feladat" << endl;
    cout << fuvarok[meret-1].km << endl;

    // 4. feladat
    cout << endl << "4. feladat" << endl;
// egy 8 elemú tömb, ahol az egyes napok
// fuvarjainak darabszámát gyűjtöm
// a tömb indexei a napok
// a tömböt először nullázzuk
    int darabszam[8] = {0};

// többszörös megszámlálás
    for( int i = 0; i < meret; i++ )
    {
// az adott napnak megfelelő indexű elemeket megnöveljük
// ezzel megszámoljuk, melyik nap hány fuvar volt
        darabszam[fuvarok[i].nap]++;
    }

//az első nap adatait nem írom ki, 0. nap nincs
    for( int i = 1; i <= 7; i++ )
    {
        if( darabszam[i] == 0 )
        {
            cout << i << endl;
        }
    }

    // 5. feladat
    cout << endl << "5. feladat" << endl;
// maximumkeresés a napi darabszámok tömbben
    int max = 1;
// azért 2-től indulok, mert 0. nap nincs, és először
// a hétfőt (1) tekintjük a legnagyobbnak, írd a
// 2-es naptól (kedd) kell indulni
    for( int i = 2; i <= 7; i++ )
    {
        if( darabszam[i] > darabszam[max] )
        {
            max = i;
        }
    }
    cout << max << endl;

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

// többszörös összeadás tömbje (1-8),
// ahol az indexek a napot jelentik,
// és a tömböt nullázzuk
    int napikm[8] = {0};

// végigmegyünk az utak adatain
    for( int i = 0; i < meret; i++ )
    {
// a napikm tömb megfelelő indexű elemeihez összeadjuk
// az adott nap km adatait
        napikm[fuvarok[i].nap] += fuvarok[i].km;
    }

// a megfelelő napok (1-7) adatainak kiírása
    for( int i = 1; i <= 7; i++ )
    {
        cout << i << ". nap: " << napikm[i] << " km" << endl;
    }

    // 7. feladat
    cout << endl << "7. feladat" << endl;
    int km;
    cout << "Irj be egy tavolsagot: ";
    cin >> km;

    cout << getpenz(km) << endl;

    // 8. feladat
// eltároljuk, melyik út mennyi pénzt hozott (segédfüggvény)
    for( int i = 0; i < meret; i++ )
    {
        fuvarok[i].penz = getpenz(fuvarok[i].km);
    }

// kiírás fájlba
    ofstream output("dijazas.txt");
    for( int i = 0; i < meret; i++ )
    {
        output << fuvarok[i].nap << ". nap "
        << fuvarok[i].sorszam << ". ut: "
        << fuvarok[i].penz << " Ft" << endl;
    }
    output.close();

    // 9. feladat
    cout << endl << "9. feladat" << endl;
// összbevétel kiszámítása
    int szum = 0;
    for( int i = 0; i < meret; i++ )
    {
        szum += fuvarok[i].penz;
    }
    cout << szum << endl;

    return 0;
}

Ha hibát találsz benne, kérlek jelezd!

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 .