C++ programozás – 2013 májusi emelt informatika érettségi – választások

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 jelolt
{
    int kerulet;
    int szavazatok;
    string nev;
    string part;
 
    string toString()
    {
        stringstream ss;
        ss << " " << kerulet << " " << szavazatok
        << " " << nev << " " << part << " " << endl;
        return ss.str();
    }
 
};
 
 
 
int main()
{
// 1. feladat
    ifstream input("szavazatok.txt");
 
    int meret = 0;
 
    string tmp;
    while( getline(input,tmp) )
    {
        meret++;
    }
 
    jelolt jeloltek[meret];
 
    input.clear();
    input.seekg(0);
 
    for( int i = 0; i < meret; i++ )
    {
        string vnev;
        string knev;
        input >> jeloltek[i].kerulet >> jeloltek[i].szavazatok >>
        vnev >> knev >> jeloltek[i].part;
 
        jeloltek[i].nev = vnev + " " + knev;
//        cout << jeloltek[i].toString();
    }
    input.close();
 
// 2. feladat
    cout << endl << "2. feladat" << endl;
    cout << "A helyhatosagi valasztason " << meret
      << " kepviselojelolt indult." << endl;
 
// 3. feladat
    cout << endl << "3. feladat" << endl;
    cout << "Add meg egy kepviselojelolt vezetek es utonevet: ";
    string nev;
    getline(cin, nev);
 
    bool van = false;
    for( int i = 0; i < meret; i++ )
    {
        if( jeloltek[i].nev == nev )
        {
            cout << "A jelolt " << jeloltek[i].szavazatok
              << " db szavazatot kapott." << endl;
            van = true;
            break;
        }
    }
 
    if( van == false )
    {
        cout << "Ilyen nevu kepviselojelolt nem szerepel a nyilvantartasban!" << endl;
    }
 
// 4. feladat
    cout << endl << "4. feladat" << endl;
    int osszes = 0;
    for( int i = 0; i < meret; i++ )
    {
        osszes += jeloltek[i].szavazatok;
    }
 
    cout.precision(4);
    cout << "A valasztason " << osszes << " allampolgar, a jogosultak " <<
         (osszes/(double)12345)*100 << "%-a vett reszt." << endl;
 
    cout << endl << "5.feladat" << endl;
 
    int fuggetlen = 0;
    int gyumolcsevo = 0;
    int husevo = 0;
    int tejivo = 0;
    int zoldsegevo = 0;
    for(int i = 0; i < meret; i++)
    {
        if(jeloltek[i].part == "-")
        {
            fuggetlen += jeloltek[i].szavazatok;
        }
        else if(jeloltek[i].part == "GYEP")
        {
            gyumolcsevo += jeloltek[i].szavazatok;
        }
        else if(jeloltek[i].part == "HEP")
        {
            husevo += jeloltek[i].szavazatok;
        }
        else if(jeloltek[i].part == "TISZ")
        {
            tejivo += jeloltek[i].szavazatok;
        }
        else
        {
            zoldsegevo += jeloltek[i].szavazatok;
        }
    }
 
    double atlag = 0;
    atlag = (double) fuggetlen/osszes*100;
    cout << "Fuggetlen jeloltek " << atlag << "%" << endl;
 
    atlag = (double) gyumolcsevo/osszes*100;
    cout << "Gyumolcsevok Partja " << atlag << "%" << endl;
 
    atlag = (double) husevo/osszes*100;
    cout << "Husevok Partja " << atlag << "%" << endl;
 
    atlag = (double) tejivo/osszes*100;
    cout << "Tejivok Szovetsege " << atlag << "%" << endl;
 
    atlag = (double) zoldsegevo/osszes*100;
    cout << "Zoldsegevok Partja " << atlag <<  "%" << endl;
 
 
    cout << endl << "6. feladat" << endl;
    int max = jeloltek[0].szavazatok;
    for(int i = 1; i < meret; i++)
    {
        if(jeloltek[i].szavazatok > max)
        {
            max = jeloltek[i].szavazatok;
        }
    }
 
    for(int i = 0; i < meret; i++)
    {
        if(jeloltek[i].szavazatok == max)
        {
            if(jeloltek[i].part == "-")
            {
                cout << jeloltek[i].nev << " fuggetlen" << endl;
            }
            else
            {
                cout << jeloltek[i].nev << " " << jeloltek[i].part << endl;
            }
        }
    }
 
// 7. feladat
    int nyertesek[9];
 
    for(int i = 0; i < 9; i++)
    {
        nyertesek[i] = -1;
    }
 
    for(int i = 0; i < meret; i++)
    {
        int kerulet = jeloltek[i].kerulet;
        if( nyertesek[kerulet] == -1
           || jeloltek[i].szavazatok > jeloltek[nyertesek[kerulet]].szavazatok)
        {
            nyertesek[kerulet] = i;
        }
    }
 
    ofstream ki("kepviselok.txt");
    for(int i = 1; i < 9; i++)
    {
        if(jeloltek[nyertesek[i]].part == "-")
        {
            ki << i << " " << jeloltek[nyertesek[i]].nev << " "
            << "fuggetlen" << endl;
        }
        else
        {
            ki << i << " " << jeloltek[nyertesek[i]].nev << " "
            << jeloltek[nyertesek[i]].part << endl;
        }
    }
    ki.close();
    return 0;
}

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

5 Replies to “C++ programozás – 2013 májusi emelt informatika érettségi – választások”

  1. Tetszik a kód, abszolút hasznos az érettségi felkészüléshez. Egy gondom van, Visual Studiot valasztottam IDEnek.
    jelolt jeloltek[meret];

    input.clear();
    input.seekg(0);
    Részt nem tudja értelmezni mert a paraméterben nem konstans van.
    Slusszpoén, a CodeBlocks simán lefutatja. Esetleg valami orvoslást tud erre?

    • A variadic length array C tömb típus egy C89 kiterjesztés, az MS VC++ kompájler nem támogatja. Helyette használjon std::vector változtatható méretű okos tömböt vagy std::unique_ptr fix méretű dinamikusan allokált tömböt, amelyek automatikusan lefuttatják a jelolt elemek destruktorát, és felszabadítják a dinamikusan lefoglalt memoriát.
      #include
      #include
      #include
      #include
      #include
      #include // std::vector
      #include // std::unique_ptr, std::make_unique

      using namespace std;

      struct jelolt
      {
      int kerulet;
      int szavazatok;
      string nev;
      string part;

      explicit jelolt(int ker, int szav, string n, string p) : kerulet{ker}, szavazatok{szav},
      nev{std::move(n)}, part{std::move(p)} { }

      string toString() const
      {
      ostringstream oss;
      oss << " " << kerulet << " " << szavazatok
      << " " << nev << " " << part << " " << endl;
      return oss.str();
      }

      };

      int main() {
      // 1. feladat
      ifstream input("szavazatok.txt");

      size_t meret{};
      for (string tmp; getline(input,tmp); )
      {
      ++meret;
      }

      vector jeloltek; // vagy
      jeloltek.reserve(meret);
      // auto jeloltek = make_unique(meret);
      // …
      input.clear();
      input.seekg(0);

      for( size_t i{}; i >ker >> szav >> vnev >> knev >> part;
      string nev{vnev + ” ” + knev};
      jeloltek.emplace_back(ker, szav, std::move(nev), std::move(part));
      // cout << jeloltek.back().toString();
      }

      // input.close();

    • Igen, ez nem is vita tárgya, valóban használhatnék angol változóneveket, de szeretném más megvilágításba helyezni, hogy miért ilyenek a C++ tananyagaim és megoldásaim.

      A teljes C++ tananyag létrehozása kizárólag egyetlen célt szolgált. Egy számomra új iskolában az első tanévemben ezen a nyelven kellett teljesen kezdőket emelt informatika érettségire felkészítenem. A döntés nem az enyém volt, hogy C++ nyelven kell teljesen kezdőket – akár olyanokat is, akik angolul se tudnak – programozni tanítani. A C++ nyelv használata, mint első programozási nyelv középiskolai diákok számára, véleményem szerint szakmai hiba. A C++ tananyagaimat csak és kizárólag kényszerből készítettem el az akkori diákjaim számára nagyjából 8 hónap alatt, mert akkoriban nem állt rendelkezésére megfelelő tematika szerint felépített, magyarul is elérhető tananyag, ami az alapoktól végigvezette volna őket azokon a típusfeladatokon, alap algoritmusokon és fájlkezelési típusfeladatokon át, amelyek egy emelt informatika érettségi programozás feladatának megoldásához szükségesek.

      A C++ tananyagaim algoritmusai és megoldásai úgy gondolom megállják a helyüket, és az érettségire abban a tanévben teljesen megfelelőek voltak. Nem volt más cél, nem C++ programozókat kívántam felkészíteni a szoftverfejlesztői pályára.

      Ez a C++ jegyzet elsősorban azoknak szól, akik most ismerkednek a programozással és valami miatt a tanáruk/oktatójuk úgy gondolta, hogy ez a nyelv megfelelő az ő érettségire való felkészítésükre. Akiknek 90-120 tanórája van felkészülni egy programozás érettségire (akár a nulláról), mert több ideje sokaknak nem igazán van/volt iskolai keretek között. Örülök, ha az alap algoritmusokig és a fájlkezelésig eljutnak és elsajátítanak bizonyos szintű algoritmizálási képességet.

      Később, ha már biztosan mozog a témában, esetleg tovább akar lépni ezen a vonalon, akkor behúzza majd a jó gyakorlatokat, nyelvfüggő és nyelvfüggetlen elveket, stb. Ez a háttere, miért ilyen ez a teljes C++ szekció az oldalamon.

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

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.