C++ programozás – 2010 május emelt informatika érettségi – Helyjegy

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;

int kerekit(int ar)
{
    int marad;
    marad = ar % 10;
    if( marad == 1 || marad == 6 )
    {
        ar = ar-1;
    }
    else if( marad == 2 || marad == 7 )
    {
        ar = ar-2;
    }
    else if( marad == 3 || marad == 8 )
    {
        ar = ar+2;
    }
    else if( marad == 4 || marad == 9 )
    {
        ar = ar+1;
    }
    return ar;
}


class jegy
{
public:
    int hely;
    int kezd;
    int veg;
    int sorszam;
    int tav;
    int ar;

    string toString()
    {
        stringstream ss;
        ss << hely << " " << kezd << " " << veg << " " << sorszam <<
           " " << tav << " " << ar << endl;
        return ss.str();
    }
};

int main()
{
// 1. feladat
    ifstream input("eladott.txt");
    int meret;
    int hossz;
    int ar10;

    input >> meret >> hossz >> ar10;

    jegy jegyek[meret];

    for( int i = 0; i < meret; i++ )
    {
        input >> jegyek[i].hely >> jegyek[i].kezd >> jegyek[i].veg;
        jegyek[i].sorszam = i+1;
        jegyek[i].tav = jegyek[i].veg - jegyek[i].kezd;
//        cout << jegyek[i].toString() << endl;
    }
    input.close();

// 2. feladat
    cout << endl << "2. feladat" << endl;
    cout << jegyek[meret-1].hely << " " << jegyek[meret-1].tav << endl;

// 3. feladat
    cout << endl << "3. feladat" << endl;
    for( int i = 0; i < meret; i++ )
    {
        if( jegyek[i].tav == hossz )
        {
            cout << jegyek[i].sorszam << " ";
        }
    }
    cout << endl;

// 4. feladat
    cout << endl << "4. feladat" << endl;
    int ar;
    int km10;
    int osszeg = 0;
    for( int i = 0; i < meret; i++ )
    {
        km10 = jegyek[i].tav/10;
        if( jegyek[i].tav % 10 > 0 )
        {
            km10++;
        }
        ar = kerekit(km10*ar10);
        jegyek[i].ar = ar;

        osszeg += jegyek[i].ar;
    }

    cout << "A tarsasag jegybevetele: " << osszeg << " Ft" << endl;

// 5. feladat
    cout << endl << "5. feladat" << endl;
    int max = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( jegyek[i].kezd > max )
        {
            max = jegyek[i].kezd;
        }
        if( jegyek[i].veg > max && jegyek[i].veg != hossz )
        {
            max = jegyek[i].veg;
        }
    }
    cout << max << endl;

    int le = 0;
    int fel = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( jegyek[i].kezd == max  )
        {
            fel++;
        }

        if( jegyek[i].veg == max  )
        {
            le++;
        }
    }
    cout << "fel: " << fel << " le: " << le << endl;

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

    int tomb2[hossz+1];

    for( int i = 0; i < hossz+1; i++ )
    {
        tomb2[i] = 0;
    }

    for( int i = 0; i < meret; i++ )
    {
        tomb2[jegyek[i].kezd]++;
        tomb2[jegyek[i].veg]++;
    }

    int db = 0;
    for( int i = 0; i < hossz+1; i++ )
    {
        if( tomb2[i] > 0 )
        {
            db++;
        }
    }
    cout << db << endl;

// 7. feladat
    cout << endl << "7. feladat" << endl;
    cout << "Adja meg, az ut melyik kilometeren keri az utaslistat! ";
    int km;
    cin >> km;

    int ulesek[49] = {0};


    for( int i = 0; i < meret; i++ )
    {
        if( jegyek[i].kezd <= km && jegyek[i].veg > km)
        {
            ulesek[jegyek[i].hely] = jegyek[i].sorszam;
        }
    }

    ofstream output("kihol.txt");
    for( int i = 1; i < 49; i++ )
    {
        if( ulesek[i] == 0 )
        {
            output << i << ". ules: ures" << endl;
        }
        else
        {
            output << i << ". ules: " << ulesek[i] << ". utas" << 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 .