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!
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?
Ebben sajnos nem tudok segíteni, én CodeBlocks-szal dolgoztam csak.
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();
Szerintem alapvetően nem jo hogy magyar valtozoneveket hasznalni
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.