moikka!c++ vihiä?
olis kinkkinen juttu ratkaisussa.
Pitäis tehdä korttipakka ohjelma niin että
tulosteena saadaan korttipakan neljä korttia allekkain
esim.
hertta 4
pata 5
risti 6
ruutu 13
pitäis käyttää kahta luokkaa
Kortti "luokka"
KorttiPakka "luokka"
jne...
Vaikutta epäilyttävästi koulutehtävältä, kannattaa yrittää itse tehdä.
En viestistäsi oikein tajunnut mitä ohjelman edes pitäisi tehdä, mutta jos sen pitää vain kirjoittaa ruudulle pata 5 tjsp niin voit tehdä korttipakka-olioon metodin Tulosta (int maa, int numero) ja kutsua sitä.
Nyt on vissiin kyseessä ohjelma, joka arpoo neljä korttia pakasta. Itse tekisin varmaan niin, että ensin pakassa olevat kortit sekoitetaan, minkä jälkeen on helppo valita neljä ensimmäistä pakasta. Jokaista pakassa olevaa korttia kohti täytyy tietenkin tallentaa kortin numero ja väri. Kerro kuitenkin vähän tarkemmin, mihin kohtaan tarvitset apua...
Kannattaa ilmeisesti tehdä jokin struktuuri, joka käsittää kortin maan ja arvon.
Laaditaan luokka öKorttiö, joka sisältää kaksi kokonaislukutyypin jäsenmuuttujaa: ömaa_ö ja öarvo_ö. Luokan logiikka perustuu oletukseen, jonka mukaan muuttujan ömaa_ö arvot merkitsevät seuraavia maita: 1-> hertta, 2->ruutu, 3->pata ja 4->risti. Muuttuja öarvo_ö saa korteista tuttuja arvoja väliltä 1-13.
Kortti-luokassa on oletusmuodostin, joka alustaa luokasta muodostettavan luokassa olevien korttiolioiden jäsenet arvolla 0. Lisäksi luokka sisältää jäsenfunktiot KerroMaa() ja KerroArvo(), jotka palauttavat nimensä mukaiset kortti-olioon kuuluvat arvot. Neljäs Kortti-luokkaan kuuluva funktio on öAlustaKortti(maa, arvo)ö, joka alustaa kortin annetuilla arvoilla.
Sinun tehtävänäsi on luokka öKorttiPakkaö, johon on liitetty kokoonpanollisella koostumissuhteella (automaattisella oliotaulukolla) 52 korttioliota, sekä seuraavassa esitetyt funktiot.
KorttiPakkaan on kirjoitettava oletusmuodostin, joka antaa korttipakkaan kuuluville korttiolioille todelliset kortteja ilmentävät arvot. Korttien alustamiseen käytetään Kortti-luokkaan kuuluvaa AlustaKortti jäsenfunktiota, joka saa parametrina kortin maan ja arvon. Alustaminen on tehtävä siten, että pakan kortit alustuvat seuraavaan järjestykseen (oliotaulukon ensimmäinen alkio = pakan ensimmäinen kortti): hertta 1 – 13, ruutu 1-13, pata 1-13 ja risti 1-13.
KorttiPakka-luokan ainoa varsinainen jäsenfunktio on öTulostaKortti(jnro)ö, joka saa parametrina kortin järjestysnumeron alustetussa pakassa ja tulostaa järjestysnumeron mukaisen kortin esimerkkitulosteen mukaisesti. Laatimaasi luokkaa testaava pääohjelma muodostaa korttipakka-olion ja tulostaa pakasta joitakin kortteja.
Esimerkkitulostus
Hertta 1 Ruutu 8 Pata 2 Risti 2 Risti 13
Mun oma koodaus:
KorttiPakka(); void TulostaKortti(int jnro); private: int kortti[52]; }; KorttiPakka::KorttiPakka() { int i,x,maa,arvo; for (i=0; i<4; i++) { maa=1; maa++; for (x=0; x<13; x++) { arvo=1; arvo++; } } } void KorttiPakka::TulostaKortti(int jnro) { cout<<jnro<<endl; }
ja tulostaa:
0 02 02 74 51
missä mättää mun tulostuksessa????
*Henkistä itkua*
Tulostuksessa mättää se, että käslet sitä tulostamaan numeron etkä mitään muuta.
void KorttiPakka::TulostaKortti(int jnro) { cout<<jnro<<endl; //tulostaa numeron joka tänne tungetaan, ei muuta }
Lisäksi alustuksessa maa-muuttuja saa aina arvon 2 koska alustat muuttujan joka kerran uudelleen (sama pätee arvo-muuttujaan). Eli jos haluat saada tuon toimimaan, opettele käyttämään if-lauseita.
Kinkkinen homma neuvoo, jos sulla ei oo perustietoja c++:sta. Mutta nämä ainakin näyttää menevän pieleen (ja monimuu asia).
Korttipakka luokassa sinun tulee määritellä jokin tietorakenne joka kykenee pitämään sisällään 52 kortti oliota. Tämän jälkeen Korttipakan muodostinfunktiossa voit täyttää korttipakan esim.
pakka[1]->lisaaKortti(1,1); //lisää hertta ässän pakka[2]->lisääKortti(1,2); //lisää hertta kakkosen
jne. tämä on parasta tehdä jossain silmukassa.
luokathan tulee muotoon:
LuokanNimi { public: // <julkiset funktiot, kaikkille näkyvissä> protected: // <suojatut määrittelyt ainostaan luokan käytettävissä, siirtyvät perittäessä luokasta> private: // <suojatut luokan omat määrittelyt, eivät siirry perittäessä luokkasta> };
Mutta kannatan vahvasti jonkin c++ oppaan/kirjan lukemista ja harkkojen tekemistä. ja kun olet perillä olio-ohjelmoinnin perusteista niin homma helpottuu kummasti.
KorttiPakka::KorttiPakka() { int i,x,maa,arvo; for (i=0; i<4; i++) { maa=1; maa++; for (x=0; x<13; x++) { arvo=1; arvo++; } } // Tässä vaiheessa maa == arvo == 2 }
Minäkään en kyllä näe, mitä virkaa noilla arvo- ja maa-muuttujilla on. Joka kierroksen aikana molemmat pysyvät kakkosena, koska ensin ne muutetaan ykkösiksi ja sitten lisätään yksi. Tuo looppihärpäke hoitaa täsmälleen saman asian kuin:
maa = 2; arvo = 2;
Siinä on teille keskenkasvuisille koodiNÖRTTELELLE oikea ratkaisu, jos jotain täällä kysyy ja asenne on toi mikä teillä on. katsokaa peiliin ja kasvakaa aikuisiksi!!!!
class KorttiPakka { public: KorttiPakka(); void TulostaKortti(int jnro); private: Kortti kortit[52]; }; KorttiPakka::KorttiPakka() { int maa=0,arvo=0,i=0; for (maa=1; maa<=4; maa++) { for (arvo=1; arvo<=13; arvo++) { kortit[i].AlustaKortti(maa, arvo); i++; } } } void KorttiPakka::TulostaKortti(int jnro) { if (kortit[jnro].KerroMaa()==1) { cout<<"Hertta "; } if (kortit[jnro].KerroMaa()==2) { cout<<"Ruutu "; } if (kortit[jnro].KerroMaa()==3) { cout<<"Pata "; } if (kortit[jnro].KerroMaa()==4) { cout<<"Risti "; } cout<<kortit[jnro].KerroArvo()<<endl; }
Teitkö itse vai teetätitkö? Jos teit itse niin eiköhän homma ole mennyt niinkuin pitääkin, eli harjoitus tekee mestarin (jopa kysymysten kirjoittamisessa). Päälinjanahan ohjelmointiputkassa on ollut, että koodeja ei anneta valmiina, vaan annetaan apua kohdennetusti hankaliin tilanteisiin ...Ja näin näen kijoittaneeni edellisen viestini tähän ketjuun. Tämä vain kirjoittaakseni itseni ulos tästä asenneongelmasta. (keskenkasvuisuudesta en sitten tiedä)... Kiitos.
timok16 kirjoitti:
Siinä on teille keskenkasvuisille koodiNÖRTTELELLE oikea ratkaisu, jos jotain täällä kysyy ja asenne on toi mikä teillä on. katsokaa peiliin ja kasvakaa aikuisiksi!!!!
Mielestäni kaikilla oli ihan hyvä asenne tehtävääsi kohtaan. Kukaan ei varmasti halua tehdä koulutehtäviä puolestasi, varsinkaan kun tehtävä on sen verran helppo että jo pienellä C++:an tuntemuksella sen voi tehdä.
timok16 kirjoitti:
Siinä on teille keskenkasvuisille koodiNÖRTTELELLE oikea ratkaisu, jos jotain täällä kysyy ja asenne on toi mikä teillä on. katsokaa peiliin ja kasvakaa aikuisiksi!!!!
Vai meille oikea ratkaisu? Ihan niin kuin olisit vain yrittänyt testata muiden osaamista, jota en kyllä ollenkaan epäile. Asenne ongelmaasi kohtaan oli minusta kaikilla ihan hyvä. Jos keksit ratkaisun itse, niin miksi ihmeessä tulet tänne vielä valittamaan muille siitä, että ihmettelimme, miksi koodisi näytti aluksi niin kummalliselta? Jos taas tuon koodin teki joku muu, niin sitä suuremmalla syyllä olisi ollut parasta jättää tulematta tänne vielä valittamaan. Kasva vain itse aikuiseksi, ennen kuin tulet muilta sitä vaatimaan.
P.S. Ja lue nyt ihmeessä ne keskustelun ohjeet, ja opettele varsinkin käyttämään kooditageja, jos vielä aiot jatkaa täällä keskustelua.
Aihe on jo aika vanha, joten et voi enää vastata siihen.