- maczikaszválasza mzzoli5 (21:20) részére
- 2010.11.26. 01:02
- permalink
Szia, asszem progalapon valami hasonlót kértek:
/*Az ország N helységében végeztünk madármegfigyeléseket. Mindegyikben megadtuk, hogy milyen fajú madárból hányat láttunk. A madárfajok száma összesen M. Készíts programot, amely megadja azokat a helyeket, ahol csupán egyféle madarat láttak!*/ #include <fstream> #include <iostream> using namespace std; void csakEgyes(int tomb[], int& hszam, int& mszam) { int fajSzam; for (int i=0; i<hszam;++i) { fajSzam=0; int j=1; while(fajSzam<2 && j<=mszam) { if(tomb[i*mszam + j]>0) ++fajSzam; ++j; } if (fajSzam==1) cout<<"Pontosan egy madarat lattunk az "<<i+1<<". helysegben"<<endl; } } void filebol(){ string fname; cout<<"Kerem az input file nevet: "; cin>>fname; ifstream f(fname.c_str()); int mszam, hszam; f>>mszam; f>>hszam; int madartomb[hszam * mszam] ; for (int i=1; i<=hszam;++i) { for(int j=1; j<=mszam;++j) { f>>madartomb[i*mszam + j]; } } csakEgyes(madartomb,hszam,mszam); } void kezzel(){ int mszam, hszam; cout<<endl<<"Kerem a madarfajok szamat: "; cin>>mszam; cout<<endl<<"Kerem a helysegek szamat: "; cin>>hszam; int madartomb[hszam * mszam] ; for (int i=0; i<hszam;++i) { for(int j=1; j<=mszam;++j) { cout<<endl<<"Kerem, hogy az "<<i+1<<". helysegen hany "<<j<<". fajta madar volt: "; cin>>madartomb[i*mszam + j]; } } csakEgyes(madartomb,hszam,mszam); } int main() { cout<<" Kerem valassza ki az adatbevitel tipusat"<<endl; int val; cout<<"1) Filebol"<<endl; cout<<"2) Kezzel"<<endl; cout<<"Valasztasom(1/2): "; cin>>val; switch (val) { case 1 : filebol();break; case 2: kezzel();break;} return 0; }
nem szép így progamozni, de itt így tanítják eleinte :D ha valami nem oks akkor szólj a filevól ovlasást nem teszteltem. A hibakezelés a te dolgod :DMutasd a teljes hozzászólást!- 1. Elnézést kérek mindenkitől!
2. Most kezdtem az ELTE-n és nem megy olyan könnyen a Delphi-ről C++-ra való átállás.
3. Megpróbáltam én is megoldani a feladatot, de nem hiszem, hogy jó lett, ezért abba is hagytam (úgyhogy nem lusta voltam megcsinálni). Megkérdeztem csoporttársamat, hogy tud-e segíteni, azt mondta, hogy igen, aztán meg mégsem.
Mellékelem az én próbálkozásomat és a mintát, hogy hogyan kellene kinéznie. Így érthetőbb a probléma.Minta My_code
Üdv. mzzoli5!Mutasd a teljes hozzászólást! - Haruiválasza peeeti (18:39) részére
- 2010.11.25. 21:03
- permalink
Ez így gyorsabb, hogy jobb-e az más kérdés, attól függ hol.
Jelen esetben nem, mert -mint írtad is nem tudhattad- a követelmény, hogy külön legyen. a feladat máskülönben 1. féléves, így class, verem, lista stb javaslatot nem tennék, ha ennek elkészítése is nehézségekbe (a nem akarás is az) ütközött.
"Egyébként a kérdező úgy alakítja, ahogy akarja. Példa előtte."
Teljesen egyetértek, csak megjegyeztem, hogy ez is elkélne. Hát ha elfelejtődne megemlítve lenni.Mutasd a teljes hozzászólást!- Németh Péterválasza Harui (16:16) részére
- 2010.11.25. 20:12
- permalink
Csak be kell rakni egy classba. A main meg mehet a konstruktorba.Mutasd a teljes hozzászólást!- peeetiválasza Harui (16:16) részére
- 2010.11.25. 18:39
- permalink
Ez a program jobb, mintha átírnám úgy, ahogy mondod.
Miért szerveznék több ciklust, ha ennyi is elég? Egy nagy méretű inputnál nem mind1. Azt hogy mit követelnek tőle, nem tudhatom.
Egyébként a kérdező úgy alakítja, ahogy akarja. Példa előtte.
A tömb paraméterként való átadását esetleg érdemes lenne megcsinálni.Mutasd a teljes hozzászólást!- Haruiválasza peeeti (14:43) részére
- 2010.11.25. 16:16
- permalink
int tomb[telepulesekSz][madarfajtakSz]; ne legyen globális. Függvények paraméterében menjen be. Váljon külön az, hogy számítod ki az eredményt és a kiíratás. Így első nekifutásnak ez volna a gond neki, ha ezt beadná.Mutasd a teljes hozzászólást!- peeetiválasza mzzoli5 (08:27) részére
- 2010.11.25. 14:43
- permalink
Nem értem mivel van gond.
#include <iostream> #include <fstream> using namespace std; const int telepulesekSz = 10,madarfajtakSz=10; int tomb[telepulesekSz][madarfajtakSz]; void beolvasStdIn() { for(int i = 0; i < telepulesekSz; ++i) for(int j = 0; j < madarfajtakSz; ++j) { cout << "A(z) " << i << ". telepules " << j << ". madarfajanak szama"; cin >> tomb[i][j]; } } //¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ void beolvFajlbol(string fajlNev) { fstream f(fajlNev.c_str(),ios::in); if(!f.is_open()) { cerr << "A fajl emgnyitasa sikertelen!"; exit(1); } for(int i = 0; i < telepulesekSz; ++i) for(int j = 0; j < madarfajtakSz; ++j) { f >> tomb[i][j]; } } //¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ void telepulesekStdOut() { int seged; for(int i = 0; i < telepulesekSz; ++i) { seged=0; for(int j = 0; j < madarfajtakSz; ++j) if(tomb[i][j]!=0) ++seged; if(seged==1) cout << "Az " << i << ". telepulesen csak egy fele madarat lattak"; } } //¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ void telepulesekFajlba(string fajlNev) { fstream f(fajlNev.c_str(),ios::out); if(!f.is_open()) { cerr << "Fajl megnyitas rossz"; exit(1); } int seged; for(int i = 0; i < telepulesekSz; ++i) { seged=0; for(int j = 0; j < madarfajtakSz; ++j) if(tomb[i][j]!=0) ++seged; if(seged==1) f << "Az " << i << ". telepulesen csak egy fele madarat lattak"; } } //¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ int main() { //¤¤¤Fajlbol, Fajlba¤¤¤ beolvFajlbol("inFajlNeve.txt"); telepulesekFajlba("outFajlNeve.txt"); //¤¤¤StdIn, StdOut¤¤¤ beolvasStdIn(); telepulesekStdOut(); }
Remélem minden okés. Nem fordítottam.Mutasd a teljes hozzászólást!- mzzoli5válasza Harui (08:40) részére
- 2010.11.25. 08:56
- permalink
Nem. Másik ZoltánMutasd a teljes hozzászólást!- Haruiválasza mzzoli5 (21:42) részére
- 2010.11.25. 08:40
- permalink
Bodor Zoltán?Mutasd a teljes hozzászólást!- mzzoli5válasza peeeti (22:02) részére
- 2010.11.25. 08:27
- permalink
Köszönöm a gyors választ!
Csak pont a lényeget felejtettem el leírni.
Függvény vagy eljárás használatával kell megoldani a feladatot(és igazából ez a része nem nagyon megy még )
/valami ilyesmi kellene, hogy lenne egy beolvasó, egy kiíró és egy kiválasztó függvény vagy eljárás/
/Jah, és fájlból is kell tudni beolvasni, fájlba is kell tudni kiírni/Mutasd a teljes hozzászólást!- peeetiválasza mzzoli5 (21:42) részére
- 2010.11.24. 22:02
- permalink
int tomb[telepulesekSz][madarfajtakSz]; //Nullazd a tomb ertekeit, mert szemet van benne for(int i = 0; i < telepulesekSz; ++i) for(int j = 0; j < madarfajtakSz; ++j) beolv(tomb[i][j]);//beolvassuk az i. telepules j. madarfajanak szamat int seged; for(int i = 0; i < telepulesekSz; ++i) { seged=0; for(int j = 0; j < madarfajtakSz; ++j) if(tomb[i][j]!=0) ++seged; if(seged==1) cout << "Az " << i << ". telepulesen csak egy fele madarat lattak(" << j << "fajtaju volt)"; }
Esetleges szintaktikai hibákat már gondolom ki tudod javítani. Nem fordítottam le.
Optimalizálhatod esetleg. 3 év Delphi után nem lesz gond
Ha fájlból olvasod az adatokat, vagy fájlba írod a megfelelő településeket, akkor megoldhatod egy egymásba ágyazott ciklussal is.Mutasd a teljes hozzászólást!- pelzválasza mzzoli5 (21:42) részére
- 2010.11.24. 21:50
- permalink
Sorban beolvasod az adatokat, és ahol csak 1 db van, azt kiíratod.Mutasd a teljes hozzászólást!- Hi everybody!
Sorry a könnyű feladatért, de mégis megkérdezem, hátha tud nekem valaki segíteni. Gondolom, hogy ezt a feladatot egyszerűen meg lehet oldani (vagyis a kódolást), de nem tudom, hogy hogyan kéne.
3 éve programozok Delphi-ben és most kénytelen vagyok ezt a feladatot C++-ban megoldani (amiből még nagyon kezdő vagyok). (És a legrosszabb a dologban, hogy egyetemista vagyok és programozást tanulok, de nem tudom megoldani ezt a feladatot, és ez nem túl jó!).
Szóval kérném minden kedves ember segítségét, akár az algoritmussal, akár a forráskóddal vagy bármi mással.
/3 napom van hogy megoldjam ezt a feladatot/.
Feladat:
Az ország N helységében végeztünk madármegfigyeléseket. Mindegyikben megadtuk, hogy milyen fajú madárból hányat láttunk. A madárfajok száma összesen M. Készíts programot, amely megadja azokat a helyeket, ahol csupán egyféle madarat láttak!
Előre is köszönöm a válaszokat!Mutasd a teljes hozzászólást!