Quiz



  • #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <string>
    
    using namespace std;
    bool Loesung(int,int
    );
    
    int richtig = 0;
    int falsch = 0;
    
    int main()
    {
        for(int x=0;x<9;x++)
        {  
            srand (time(NULL));
            int Random= rand() % 9;      
                switch(Random)
                {
                        int Eingabe;
                        case 0:    cout << "Wie hoch ist der Mount Everest?" << endl
                                        << "[1] 6355 m.ü.M" << endl
                                        << "[2] 8848 m.ü.M" << endl
                                        << "[3] 8743 m.ü.M" << endl;
                                   cin >> Eingabe;
                                   Loesung(2,Eingabe);
                                   system("cls");
                                   break; 
                        case 1:    cout << "Wie heisst die Hauptstadt von Finnland?" << endl
                                        << "[1] Turku" << endl
                                        << "[2] Kuopio" << endl
                                        << "[3] Helsinki" << endl;
                                   cin >> Eingabe;
                                   Loesung(3,Eingabe);
                                   system("cls"); 
                                   break; 
                        case 2:    cout << "In welcher Einheit misst man die Schnelligkeit des Prozessors?" << endl
                                        << "[1] Newton" << endl
                                        << "[2] Kilometer pro Stunde" << endl
                                        << "[3] Megahertz" << endl;
                                   cin >> Eingabe;
                                   Loesung(3,Eingabe); 
                                   system("cls");
                                   break; 
                        case 3:    cout << "Aus wieviel Prozent Stickstoff besteht die Luft?" << endl
                                        << "[1] aus ca. 75 Prozent" << endl
                                        << "[2] aus ca. 25 Prozent" << endl
                                        << "[3] aus ca. 4  Prozent" << endl;
                                   cin >> Eingabe;
                                   Loesung(1,Eingabe); 
                                   system("cls");
                                   break; 
                        case 4:    cout << "Welches dieser Lieder schrieben nicht die Beatles?" << endl
                                        << "[1] Let it be" << endl
                                        << "[2] We will rock you" << endl
                                        << "[3] Lucy in the sky with diamonds" << endl;
                                   cin >> Eingabe;
                                   Loesung(2,Eingabe); 
                                   system("cls");
                                   break;  
                        case 5:    cout << "Wie heisst die Hauptstadt des Kantons Appenzell Inerroden?" << endl
                                        << "[1] Gais" << endl
                                        << "[2] Appenzell" << endl
                                        << "[3] Stans" << endl;
                                   cin >> Eingabe;
                                   Loesung(2,Eingabe); 
                                   system("cls");
                                   break; 
                        case 6:    cout << "Wann begann die Franzoesische Revolution?" << endl
                                        << "[1] 1789" << endl
                                        << "[2] 1798" << endl
                                        << "[3] 1768" << endl;
                                   cin >> Eingabe;
                                   Loesung(1,Eingabe); 
                                   system("cls");
                                   break; 
                        case 7:    cout << "Welches ist der hoechste Berg der Schweiz, der ganz in der Schweiz liegt?" << endl
                                        << "[1] Gurten" << endl
                                        << "[2] Matterhorn" << endl
                                        << "[3] Dom" << endl;
                                   cin >> Eingabe;
                                   Loesung(3,Eingabe);
                                   system("cls"); 
                                   break;    
                        case 9:    cout << "Welches ist der groesste See, der ganz in der Schweiz liegt?" << endl
                                        << "[1] Vierwaldstaettersee" << endl
                                        << "[2] Neuenburgersee" << endl
                                        << "[3] Bodensee" << endl;
                                   cin >> Eingabe;
                                   Loesung(2,Eingabe);
                                   system("cls");
                                   break;     
                }
        }    
        cout << "Sie hatten " << richtig << " Aufgaben richtig" << endl
             << "und " << falsch << " Aufgaben falsch geloest\n" << endl;    
        system("PAUSE");	
        return 0;
    }
    
    bool Loesung(int Loesung,int Eingabe=0)
    {
        if(Loesung == Eingabe)
        {
            richtig++;
            return true;
        }
        else
        {
            falsch++;
            return false;
        }   
    }
    

    Ich habe mal ein kleines Quiz geschrieben...
    Kann mir jemand sagen wie ich mache, dass die Fragen jeweils nur einmal kommen.

    mfg Schmoecki



  • Kann mir jemand sagen wie ich mache, dass die Fragen jeweils nur einmal kommen

    indem du dir merkst welche schon gefragt wurden...

    besonders einfach dürfte es in deinem fall sein indem du einfach nen array nimmst und da zahlen von 0 bis anzahl fragen-1 reinpackst und dann ein std::random_shuffle rüberjagst...

    an sonsten noch ein kleiner tip... in deinem switch wird jedes mal das gleiche gemacht nur der text der frage ist anders .... wenn du die text in einem array speicherst brachst du nur noch den entprechenden text aufzurufen und hast weniger redundanz in deinem quellcode

    davon abgesehen... system("cls"); ist böse 😃

    und noch ne kleine anmerkung... es sind ca 78% N



  • Danke für die schnelle antwort

    Was ist denn besser als

    system("cls")
    

    habe sonst nichts gefunden?

    mfg



  • Schmoecki schrieb:

    Danke für die schnelle antwort

    Was ist denn besser als

    system("cls")
    

    habe sonst nichts gefunden?

    mfg

    Also imho am besten und Standard sind die Escape-Sequenzen.

    cout << "\033[2J"; // Löscht den Bildschirm
    

    Leider unterstützt win2k und xp diese nicht.

    Ansonsten würde ich glaube ich zu clrscr() aus der conio.h greifen (kein Standard)

    Caipi



  • beim schnell rübergucken ganz übersehen... globals sind unschön und rand()%9 liefert eine zahl von 0-8 und nicht von 0-9

    und srand (time(NULL)); "darf" (sollte) nur einmal bei programmstart aufgerufen werden an sonsten initialisiert du ständig neu... ich glaub der nimmt minuten was dann vermutlich zur folge hat das dein programm ne minute immer die gleiche frage stellt und das nächste mal ne minute lang ne andere...



  • #include <iostream> 
    #include <vector>
    #include <algorithm>
    using namespace std; 
    
    //geeignete datenstrukturen sind was tolles. 
    char const* fragen[][4]={{
    "Wie hoch ist der Mount Everest?",
    "6355 m.ü.M",
    "8848 m.ü.M",
    "8743 m.ü.M",
    },{
    "Wie heisst die Hauptstadt von Finnland?",
    "Turku",
    "Kuopio",
    "Helsinki",
    },{
    "In welcher Einheit misst man die Schnelligkeit des Prozessors?",
    "Newton",
    "Kilometer pro Stunde",
    "Megahertz",
    },{
    "Aus wieviel Prozent Stickstoff besteht die Luft?",
    "aus ca. 75 Prozent",
    "aus ca. 25 Prozent",
    "aus ca. 4  Prozent",
    },{
    "Welches dieser Lieder schrieben nicht die Beatles?",
    "Let it be",
    "We will rock you",
    "Lucy in the sky with diamonds",
    },{
    "Wie heisst die Hauptstadt des Kantons Appenzell Inerroden?",
    "Gais",
    "Appenzell",
    "Stans",
    },{
    "Wann begann die Franzoesische Revolution?",
    "1789",
    "1798",
    "1768",
    },{
    "Welches ist der hoechste Berg der Schweiz, der ganz in der Schweiz liegt?",
    "Gurten",
    "Matterhorn",
    "Dom",
    },{
    "Welches ist der groesste See, der ganz in der Schweiz liegt?",
    "Vierwaldstaettersee",
    "Neuenburgersee",
    "Bodensee",
    }};
    
    int main(){
    	srand(time(0));//statt NULL, ist moderner
    	int const anzahlDerFragen=sizeof(fragen)/sizeof(fragen[0]);//damit man nur an einer stelle 
    		//fragen ändert
    	int richtig=0;
    	vector<int> plan;//plan, wann welche frage
    	for(int i=0;i<anzahlDerFragen;++i)
    		plan.push_back(i);//simpler plan: 1 2 3 4 
    	random_shuffle(plan.begin(),plan.end());//nu isser durcheiander
    	for(int i=0;i<anzahlDerFragen;++i){//den ganzen plan abarbeiten
    		char const* (&frage)[4]=fragen[plan[i]];//natürlich gehts auch einfacher, aber heute nicht
    		char const* antworten[]={frage[1],frage[2],frage[3]};//aua
    		char const* richtigeAntwort=frage[1];//wird sich rächen
    		random_shuffle(antworten,antworten+3);//war den preis nicht wert
    		cout<<frage[0]<<'\n';
    		for(int j=0;j<3;++j)
    			cout<<'['<<j<<']'<<' '<<antworten[j]<<'\n';
    		int eingabe;
    		cin>>eingabe;//hier die rache. muss auf 0<=eingabe<3 testen
    			//muss auch auf zahl testen
    		if(antworten[i]==richtigeAntwort)
    			++richtig;
    	}
    	cout<<anzahlDerFragen-richtig<<" Fehler!"<<'\n';
    }
    


  • @Volkard: Ich lese dich jetzt erst seit kurzem, aber ich wage zu behaupten: "Na Typisch!" 😃
    @All: Und das _wirklich_ erschreckende daran ist, daß er dafür wahrscheinlich 2½ Minuten gebraucht hat...



  • @volkard
    warum ärgerst du dich eigentlich mit den char*'s rum statt std::string zu verwenden da es ja spätenstens nach std::random_shuffle ja c++ lastig wird?
    aus langweile oder hat das einen guten grund den ich nicht sehe...



  • Ich hätts wohl eher so angefangen:

    #include <algorithm>
    #include <iostream>
    
    static char const *const fragen[] = {
        "Wie hoch ist der Mount Everest?",
        "Wie heisst die Hauptstadt von Finnland?",
        "In welcher Einheit misst man die Schnelligkeit des Prozessors?",
        "Aus wieviel Prozent Stickstoff besteht die Luft?",
        "Welches dieser Lieder schrieben nicht die Beatles?",
        "Wie heisst die Hauptstadt des Kantons Appenzell Inerroden?",
        "Wann begann die Franzoesische Revolution?",
        "Welches ist der hoechste Berg der Schweiz, der ganz in der Schweiz liegt?",
        "Welches ist der groesste See, der ganz in der Schweiz liegt?"
    };
    
    static char const *const antworten[][3] = {
      {
        "6355 m.ü.M",
        "8848 m.ü.M",
        "8743 m.ü.M",
      },{
        "Turku",
        "Kuopio",
        "Helsinki",
      },{
        "Newton",
        "Kilometer pro Stunde",
        "Megahertz",
      },{
        "aus ca. 75 Prozent",
        "aus ca. 25 Prozent",
        "aus ca. 4  Prozent",
      },{
        "Let it be",
        "We will rock you",
        "Lucy in the sky with diamonds",
      },{
        "Gais",
        "Appenzell",
        "Stans",
      },{
        "1789",
        "1798",
        "1768",
      },{
        "Gurten",
        "Matterhorn",
        "Dom",
      },{
        "Vierwaldstaettersee",
        "Neuenburgersee",
        "Bodensee",
      }
    };
    
    static int const richtige_antworten[] = { 2, 3, 3, 1, 2, 2, 1, 3, 2 };
    
    int main() {
      int arr[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
      int x, richtig = 0, falsch = 0;
    
      std::random_shuffle(arr, arr + 9);
    
      for(int i = 0; i < 9; ++i) {
        std::cout << fragen[arr[i]] << std::endl;
        for(int j = 0; j < 3; ++j)
          std::cout << j + 1 << ") " << antworten[arr[i]][j] << std::endl;
    
        std::cin >> x;
        if(x == richtige_antworten[arr[i]])
          ++richtig;
        else
          ++falsch;
      }
    
      std::cout << "Richtig: " << richtig << std::endl
                << "Falsch:  " << falsch  << std::endl;
    }
    


  • Windalf schrieb:

    @volkard
    warum ärgerst du dich eigentlich mit den char*'s rum statt std::string zu verwenden da es ja spätenstens nach std::random_shuffle ja c++ lastig wird?
    aus langweile oder hat das einen guten grund den ich nicht sehe...

    siehst du ein strlen, strcat, strcmp, einen op== auf strings oder irgendwas? soll ich statt cout<<"hello world"; leiber cout<<string("hello world"); machen?

    ich hab mich nicht mit char* geärgert. ich hab nur char* benutzt, weil string absolut keinen vorteil hätte.



  • siehst du ein strlen, strcat, strcmp, einen op== auf strings oder irgendwas?

    hey das war kein angriff nur ne Frage 😉
    schliesslich bin ich ja nicht der Informatiker 😃

    soll ich statt cout<<"hello world"; leiber cout<<string("hello world"); machen?

    äh nein ich dachte da eher ein an eine lookuptable von std::strings... (bzw von einer eigenen klasse Frage) ein Konstuktoraufruf an der stelle wäre ja nicht mehr nötig...

    ich hab mich nicht mit char* geärgert. ich hab nur char* benutzt, weil string absolut keinen vorteil hätte

    ich hatte da schon aus erweiterungsgründung an sowas gedacht wie ne menüverwaltung in der z.b. auch fragen hinzugefügt, abgepeichert geladen usw... werden können und dann deshalb eher an einen stl container aus std::strings gedacht...



  • Windalf schrieb:

    ich hatte da schon aus erweiterungsgründung an sowas gedacht wie ne menüverwaltung in der z.b. auch fragen hinzugefügt, abgepeichert geladen usw... werden können und dann deshalb eher an einen stl container aus std::strings gedacht...

    das ist ein guter grund. die zeilen hätte ich auch lieber in einer text-datei. hab nicht dran gedacht. da ist dann string viel besser als char*.



  • Danke für die vielen guten Tipps. Haben mir alle sehr geholfen

    mfg Schmoecki


Anmelden zum Antworten