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.