Kezdőoldal » Számítástechnika » Programozás » Hogyan tudom az egyik adat...

Hogyan tudom az egyik adat alapján kiválasztani a másik adatot? (c++) Bővebben lent.

Figyelt kérdés

Nemrég kezdtem el tanulni C++-t, és itt nagyon elakadtam. Röviden vázolom: van egy txt fájl, ami tartalmaz 5 különböző adatot, valahogy így:

20 15 Vezetéknév Keresztnév Lakhely

és ugy ez így megy sok sok soron keresztül, nyilván minden adat más.

Ki akarom íratni annak az embernek a vezeték és keresztnevét, akinek a 15-ös szám helyén a legnagyobb van az összes közül. Addig jutottam, hogy ki tudom keresni a legnagyobb számot.


int hatodik_feladat(){

cout<<"\nHatodik feladat:"<<endl;

int kor;

int szav;

string veznev;

string kernev;

string lakhely;

int szavaz[40];

int x=0;

int maxvalue=0;

ifstream lista("szavazatok.txt");


for(x=0;x<=40;x++){

lista>>kor>>szav>>veznev>>kernev>>lakhely;

szavaz[x]=szav;

if (szavaz[x]>=maxvalue){

maxvalue=szavaz[x];

}


}


cout<<maxvalue;


}



2015. jan. 24. 17:56
 1/2 anonim ***** válasza:

A maximumkiválasztáskor ne (csak) a max értéket tárold el, hanem mondjuk annak helyét is a fájlban (pl. sorszám).


Egy következő ciklussal mássz el addig a sorig a fájlban, és írd ki az adatait.

2015. jan. 24. 18:24
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:

Itt ne maxvalue-t tárolj hanem maxindex-et:


if (szavaz[x]>=maxvalue){

maxvalue=szavaz[x];

}


helyett


if (szavaz[x]>=szavaz[maxindex]){

maxindex=x;

}


és a végén a szavaz[maxindex]-ben lesz a legnagyobb szám és ezzel az indexel a többi adatot is ki tudod olvasni.

Figyelj arra hogy a tömböd 40 elemű és te 0-tól 40-ig akarsz beolvasni 41 elemet. Ebből hiba lesz.


Jó gyakorlat ha szétbontod amúgy a programodat pl. így:


//adatstruktúra a beolvasott személyeknek

struct Persons {

int kor, szavazat;

string veznev,kernev,lakhely;

};


//fajl beolvasasa fajlnevből egy Persons struktúrába

//A true-t ad vissza helyes bolvasás esetén, false-t ha nem lehet megnyitni a fájlt

bool beolvas(char* fajlnev, Persons* p) {

ifstream lista(fajlnev);

if(!list.is_open()) return false;

for(x=0;x<40;x++)

lista>>p[x].kor>>p[x].szav>>p[x].veznev>>p[x].kernev>>p[x].lakhely;

return true;

}


//Vissza adja a legtöbb szavazatot kapó személyt

Persons getMaxSzavazat(Persons* p) {

Persons nyertes = p[0];

for(int i=1;i<40;i++){

if(nyertes.szav<p[i].szav)

nyertes=p[i];

}

return nyertes;

}


//A fő függvényed

void hatodik_feladat() {

Persons szavazatok[40]

if(!beolvas("szavazatok.txt", szavazatok)) {

cout<<"Nem sikerült beolvasni a fájlt!!"<<endl;

exit(1);

}

Persons nyertes = getMaxSzavazat(szavazatok);

cout<<"A legtöbb szavazatot kapta: "<<nyertes.veznev<<" "<<nyertes.kernev<<endl;

}


(lehetnek benne elírások, nem teszteltem, csak demonstráció)


Ezután jöhet a következő lépés: tömb használata helyett collections vagy dinamikus memóriakezelés. Nem adod meg hogy 40 sor van a fájlban, egyszerűen addig olvasod a fájlt amíg vannak benne elemek és ezt mindig hozzáadod a dinamikus tömbödhöz vagy listádhoz. (lásd stl vector, list)

2015. jan. 24. 19:41
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!