Kezdőoldal » Számítástechnika » Programozás » Van egy csinos kis érettségi...

Qaxqaxqax kérdése:

Van egy csinos kis érettségi feladat c++hoz. Tudnavalaki segíteni? Mit rontok el? :D

Figyelt kérdés

A feladat (Szakmai közép 2006 május 18 II. rész 3. feladat):

Egy vektorban különböző cégek napi tőzsdei záró árfolyama szerepel.

Készítsen programot az ön által ismert nyelven, mely megadja azt a céget, amelyik az adott

időszak folyamán a legnagyobb nyereséget érte el! Tekintse legnagyobb nyereségnek azt,

ahol az utolsó nap záróegyenlege és az első nap záróegyenlegének különbsége a legnagyobb.

A feladat megoldásához alkalmazzon programozási tételt!

Töltse fel a vektort az alábbi adatokkal!

CÉG 1. nap 2. nap 3. nap

Alfa Bt. 1500 1709 1839

Beta Kft. 3000 3291 3255

Gamma Rt. 1000 1279 1285

Delta Bt 14000 14208 14263


----------------------------------------

A kódom:


#include <iostream>

#include <vector>


using namespace std;


struct cegek{

string nev;

vector<int> szamok;

};

struct kulonbozet{

string ceg;

int ertek;

};


void beker(vector<cegek> &adatok);

void kulonbozetet_von(vector<cegek> adatok, vector<kulonbozet> &adat);

string max(vector<kulonbozet> adat);


int main(){

vector<cegek> adatok;

vector<kulonbozet> adat;

beker(adatok);

kulonbozetet_von(adatok,adat);

cout<<"A legnagyobb teljesitmenyt a "<<max(adat)<<" erte el."<<endl;

}


void beker(vector<cegek> &adatok){

int szam;

for(int i=0;i<4;i++){

adatok.push_back(cegek());

cout<<"Add meg a(z) "<<i+1<<". ceg nevet!"<<endl;

getline(cin,adatok[i].nev);

for(int j=0;j<3;j++){

cout<<"Add meg a(z) "<<j+1<<". adatot!"<<endl;

cin>>szam;

adatok[i].szamok.push_back(szam);

}

}

}

void kulonbozetet_von(vector<cegek> adatok, vector<kulonbozet> &adat){

for(int i=0;i<adatok.size();i++){

adat.push_back(kulonbozet());

adat[i].ceg=adatok[i].nev;

adat[i].ertek=adatok[i].szamok[adatok[i].szamok.size()-1]-adatok[i].szamok[0];

}

}

string max(vector<kulonbozet> adat){

int mini=adat[0].ertek;

for(int i=1;i<adat.size();i++){

if(adat[i].ertek<mini){

mini=i;

}

}

return adat[mini].ceg;

}


-----------------------------------

Nos így hivatalosan még nem tanultunk a struct-ról, de szerintem a feladatról lerí, hogy ezzel célszerű hozzáfogni. (Meg, amúgy is az érdekel, hogy mi lehet a gond.)


Hibaüzenet nincs.

A program ugyan lefut, de a bekérésnél az a gond, hogy ugyan az első cégnevet bekéri, de utána már csak a 3 adatot kéri be, a maradék 3 cégnevet átugorja (cout-al kiírja a cuccost, de nem eszi meg csak simán tovább lép).


A segítségért előre is köszi, ill. ha más hibát is észre vesztek/van megjegyzés azt is szívesen fogadom.



2013. szept. 11. 15:18
 1/4 anonim ***** válasza:

A hiba természetesen a beker() függvényben volt:

Itt a javított változat:

void beker(vector<cegek> &adatok)

{

for(int i=0;i<4;i++){

adatok.push_back(cegek());

cout<<"Add meg a(z) "<<i+1<<". ceg nevet!"<<endl;

getline(cin,adatok[i].nev);

for(int j=0;j<3;j++)

{

cout<<"Add meg a(z) "<<j+1<<". adatot!"<<endl;

string szam;

getline(cin,szam);

adatok[i].szamok.push_back(atoi(szam.c_str()));

}

}

}

Ez tuti jó, most fordítottam:)


Néhány megjegyzés:

-függvényprototípust személy szerint nem használnék ebben a programban.

-iktass be egy típusellenörzést is a bekérésbe. Ehhez az isnumeric függvény, vagy egy reguláris kifejezés is megteszi.

-én a feladatot objektummal csináltam volna, de ez lényegtelen igazából, utóbbi nem sokat változtatott volna a kódon, bár kicsit áttekinthetőbbé tenné

2013. szept. 11. 16:19
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Nem akarok hülyének tűnni, de a tied csak annyiban más, hogy stringként kéri be a számot, majd azt átkonvertálja integerbe.

Az miért működik és az enyém miért nem mikor (ugyanazt?) simán int-be megkapja?

2013. szept. 11. 16:34
 3/4 anonim ***** válasza:

Én a getline-al stringet kapok be mindenképpen még akkor is ha nem string típusú változót deklarálok. Emiatt kel a konverzió, ami nem igazán c++-os, de a c++-osnál bár kemény 1 utasítás lenne félőnek tartottam, hogy az <sstring>-et nem fogod ismerni



Nálad annyi a baj, hogy nem sort olvastál be, hanem csak simán olvastál adatot.

A c++ valamennyire aszinkron, legalább is tapasztalataim szerint, biztos egy jobban értő megmondja-e hogy ez így van-e

Az aszinkronitás azt jelenti, hogy mindig azt hajtja végre előbb, legalább is ahogy láthattad a cin-él és a cout-nál amelyik kevesebb erőforrást igényel. Így a cin- végrehajtását azután időzítette a compiler, hogy a cout lefutott, ezért érdemesebb getline-t használni, amihez kellet a konverzió. Így nincs baj ezzel az időzítéssel szal a programod jó, csak erre is figyelni kell néha.

2013. szept. 11. 17:17
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Konverzióra stringstreamet szoktam használni meg ezeket a C-s konverziós függvényeket. Így már értem, köszönöm a válaszaid ment a felfele kéz(:
2013. szept. 11. 18:22

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!