Verständnisproblem bei Übungsaufgabe
-
Hey Leute,
ich hoffe hier kann mir schnell jemand helfen.
ich bekomme es einfach nicht auf die Reihe die Ausgabe des folgenden Codes nachzuvollziehen.Ausgabe:
8o
7m
6k
5i
4g
3e
2c
1a#include <iostream> using namespace std; class Data { private: char i; char j; public: Data(void) { static int a = 0; static int b = 0; i = 49 + a; j = b + 'Z' + 7; a += 1; b += 2; } void Print(void) { cout << i << j << endl; } }; int main() { Data feld[2][2][2]; Data tablevalue; for (int u = 1; u >= 0; u--) { for (int v = 1; v >= 0; v--) { for (int w = 1; w >= 0; w--) { tablevalue = feld[u][v][w]; tablevalue.Print(); } } } return (0); }Ich hoffe, ich bringe euch damit nicht zu sehr zum Kopfschütteln.
vielen Dank schon mal.
-
Ja, das ist die Ausgabe, die der Code produziert (zumindest auf gängigen Systemen). Was genau ist nun deine Frage? Es geht halt darum, dass beim Erzeugen eines Arrays der Standardkonstruktor des Datentyps aufgerufen wird, für jedes Element, der Reihe nach.
-
hey, ja soweit hab ich das verstanden, theoretisch. Aber in meinem Kopf komme ich weder auf die
56(8) noch auf die 111(o)
-
Dann beschreib mal wie du das im Kopf durchgehst.
Irgendwo musst du da nämlich nen Fehler machen
-
also ich hoffe ich liege nicht komplett daneben

ich habe ein 3d array mit [2][2][2] also 8 Elementen richtig?
49 + 8 sind 57 (a+=1)
97('Z'+7) + 16 sind 113 (b+=2)
aber ich muss ja auf 56 und 111 kommen
danke!
-
Soweit richtig, bis auf eins: a und b werden inkrementiert, _nachdem_ i und j zugewiesen wurden. i und j kriegen also die alten Werte.
-
OHHH ja danke!
also die erste Ausgabe ist jetzt klar aber mir erschließt sich irgendwie noch nicht, wie ich danach weiter vorgehe. bzw doch aber da kommt bei mir wieder was mit dem zählen nicht hin ...
also ich springe zurück in die letzte for schleife und dann w-- dh. w=0
und dann?sorry irgendwie hängt da was bei mir

-
Naja dann w >= 0. Und das ist true wenn w == 0 ist.
Also läuft die Schleife weiter.
Beim nächsten Durchlauf dann wieder w-- => w == -1. Jetzt ist w >= 0 false. Also läuft diese for Schleife nicht mehr weiter.Also weiter mit der mittleren for Schleife.
usw.
-
danke für die Antwort, das mit der Schleife ist mir bewusst, aber ich komme irgendwie schon wieder nicht auf die nächste Ausgabe.
Ich verstehe also nicht warum jetzt als nächstes "7m" als Ausgabe kommt.
Ich sehe, dass bei beiden für den Rest der Ausgabe immer um 1 bzw um 2 runtergegangen wird. Und ich verstehe auch, dass das mit a+=1 b+=2 zusammenhängt. aber ich verstehe eben nicht, wie ich auf die nächsten Werte der Ausgabe komme.
Offentsichtlich hängt es mit der for Schleife zusammen. Aber warum wird jetzt nur um einen bzw 2 "runtergezählt"?
Ich befürchte, dass die Lösung total simpel ist, aber ich komme einfach nicht drauf.
danke

-
Es werden 8 Elemente erzeugt.
In der Reihenfolge 0 ... 7.
Welche Wertehabenbekommen diese Elemente?
In welcher Reihenfolge liegen diese in dem 3-fach Array?
Und in welcher Reihenfolge werden sie ausgegeben?