Brauche dringen Hilfe



  • Hi, Also ich studiere im ersten Semester Wirtschaftsinformatik...

    Ich konnte mich bei den Praktikas in C++ immer durchmooglen und konnte die Aufgaben auch immer auf meine Weise schreiben....

    Die Klausur sieht allerdings anders aus Wir bekommen auf Papier einen Quelltext vorgegeben und müssen aufschreiben was das Programm ausspuckt.

    Ich habe schon seid Tagen ein paar Altklausuren vor mir liegen und bin förmlich am verzeifeln.

    Die Programme sind ganz anders geschrieben als ich sie je schreiben würde und ich verstehe nicht ansatzweise wie sie funktionieren.

    z.B.: habe ich folgendes Problem.

    class Data
    {
    private:
    char x;
    char y;

    public:

    data(void)
    { static int z = 0;
    x = 97 + x -49;
    y= 97+ z;

    z ++
    }
    void print(void)
    {
    cout<< x << "-" << y << endl;
    }
    }

    int main()
    {data table[3][3]
    data tablevalue;

    for(int j =0; j< 3; j++)
    {
    for(intk =0; k< 3; k++)
    {
    tablevalue = table[k][j]
    tablevalue.print
    }
    }
    return 0;
    }

    }

    Meine Frage:

    Was wird nach oben übergeben.

    Eigentlich wird doch nur so oft bis er counter durchgelaufen ist (also 9 mal die Funktion aufgerufen oder? ALso sollte man meinen.

    Da ich aber die antworten habe was bei rauskommt wenn man die parameter j und k vertauscht weiß ich dass anscheinend etwas über geben wird... aber was?

    die Speicher des arrays sind doch leer, was wird denn da mit tablevalue gleichgesetzt?

    [code="cpp"]



  • Welchen Datentyp haben die einzelnen Arrayelemente?
    Was macht ein Konstruktor?

    Wenn man programmieren lernt, darf man die Programme durchaus übersetzen und auch laufen lassen (sogar mit einem Debugger).



  • Wenn Du Dich in den Praktika immer nur durchgemogelt hast statt C++ zu lernen, ist das nur folgerichtig, dass Du in der Klausur durch fällst. Du hattest in den Praktika wahrscheinlich genügend Zeit, die Grundlagen so weit zu lernen, dass Du die Klausur bestehst. Ich glaube nicht, dass Du jetzt plötzlich schneller C++ lernst, wenn Dir jemand sagt, was das vorliegende Programm macht.

    Über Altklausuren zu brüten und auf eine Erhellung hoffen ist nicht die effizienteste Art irgendetwas zu lernen. Es ist besser, zuerst C++ anhand eines geeigneten Kurses zu lernen und mit Hilfe der Altklausuren zu prüfen, ob man erfolgreich war. Wenn man die Altklausuren nicht versteht, dann muss man halt wieder zurück zum Start, da der Lernerfolg sich nicht ausreichend eingestellt hat.

    Das gilt übrigens auch für den späteren Beruf. Leider gibt es zu viele, die sich durch die Klausuren durchgemogelt haben und das im Berufsleben weiter treiben und diejenigen, die vernünftig gelernt haben, die Arbeit machen lassen. Es wäre schön, wenn Du den Ehrgeiz hättest, nicht zu ersteren gehören zu wollen. Ich wünsche Dir auf jeden Fall viel Erfolg beim Lernen (und nicht beim auswendig lernen von Klausuren) 😉 .



  • Um den Code zu verstehen, hilft einrücken ungemein!
    Dann sind da noch einige Fehler im Code ... So wird das ja wohl (hoffentlich) nicht in deiner Beispiel-Klausur stehen!!!
    Wie erwartest du, dass wir dir helfen, wenn du den Code so unsauber postest?!?

    class data  // 1. Abtipp Fehler - der Name der Klasse müsste wohl data lauten
                //                    zumindest wird er im restl. Programm klein
                //                    geschrieben
    {
    private:
      char x;
      char y;
    
    public:
      data(void)
      { 
        static int z = 0;
        x = 97 + x -49;
        y= 97+ z;
        z++;  // 2.Abtipp Fehler - Semikolon vergessen
      }
    
      void print(void)
      {
        cout<< x << "-" << y << endl;
      }
    };   // 3. Abtipp Fehler - Semikolon vergessen
    
    int main()
    {
      data table[3][3];  // 4. Abtipp Fehler - Semikolon vergessen
      data tablevalue;
    
      for(int j =0; j< 3; j++)
      {
        for(intk =0; k< 3; k++)
        {
          tablevalue = table[k][j];
          tablevalue.print();  // 5. Abtipp Fehler - Semikolon vergessen
        }
      }
      return 0;
    }
    
    /*}*/ // 6. Abtipp Fehler - Klammer zu viel
    

    Aber wollen wir mal nicht so sein. ...

    data table[3][3];
    

    Das ist ein 2 dimensionales Array in dem die einzelnen Elemente vom Datentyp data sind. Das ist 3*3 Felder gross, von daher werden 9 Elemente angelegt und dementsprechend 9 mal der Konstruktor der Klasse aufgerufen.

    data(void)
      { 
        static int z = 0;
        x = 97 + x -49; // das x auf der rechten Seite der Zuordnung ist noch nicht
                        // initialisiert!! Dort könnte jeder Wert (zufällig was im 
                        // Speicher steht) enthalten sein.
                        // Demnach kann dir NIEMAND sagen, was die genaue Ausgabe
                        // des Programms ist. Das kann auch bei jedem Programmaufruf
                        // eine andere Ausgabe sein.
                        // Daher tippe ich mal darauf, dass du hier irgendwo wieder
                        // einen Fehler beim Abtippen begangen hast!! (Oder die 
                        // Klausuraufgabe ist für den Popo)
        y= 97+ z;
        z++;  // 1.Abtipp Fehler - Semikolon vergessen
      }
    

    Und mit diesem nicht initialisierten x erübrigt sich jedwede Prognose über die Ausgabe.



  • Lade dir eine C++ IDE runter, z.B. Codeblocks.
    Dann tippst du die Stellen die du nicht verstehst ab und schaust was das Programm ausspuckt.
    Außerdem kannst du mit dem Debugger Breakpoints setzen. Dann hast du die Möglichkeit, den Programmzustand zu analysieren, z.B. Variablenwerte anschauen.

    Das und nur das ist der Weg C++ zu lernen. (+natürlich die entsprechende Theorie)
    Du wirst weder durchs Fragen hier viel neuen Lernen, noch durchs Anstarren von Programmcode. Du musst dich mit dem C++ Code "spielen" um zu sehen, welche Änderung welche Auswirkung hat.


Log in to reply