Pointer Rätsel

Drucke diesen Post This page as PDF Posted by fkrauthan | Posted in Rätsel und Fun | Posted on 10-12-2008

Tags: , , ,

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

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
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. // aus praktischen Gründen global gestellt
  7.     bool weiter = true;   // um aus der Auswahlschleife in die Fragen zu kommen
  8.     bool ende = false;    // für das vorzeitige Beenden des Programmes
  9.     int punkte = 0;      // Punktezähler
  10.     char  eingabe;        // Nutzereingabe
  11.  
  12.  
  13.  
  14.  
  15. void start()
  16. {
  17.     cout << "\nEin kleiner Selbsttest in C++   Fragen rund um den Zeiger  \n";
  18. }
  19.  
  20. void begleitwort()
  21. {
  22.     cout << "\n\nKurze Info:";
  23.     cout << "\n  Achtung, dies ist von einem C++ Einsteiger für Anfänger geschrieben worden.";
  24.     cout << "\n  Ziel dieser Anwendung ist es, sich mit dem Pointer zu beschäftigen.";
  25.     cout << "\n  Falsche Antworten werden kurz kommentiert.";
  26.     cout << "\n  Wer Fehler findet oder Anregungen hat, posten!";
  27.     cout << "\n\n  Dezember 2008, Region Hannover, Terep.\n\n\n";
  28. }
  29.  
  30. int frage_1 ()
  31. {
  32.     weiter = true;
  33.     int richtig = 0;
  34.  
  35.     cout << "\n\n\nFrage 1:\n";
  36.     cout << "\n Zwei Zeiger sollen deklariert werden.";
  37.     cout << "\n Nur eine Antwort ist richtig:\n";
  38.     cout << "\n A     int * zahl1, zahl 2;";
  39.     cout << "\n B     int* zahl1 = 4, zahl2 = 5;";
  40.     cout << "\n C     int zahl[2];";
  41.     cout << "\n D     int *zahl1, *zahl2;";
  42.     cout << "\n Q     Programmabbruch   ";
  43.  
  44.     while (true == weiter)
  45.     {
  46.     cout << "\n          Deine Entscheidung:   ";
  47.     cin >> eingabe;
  48.    
  49.     weiter = false;  // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
  50.     switch (eingabe)
  51.         {
  52.         case 'a':
  53.         case 'A':
  54.         cout << "\n A ist falsch. Nur zahl1 ist ein Zeiger, zahl2 nicht";
  55.         cout << "\n Stichwort: Zeigergrundlagen";
  56.            case 'b':
  57.         case 'B':
  58.         cout << "\n B ist falsch. Wie in A ist zahl1 ein Zeiger, zahl2 nicht.";
  59.    
  60.         case 'c':
  61.         case 'C':
  62.         cout << "\n Falsch, in C wird ein Array deklariert, kein Zeiger.";
  63.           break;
  64.  
  65.         case 'd':
  66.         case 'D':
  67.         cout << "\n\nD   ist richtig.";
  68.         richtig = 6;
  69.         break;
  70.  
  71.         case 'q':
  72.         case 'Q':
  73.         ende = true;
  74.         break;
  75.  
  76.        
  77.         default:
  78.         cout << "\n\n       Falsche Eingabe mit: '" << eingabe << "' \n";
  79.         weiter = true;    //Ausstiegsbedingung nicht erfüllt
  80.     }   // Ende switch
  81.     }  // Ende while
  82.  
  83.     return (richtig);
  84. }
  85.  
  86. int frage_2 ()
  87. {
  88.     weiter = true;
  89.     int richtig = 0;
  90.  
  91.     cout << "\n\n\nFrage 2:\n";
  92.     cout << "\n int zahl1 = 5, zahl2 = 10; ";
  93.  
  94.     cout << "\n Welche Möglichkeit druckt '5' aus?";
  95.  
  96.     cout << "\n Nur eine Antwort ist richtig:\n";
  97.     cout << "\n A     int *zgr = zahl1;  cout <<  zgr;";
  98.     cout << "\n B     int *zgr = zahl1;  cout << *zgr;";
  99.     cout << "\n C     int *zgr = &zahl1; cout << &zgr;";
  100.     cout << "\n D     int *zgr = &zahl1; cout << *zgr;";
  101.     cout << "\n Q     Programmabbruch   ";
  102.  
  103.     while (true == weiter)
  104.     {
  105.     cout << "\n          Deine Entscheidung:   ";
  106.     cin >> eingabe;
  107.    
  108.     weiter = false;  // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
  109.     switch (eingabe)
  110.         {
  111.         case 'a':
  112.         case 'A':
  113.             case 'b':
  114.         case 'B':
  115.         cout << "\n A ist falsch. Fehlermeldung:invalid conversion from ‘int’ to ‘int*.";
  116.         cout << "\n B ist falsch. zusätzlich noch zahl2 statt zahl1.";
  117.         cout << "\n Stichwort: Zeigergrundlagen.";
  118.         break;
  119.            
  120.         case 'c':
  121.         case 'C':
  122.         cout << "\n C ist falsch.  & ist ein Adressoperator.";
  123.         cout << "\nSomit wird nicht 5 gezeigt, sondern die Speicheradresse von zahl1.";
  124.           break;
  125.  
  126.         case 'd':
  127.         case 'D':
  128.         cout << "\n\nD   ist richtig.";
  129.         richtig = 6;
  130.         break;
  131.  
  132.         case 'q':
  133.         case 'Q':
  134.         ende = true;
  135.         break;
  136.  
  137.        
  138.         default:
  139.         cout << "\n\n       Falsche Eingabe mit: '" << eingabe << "' \n";
  140.         weiter = true;    //Ausstiegsbedingung nicht erfüllt
  141.     }   // Ende switch
  142.     }  // Ende while
  143.  
  144.     return (richtig);
  145. }
  146.  
  147.  
  148. int frage_3 ()
  149. {
  150.     weiter = true;
  151.     int richtig = 0;
  152.  
  153.     cout << "\n\n\nFrage 3:\n";
  154.     cout << "\n int zahl1 = 5; int *zgr; ";
  155.  
  156.     cout << "\n Wie bringt man den Zeiger zgr dazu, den Wert von zahl1 zu zeigen?";
  157.     cout << "\n Bei welcher Möglichkeit geht es?";
  158.     cout << "\n A     Nein, mit Zeigern kann man zwar den Wert anzeigern, aber nicht ändern.";
  159.     cout << "\n B     Ja, ganz einfach:    zgr =  zahl1; cout <<  zgr;";
  160.     cout << "\n C     Ja, ganz einfach:   &zgr = &zahl1; cout << &zgr;";
  161.     cout << "\n D     Ja, ganz einfach:   &zgr = *zahl1; cout << *zgr;";
  162.     cout << "\n E     Ja, ganz einfach:   &zgr = &zahl1; cout << &zgr;";
  163.     cout << "\n F     Ja, ganz einfach:    zgr = &zahl1; cout << *zgr;";
  164.     cout << "\n G     Ja, ganz einfach:   *zgr = *zahl1; cout << *zgr;";
  165.     cout << "\n Q     Programmabbruch   ";
  166.  
  167.     while (true == weiter)
  168.     {
  169.     cout << "\n          Deine Entscheidung:   ";
  170.     cin >> eingabe;
  171.    
  172.     weiter = false;  // Ausstiegsbedingung wird unterstellt, im default-Fall zurückgenommen
  173.     switch (eingabe)
  174.         {
  175.         case 'a':
  176.         case 'A':
  177.              cout << "\n A ist falsch";
  178.         cout << "\n Stichwort: Zeigergrundlagen";
  179.         break;
  180.  
  181.         case 'b':
  182.         case 'B':
  183.              cout << "\n B ist falsch;  error: invalid conversion from ‘int’ to ‘int*.";
  184.         cout << "\n Stichwort: Zeigergrundlagen";
  185.         break;
  186.        
  187.         case 'c':
  188.      

Comments (9)

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. :)

Write a comment