Kezdőoldal » Számítástechnika » Programozás » A következő C++-kódban lenne...

A következő C++-kódban lenne pár kérdésem? (A feladat leírása és az általam írt kód a lent van. ) A beolvasás 2. részében mi a hiba? És a lényegi résznben mi a hiba?

Figyelt kérdés

(A feladatot CodeBlocksban írom)

Feladat: Leírás:

Egy iskola tanárairól tudjuk, hogy mikor milyen órát tartanak. A tanárokat, a tantárgyakat, a hét napjait, a napokon belüli órákat sorszámukkal azonosítjuk. Készíts programot, amely megadja minden napra az aznap órát tartó tanárok számát! Bemenet A standard bemenet első sorában az órák száma (1O1000), a tanárok száma a tantárgyak száma (1M100), egy tanár sorszáma (1TN) és egy nap sorszáma van (1H5), egy-egy szóközzel elválasztva. A következő sorok mindegyikében 4 egész szám van, egy-egy szóközzel elválasztva: tanár sorszám (1TSN), tanított tantárgy sorszáma (1TTSM), nap (1Nap5), óra (0Óra8). Például 3 7 2 0 azt jelenti, hogy a harmadik tanár a hetedik tantárgyat a hét második napján a nulladik órában tanítja. Kimenet A standard kimenet első sorába meg kell adni, minden napra az aznap órát tartó tanárok számát!

Bemenet:

8 3 4 1 1

1 1 1 6

1 1 2 2

1 2 1 3

2 1 2 2

2 2 3 1

3 4 1 2

3 2 1 4

3 3 2 1


Kimenet:

2 3 1 0 0


#include <iostream>


using namespace std;


int main()

{

// Beolvasás


int o; // órák száma órák száma (1<=O<=1000

int n; // tanárok száma (1<=N<=100)

int m;// tantárgyak száma (1<=M<=100),

int t;// tanár sorszáma (1<=T<=N

int h; // egy nap sorszáma van (1<=H<=5)


setlocale(LC_ALL,"hun");

cout << "Hány óra van? (órák száma)" << endl;

cin >> o;


cout << " tanárok száma " << endl;

cin >> n;


cout << " tantárgyak száma " << endl;

cin >> m;


cout << " Egy tanár sorszáma " << endl;

cin >> t;


cout << " Egy nap sorszáma " << endl;

cin >> h;


cout << o << " " << n << " " << m << " " << " " << t << " " << h << endl;

int i;

int ts[i] ; // tanár sorszám (1<=TS<=N

int tts[i]; // tanított tantárgy sorszáma 1<=TS<=M


int nap[i];// nap


int ora[i];// ora


// INNENTŐL NEM MEGY Az oszlopos beolvasás


cout << "\n 2. sor beolvasása: \nTanár sorszám " << endl;

for (int i=1;i<20;i++)

{

cin >> ts[i];

}



cout << " Tanított tantárgy sorszáma " << endl;

for (int i=1;i<20;i++)

{

cin >> tts[i];

}



cout << " NAP " << endl;

for (int i=1;i<20;i++)

{

cin >> nap[i];

}



cout << " ora " << endl;

for (int i=1;i<20;i++)

{

cin >> ora[i];

}

for (int i=1;i<20;i++)

{



cout <<"A "<< ts[i] << ". tanár, a " << tts[i] << " tantárgyat, " << nap[i] << "napon, " << " " << ora[i] << " órában tartja. " << endl;


// lényegi rész:

Programozási tételek – Megszámolás

új tömbbel ?

int oratt[i]; // órát tartó tanárok száma

if (

nap[i]!=nap[i]

)

oratt[i]=oratt[i]+1;

}

return 0;

}


vagy if)(nap[i]!=nap[i])

(i++)

;



A segítséget előre is köszönöm!



2017. okt. 11. 16:45
1 2
 1/11 anonim ***** válasza:
100%

Oszlopos beolvasásnak így kéne kinéznie:


for( int i = 0; i< o; i++)

{

cout<<"Add be a(z) "<<i<<". óra adatait:";

cin>>teacher>>subject>>day>>class;

}


Célszerű lenne létrehozni egy külön structot, amiben az egyes órák adatait eltárolod, és abból készítened az 'o' hosszúságú tömböt. Kinda like this:


struct ClassInfo

{

int Teacher;

int Subject;

int Day;

int Class;

}



//...


ClassInfo classes[o];


//...


for(int i=0; i<o; i++)

{

cout<<"Add be a(z) "<<i<<". óra adatait:";

cin>>classes[i].Teacher

>>classes[i].Subject

>>classes[i].Day

>>classes[i].Class;

}



És egy lábjegyzet:

int i;

int ts[i] ; // tanár sorszám (1<=TS<=N

int tts[i]; // tanított tantárgy sorszáma 1<=TS<=M


Ilyet soha ne csinálj, ne hozz létre i elemű tömböt, ha az i változónak magának még nincs érték adva. Jobb esetben nullázódik az i létrehozáskor, és 0 elemű tömböt próbálsz létrehozni, rosszabb esetben memóriaszemét marad benne, és létrehozol valami random hosszúságú tömböt, jó eséllyel tizenszázezres nagyságrendűt.

2017. okt. 11. 17:05
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:

Köszi szépen zöld pacsi ment

Viszont a beolvasás majd úgy nézne ki, hogy parancssorral beolvasom a txt-t.

De ezt a Class-t még meg kell értenem mivel még nem taniltuk.

De köszi szépen

A lényegi rész akkor úgy jó lesz valahogy ahogy leírtam ?

Csak akkor számolja ha aznap nem tartott már egy órát az a tanár.

Az első kimentben pl. csak azért van 2 , hiába 4 óra volt aznap(mivel 4 órát tartott 2 tanár.)

2017. okt. 11. 17:16
 3/11 tabaki ***** válasza:
100%

„De ezt a Class-t még meg kell értenem, mivel még nem tanultuk.”


Szerintem jó úton vagy afelé, hogy a C++-ban jelentős szerepet játszó osztályokat összekeverd a feladatban szereplő iskolai osztályokkal. Itt még csak egy egyszerű structról van szó, amelynek történetesen van egy eleme, amelyet #1 Class névre keresztelt, de hívhatná bármi egyébnek is. Ha a struktúrákat még nem tanultátok, a struktúratömböt egyelőre helyettesítheted egy közönséges kétdimenziós tömbbel, amelyben ezeket az adatokat a tömb egy-egy sorában helyezheted el.

2017. okt. 11. 22:16
Hasznos számodra ez a válasz?
 4/11 A kérdező kommentje:

Igen megvan kB köszi.

De nekem egyenlőre a 2dimenziós tömb beolvasás a nem megy sajnos 😥

Amikor oszlopokat kell beolvasni kiakad a program.

2017. okt. 12. 09:00
 5/11 tabaki ***** válasza:

„De nekem egyenlőre a 2dimenziós tömb beolvasás a nem megy sajnos 😥”


Tartok tőle, hogy nem csak ennyiről van szó, mellesleg a kétdimenziós tömböt is helyettesítheted 4 egydimenzióssal -- a programodban éppen effélével kísérletezel.


Már a feladat megfogalmazása is zavaros egy kissé. Egyrészt nálam a bekopizott kacsacsőrök ismeretlen karakterként jelennek meg, ami nem kedvez az olvashatóságnak. Másrészt úgy tűnik, ez a Nemes Tihamér verseny egyik régi feladatának lebutított változata, a kóbor apácák megtévesztése érdekében két fölösleges adattal megtoldva...

[link]

... csak éppen az értelmezést megkönnyítő táblázat maradt el.


Innentől viszont te vagy a hunyó, én nem tudom követni a szándékaidat. Gondosan beolvasod az o, n, m, t, h változókat, azután nem kezdesz velük semmit. Létrehozol 4db ismeretlen méretű tömböt (erre nemcsak a fordító figyelmeztetett, hanem #1 is a hozzászólásában), azután megpróbálod az ágasfáról leakasztott 20-as határértékig feltölteni őket, ha jól látom, abból kiindulva, hogy éppen 19 tanár van az iskolában (bár akkor sem világos, miért kell a sorszámukat külön beolvasni).

A „lényegi rész” vizsgálatát meg kutya legyek, ha értem:

if(nap[i] != nap[i]){akármi}

Vagyis a program akkor csináljon valamit, ha a tömbelem nem egyenlő saját magával. Ez mikor teljesül?


Kezdd a feladatot egy egyszerűbb részfeladat megoldásával. Először is papíron rajzold fel azt a táblázatot, amelyet be akarsz olvasni, aztán írd meg azt a programot, amellyel ezt meg is tudod csinálni. Ha meg már a gyötrelmes manuális adatbevitelre vagy szorulva, nehogy már húsz tanár adatait kelljen bevinned minden futtatáskor. Ha megoldod kettő-hárommal, az a végleges programban működni fog akárhánnyal is. Igazából ez is az a manuális bevitelnél a leginkább zavaró, de (ahogy #1 is jelezte) értelmetlen összetartozó adatokat külön ciklusokban beolvasni. Amikor mondjuk a tantárgyat kell beírni, ki a fene fog emlékezni arra, hogy ki volt a 47. tanár? Értelmesebb egyetlen cikluson belül beolvasni mindegyik tömb azonos indexű elemét. Megjegyzem, ha a feladatnak meg akarsz felelned, kötelező is így tenned, hiszen az input egyetlen szóközökkel tagolt sor, amely ezeket az adatokat tartalmazza -- ennek a megoldását egyelőre egyáltalán nem látom a programodban.

Hogyha utána ki tudod íratni a táblázatot, akkor tartasz ott, hogy vizsgálható formába rendezett adataid vannak, és elkezdhetsz töprengeni, hogy mit kezdjél velük.


Ha meg változtatsz a programon (mint nyilván az első hozzászólás után), akkor azt is közöld. A „nem megy” után írt szomorú pofinál pedig ezerszer többet ér, ha a hibaüzenetet írod ide.

2017. okt. 12. 16:38
Hasznos számodra ez a válasz?
 6/11 tabaki ***** válasza:

Tisztul a kép. Az elején megadott óraszám minden tanár minden órájának együttes számát, tehát az összes bejegyzés számát jelentheti. Gondolom, ez helyettesít a kézi bevitelnél az eredeti feladat fájlvégéjét.

Továbbra sem világos azonban, minek megadni egyik tanár sorszámát és a hét egy bizonyos napját, amikor minden nap összes tanárának számát kell meghatározni?

Lehet, hogy ez a majdani teljes feladat előkészítésének van szánva, de az én szememben inkább valami félresikerült egyszerűsítési kísérletnek látszik, amely így csak zavarja a tisztánlátást.

2017. okt. 13. 02:15
Hasznos számodra ez a válasz?
 7/11 tabaki ***** válasza:

Na jó, én most nem tudom, mi van, mindenesetre itt egy próbálkozás a te módszereddel, tömbökkel:

[link]

Megjegyzem, hogy semmiért nem kezeskedem, én magam nem tudok C++-ben programozni, csak amennyit a kérdésekből magamra szedek. De így talán könnyebben igazodom a kezdő szinthez, mint aki ért hozzá...

2017. okt. 13. 19:43
Hasznos számodra ez a válasz?
 8/11 tabaki ***** válasza:
+ Na, máris találtam három fölösleges pontosvesszőt, meg egy endl-t, amelyik helyett inkább \n sorvégét használnék.
2017. okt. 13. 20:52
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:

Igen igen megvan a 2d-s tömb beolvasás köszi!

ment a zöld kéz :)

kód:

cout << "\n 2. sor beolvasása: \nTanár sorszám " << endl;

for (int i=0;i<o;i++)

{

cin >> ts[i] >> tts[i] >> nap[i] >> ora[i];

}


for (int i=0;i<o;i++)

{

cout << ts[i] << " " << tts[i] << " " << nap[i] << " " << " " << ora[i] << endl;



}

2017. okt. 14. 16:09
 10/11 A kérdező kommentje:
A feladatot is értem megvan köszi :)
2017. okt. 14. 16:17
1 2

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!