Pointer Rätsel
Posted by fkrauthan | Posted in Rätsel und Fun | Posted on 10-12-2008
Tags: anfänger, fun, pointer, quiz
9
Ein kleines Pointer Rätsel zum selber Compilieren
Hier findet ihr ein kleines Pointer Quiz von Terep viel Spaß damit.
Compilieren:
einfach das Programm als eine Consolen Applikation compilieren mit eurer IDE der Wahl. Sollte mit allen gängigen C und C++ Compiler gehen.
Der Code zum Download:
pointer_quiz.cpp
Der Code:
Code: C++ | Plain Text
- #include<iostream>
- using namespace std;
- // aus praktischen Gründen global gestellt
- bool weiter = true; // um aus der Auswahlschleife in die Fragen zu kommen
- bool ende = false; // für das vorzeitige Beenden des Programmes
- int punkte = 0; // Punktezähler
- char eingabe; // Nutzereingabe
- void start()
- {
- cout << "\nEin kleiner Selbsttest in C++ Fragen rund um den Zeiger \n";
- }
- void begleitwort()
- {
- cout << "\n\nKurze Info:";
- cout << "\n Achtung, dies ist von einem C++ Einsteiger für Anfänger geschrieben worden.";
- cout << "\n Ziel dieser Anwendung ist es, sich mit dem Pointer zu beschäftigen.";
- cout << "\n Falsche Antworten werden kurz kommentiert.";
- cout << "\n Wer Fehler findet oder Anregungen hat, posten!";
- cout << "\n\n Dezember 2008, Region Hannover, Terep.\n\n\n";
- }
- int frage_1 ()
- {
- weiter = true;
- int richtig = 0;
- cout << "\n\n\nFrage 1:\n";
- cout << "\n Zwei Zeiger sollen deklariert werden.";
- cout << "\n Nur eine Antwort ist richtig:\n";
- cout << "\n A int * zahl1, zahl 2;";
- cout << "\n B int* zahl1 = 4, zahl2 = 5;";
- cout << "\n C int zahl[2];";
- cout << "\n D int *zahl1, *zahl2;";
- cout << "\n Q Programmabbruch ";
- while (true == weiter)
- {
- cout << "\n Deine Entscheidung: ";
- cin >> eingabe;
- weiter = false; // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
- switch (eingabe)
- {
- case 'a':
- case 'A':
- cout << "\n A ist falsch. Nur zahl1 ist ein Zeiger, zahl2 nicht";
- cout << "\n Stichwort: Zeigergrundlagen";
- case 'b':
- case 'B':
- cout << "\n B ist falsch. Wie in A ist zahl1 ein Zeiger, zahl2 nicht.";
- case 'c':
- case 'C':
- cout << "\n Falsch, in C wird ein Array deklariert, kein Zeiger.";
- break;
- case 'd':
- case 'D':
- cout << "\n\nD ist richtig.";
- richtig = 6;
- break;
- case 'q':
- case 'Q':
- ende = true;
- break;
- default:
- cout << "\n\n Falsche Eingabe mit: '" << eingabe << "' \n";
- weiter = true; //Ausstiegsbedingung nicht erfüllt
- } // Ende switch
- } // Ende while
- return (richtig);
- }
- int frage_2 ()
- {
- weiter = true;
- int richtig = 0;
- cout << "\n\n\nFrage 2:\n";
- cout << "\n int zahl1 = 5, zahl2 = 10; ";
- cout << "\n Welche Möglichkeit druckt '5' aus?";
- cout << "\n Nur eine Antwort ist richtig:\n";
- cout << "\n A int *zgr = zahl1; cout << zgr;";
- cout << "\n B int *zgr = zahl1; cout << *zgr;";
- cout << "\n C int *zgr = &zahl1; cout << &zgr;";
- cout << "\n D int *zgr = &zahl1; cout << *zgr;";
- cout << "\n Q Programmabbruch ";
- while (true == weiter)
- {
- cout << "\n Deine Entscheidung: ";
- cin >> eingabe;
- weiter = false; // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
- switch (eingabe)
- {
- case 'a':
- case 'A':
- case 'b':
- case 'B':
- cout << "\n A ist falsch. Fehlermeldung:invalid conversion from ‘int’ to ‘int*.";
- cout << "\n B ist falsch. zusätzlich noch zahl2 statt zahl1.";
- cout << "\n Stichwort: Zeigergrundlagen.";
- break;
- case 'c':
- case 'C':
- cout << "\n C ist falsch. & ist ein Adressoperator.";
- cout << "\nSomit wird nicht 5 gezeigt, sondern die Speicheradresse von zahl1.";
- break;
- case 'd':
- case 'D':
- cout << "\n\nD ist richtig.";
- richtig = 6;
- break;
- case 'q':
- case 'Q':
- ende = true;
- break;
- default:
- cout << "\n\n Falsche Eingabe mit: '" << eingabe << "' \n";
- weiter = true; //Ausstiegsbedingung nicht erfüllt
- } // Ende switch
- } // Ende while
- return (richtig);
- }
- int frage_3 ()
- {
- weiter = true;
- int richtig = 0;
- cout << "\n\n\nFrage 3:\n";
- cout << "\n int zahl1 = 5; int *zgr; ";
- cout << "\n Wie bringt man den Zeiger zgr dazu, den Wert von zahl1 zu zeigen?";
- cout << "\n Bei welcher Möglichkeit geht es?";
- cout << "\n A Nein, mit Zeigern kann man zwar den Wert anzeigern, aber nicht ändern.";
- cout << "\n B Ja, ganz einfach: zgr = zahl1; cout << zgr;";
- cout << "\n C Ja, ganz einfach: &zgr = &zahl1; cout << &zgr;";
- cout << "\n D Ja, ganz einfach: &zgr = *zahl1; cout << *zgr;";
- cout << "\n E Ja, ganz einfach: &zgr = &zahl1; cout << &zgr;";
- cout << "\n F Ja, ganz einfach: zgr = &zahl1; cout << *zgr;";
- cout << "\n G Ja, ganz einfach: *zgr = *zahl1; cout << *zgr;";
- cout << "\n Q Programmabbruch ";
- while (true == weiter)
- {
- cout << "\n Deine Entscheidung: ";
- cin >> eingabe;
- weiter = false; // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
- switch (eingabe)
- {
- case 'a':
- case 'A':
- cout << "\n A ist falsch";
- cout << "\n Stichwort: Zeigergrundlagen";
- break;
- case 'b':
- case 'B':
- cout << "\n B ist falsch; error: invalid conversion from ‘int’ to ‘int*.";
- cout << "\n Stichwort: Zeigergrundlagen";
- break;
- case 'c':



Hi Leute
Schön wäre es zu wissen, ob der Pointer-Quiz überhaupt jemanden interessiert.
Die mögliche Bewertung oben gibt zumindest an, ob und wie es aufgenommen wurde.
Bis denne
Terep
Hm, man hätte ein WebQuiz daraus machen können. Als Quellcode finde ich es etwas überflüssig, rein technisch hätte man es sehr viel besser Lösen können, als alles direkt in den Code zu schreiben.
Es sieht halt sehr nach einem Anfängerprojekt aus. Es natürlich prinzipiell nicht schlecht, aber man hätte es nicht unbedingt hier veröffentlichen müssen. Es ist etwas zu mühsam, das erst zu kompilieren, bevor man es spielen kann, nächstes mal sollte man es direkt im Browser spielen können.
Ein wenig viel Code, ein wenig sehr wenig Text.
Finde ich so nicht sinnvoll oder nützlich.
Der Quellcode ist nunja leicht sehr unschön
Nen Anzeige-Bug eures Systems wird auch direkt deutlich, denn die Zeilennummern gehen nur bis 150. Cool!
Gut
Kommentare sind da. Bitte berücksichtigt, dass ich als Einsteiger das Rätsel geschrieben habe. Es ist mir klar, dass der Quellcode nicht vom Feinsten ist.
Ich denke, Newbies werden sich freuen, wenn sie sehen, das kein Meister vom Himmel fällt. Leute, die weiter sind, können sich freuen, da sie ja hier sehen können, um wieviel sie schon besser sind.
Für Newbies wäre es schön, wenn die Kritik konstruktiver wird. Das heißt, das erklärt wird, wo und wie man es verbessern kann.
Toll wäre es, wenn jemand mit Knowhow ein 10 Fragen Programm zu einem anderen Thema einstellt.
Als Einsteiger hätte ich Spass daran, zu sehen, wie unterschiedliche Programmstile gleiche Problematiken abarbeiten.
Bis denne
Terep
Und was ist, wenn Anfänger sich deine Fehler aneignen? Klar, man hat etwas gelernt und will es zeigen und zwar am besten, in dem man ein Tutorial oder sowas schreibt, aber das führt leider zu sehr vielen Texten, die von Anfängern geschrieben sind und daher auch dementsprechend Fehler haben, so dass andere Anfänger Dinge falsch lernen. Und das ist schlecht.
Das klingt jetzt wahrscheinlich sehr hart, aber ist nunmal so.
Viel zu viel zum lesen.
Seltsam: bis jetzt noch kein Kommentar zu den Fragen.
Anscheinen schauen alle kurz über den Quellcode. Keiner scheint es wirklich mit copy/paste einfach mal zu testen.
Es ist eine einfache Konsolenanwendung. Ziel ist und war es nicht, komplizierten Quellcode zu schreiben, sondern ein paar Fragen bzgl. Zeigerwissen zu bringen.
Schreibt doch einmal, wieviel richtige Antworten es im ersten Durchgang waren.
Jonathan
Leute, die ernsthaft C++ lernen wollen, kommen zwangsläufig auf Bücher von Stroustrup, Breymann, Wolf usw., für die ist es gut zu sehen, dass es nicht nur perfekten Quellcode gibt.
Wieso “viel zu viel zum lesen” ?. Es sollen Fragen beantwortet werden. Nach meiner Meinung ist viel zu wenig zum lesen da. Wenn es richtig fertig ist, wird man bei falschen Fragen verzweigen, zu einfacheren Fragen als eine Art Lernsystem. Aber das mache ich erst auf einer grafischen Oberfläche und das wird noch etwas dauern.
Also mit copy/paste testen und die Anzahl der richtigen Fragen posten, das wäre interessant.
Terep
Hehe. 10/10 richtig.