| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Luokkapohjainen tietovisaakx 21.01.05 18:41 Tässä tietovisa. Sisennykset hieman outoja. ( G++ -O3 -Wall ) Inspiraatio siis täältä: http://mureakuha.com/koodikirjasto/683 :)
#include <iostream> #include <string> #include <vector> #include <stdarg.h> using namespace std; class Kysymys { private: int oikeaVastaus; vector<string> vaihtoehdot; string kysymys; public: void asetaKysymys(string teksti); void lisaaVaihtoehto(string teksti,bool oikea=false); void tulosta(); bool tarkistaVastaus(int vastaus); int vastausLkm(); Kysymys(); }; Kysymys::Kysymys() { oikeaVastaus=-1; } void Kysymys::lisaaVaihtoehto(string teksti,bool oikea) { vaihtoehdot.push_back(teksti); if(oikea) oikeaVastaus=vaihtoehdot.size(); } void Kysymys::asetaKysymys(string teksti) { kysymys=teksti; } void Kysymys::tulosta() { int i; cout << kysymys << endl << endl; for(i=0;i<(int)vaihtoehdot.size();i++) { cout << (1+i) << ": " << vaihtoehdot[i] << endl; } cout << endl; } bool Kysymys::tarkistaVastaus(int vastaus) { if(vastaus==oikeaVastaus) return true; return false; } int Kysymys::vastausLkm() { return vaihtoehdot.size(); } class Tietovisa { private: vector<Kysymys*> kysymys; int pisteet; public: void lisaaKysymys(Kysymys *uusi); int aja(); int kysymysLkm(); ~Tietovisa(); }; Tietovisa::~Tietovisa() { int i; for(i=0;i<(int)kysymys.size();i++) delete kysymys[i]; } void Tietovisa::lisaaKysymys(Kysymys *uusi) { kysymys.push_back(uusi); } int Tietovisa::kysymysLkm() { return kysymys.size(); } int Tietovisa::aja() { int i,v,k; k=0; for(i=0;i<(int)kysymys.size();i++) { kysymys[i]->tulosta(); v=0; while(v==0) { cin >> v; if(v<0||v>kysymys[i]->vastausLkm()) v=0; } if(kysymys[i]->tarkistaVastaus(v)) { k++; cout << "Oikea vastaus."; } else { cout << "Väärä vastaus."; } cout << endl << "Sinulla on nyt " << k << " pistettä."; cout << endl << endl; } return k; } Kysymys *luoKysymys(string kysymys,int oikea,int n,...) { Kysymys *uusi; va_list va; va_start(va,n); uusi=new Kysymys; uusi->asetaKysymys(kysymys); for(int i=0;i<n;i++) uusi->lisaaVaihtoehto((string)va_arg(va,char *),oikea==i); va_end(va); return uusi; } int main(int argc, char *argv[]) { int oikein; Tietovisa t; t.lisaaKysymys(luoKysymys("Mikä lie hauki?",1,3,"Kala","Kissa","Koira")); t.lisaaKysymys(luoKysymys("Mikä lie kissa?",1,2,"Lemmikkieläin","Omena")); oikein=t.aja(); cout << "Oikeita vastauksia: " << oikein << endl; cout << "Paina näppäintä."; cin.get(); cin.get(); return 0; } editoitu: 15:28 24.1.05 Linkku 15:28 24.1.05 editoitu: 15:43 26.1.05 stWasm1.0 18:16 25.1.05 toimii hieman oudosti-> Mikä lie hauki? 1: Kala 2: Kissa 3: Koira 2 Oikea vastaus. Sinulla on nyt 1 pistettä. Mikä lie kissa? 1: Lemmikkieläin 2: Omena 2 Oikea vastaus. Sinulla on nyt 2 pistettä. Oikeita vastauksia: 2 Paina näppäintä. |
![]() Haku
|