C++ programozás – 2009 május emelt informatika érettségi – Lift

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>
#include <cstdlib>
#include <ctime>

using namespace std;

class igeny
{
public:
    int ora;
    int perc;
    int mperc;
    int csapat;
    int honnan;
    int hova;

    string toString()
    {
        stringstream ss;
        ss << "Ora: " << ora << ", perc: " << perc <<
           ", mperc: " << mperc << ", csapat: " <<
           csapat << ", honnan: " << honnan <<
           ", hova: " << hova << endl;
        return ss.str();
    }
};


int main()
{
// 1. feladat
    ifstream input("igeny.txt");
    int maxszint;
    int csapatszam;
    int meret;
    input >> maxszint;
    input >> csapatszam;
    input >> meret;

    igeny igenyek[meret];

    for( int i = 0; i < meret; i++ )
    {
        input >> igenyek[i].ora >> igenyek[i].perc >> igenyek[i].mperc >>
              igenyek[i].csapat >> igenyek[i].honnan >> igenyek[i].hova;

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

// 2. feladat
    cout << endl << "2. feladat" << endl;
    cout << "Kerem a lift indulasi helyet! ";
    int start;
    cin >> start;

// 3. feladat
    cout << endl << "3. feladat" << endl;
    cout << "A lift a " << igenyek[meret-1].hova <<
            " szinten all az utolso igeny teljesitese "
            "utan." << endl;

// 4. feladat
    cout << endl << "4. feladat" << endl;
    int min = start;
    int max = start;

    for( int i = 0; i < meret; i++ )
    {
        if( igenyek[i].honnan < min )
        {
            min = igenyek[i].honnan;
        }
        if( igenyek[i].hova < min )
        {
            min = igenyek[i].hova;
        }
        if( igenyek[i].honnan > max )
        {
            max = igenyek[i].honnan;
        }
        if( igenyek[i].hova > max )
        {
            max = igenyek[i].hova;
        }
    }
    cout << "A legalacsonyabb erintett emelet: " << min <<
            endl << "A legmagasabb erintett emelet: "<< max << endl;

// 5. feladat
    cout << endl << "5. feladat" << endl;
    int utassal = 0;
    int nelkul = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( igenyek[i].honnan < igenyek[i].hova )
        {
            utassal++;
        }
    }
    cout << "Utassal " << utassal << " alkalommal kellett "
            "felfele indulni a liftnek" << endl;

    for( int i = 1; i < meret; i++ )
    {
        if( igenyek[i].honnan > igenyek[i-1].hova )
        {
            nelkul++;
        }
    }
// ha a kezdo pozicio alacsonyabban van, mint az elso igeny
// kezdo emelete, akkor is utas nelkul haladt
    if( start < igenyek[0].honnan )
    {
        nelkul++;
    }
    cout << "Utas nelkul " << nelkul << " alkalommal "
            "kellett felfele indulni a liftnek" << endl;

// 6. feladat
    cout << endl << "6. feladat" << endl;
    int csapatdb[csapatszam+1] = {0};

    for( int i = 0; i < meret; i++ )
    {
        csapatdb[igenyek[i].csapat]++;
    }

    for( int i = 1; i < csapatszam+1; i++ )
    {
        if( csapatdb[i] == 0 )
        {
            cout << i << " ";
        }
    }
    cout << endl;


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

    srand(time(0));
// [1;csapatszam] intervallum
    int vetcsapat = rand() % csapatszam + 1;

//    cout << "vetcsapat: " << vetcsapat << endl;

    int vetdb = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( igenyek[i].csapat == vetcsapat )
        {
            vetdb++;
        }
    }

    igeny vetigenyek[vetdb];

    int hely = 0;
    for( int i = 0; i < meret; i++ )
    {
        if( igenyek[i].csapat == vetcsapat )
        {
            vetigenyek[hely] = igenyek[i];
            cout << vetigenyek[hely].toString();
            hely++;
        }
    }

    bool vetett = false;
    for( int i = 1; i < vetdb; i++ )
    {
        if( vetigenyek[i].honnan != vetigenyek[i-1].hova )
        {
            vetett = true;
            cout << vetigenyek[i-1].hova << " - " <<
                 vetigenyek[i].honnan << endl;
        }
    }

    if( !vetett )
    {
        cout << "Nem bizonyithato szabalytalansag." << endl;
    }

// 8. feladat
    cout << endl << "8. feladat" << endl;
    stringstream ss;
    int fkod;
    string s;
    for( int i = 0; i < vetdb; i++ )
    {
        ss << "Befejezes ideje: " << vetigenyek[i].ora <<
              ":" << vetigenyek[i].perc << ":" <<
              vetigenyek[i].mperc << endl;

        ss << "Sikeresseg: ";
        cout << "Sikeres volt a feladat (i/n): ";
        cin >> s;
        if( s == "i" )
        {
            ss << "befejezett";
        }
        else
        {
            ss << "befejezetlen";
        }
        ss << endl << "-----" << endl;
        ss << "Indulasi emelet: " << vetigenyek[i].honnan << endl;
        ss << "Celemelet: " << vetigenyek[i].hova << endl;
        ss << "Feladatkod: ";
        cout << "Kerem a feladatkodot: ";
        cin >> fkod;
        ss << fkod << endl;
    }

//    cout << ss.str();

    ofstream output("blokkol.txt");
    output << ss.str();

    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 .