Turmbau zu Babel
-
Habe mal probiert dein Klassenprogramm in mein Funktionen&Array-Programm zu übertragen.
Aber ich schaffe es nicht..Ich habe die Arrays gegeben:
int Stab_1[AnzahlderScheiben]; int Stab_2[AnzahlderScheiben]; int Stab_3[AnzahlderScheiben];
So sieht meine Babelfunktionen aus:
void babel(int Scheiben, int von, int nach, int Hilf) { if (Scheiben == 0) return; babel(Scheiben-1,von,Hilf,nach); bewege (von,nach); zeichne(); babel(Scheiben-1,Hilf,nach,von); }
Das Problem habe ich mit
void bewege(int von, int nach) { }
Hier muss ich mit den Arrays arbeiten, leider geht das immer in die Hose.
Könnt ihr mir hier helfen?Die Funktion zeichne () habe ich.
Vielen,vielen Dank.
-
Wie stellt sich bei deinen Arrays denn dar, welche Scheiben auf einem Stab sind?
Gehe ich Recht in der Annahme, dass du dies selber nicht so genau weißt? Hier liegt dann nämlich die Wurzel deines Problems.
-
Stab_1: {5, 4, 0, 0, 0}
Stab_2: {3, 2, 1, 0, 0}
Stab_3: {0, 0, 0, 0, 0}
Stab_array: {{5, 4, 0, 0, 0},
{3, 2, 1, 0, 0},
{0, 0, 0, 0, 0}}
sieht so aus:
| | |
| | |
| <|> |
<<<<|>>>> <<|>> |
<<<<<|>>>>> <<<|>>> |
-------------------------------------
-
Dann wirst du dir entweder merken müssen, wo die Spitze ist (hier bietet sich wieder eine Klasse an oder eben gleich std::vector, welcher das sowieso schon macht) oder du musst immer die Spitze suchen. Und dann tauscht du.
-
Wie suche ich denn die Spitze?
Dann muss ich doch eine neue Funktion getSpitze() schreiben oder?
also void getspitze()
und da die kleinste zahl aus dem stab suchen.
Aber wie?
-
Das oberste Element ist das letzte, welches keine 0 ist.
-
Also:
void getspitze()
Wie suche ich denn Zahlen in einem array?
Da muss doch sowas sein wie
if x == 1
....
if x == 2
..usw.
Ich kann das mit Arrays einfach überhaupt nicht.
-
Hilbert schrieb:
Ich kann das mit Arrays einfach überhaupt nicht.
Das sehe ich auch. Wieso machst du es dann damit? Arrays sind eine eher schlechte Lösung für die Problemstellung.
-
Das ist eine Aufgabe die wir machen müssen.
Habe leider nicht mehr viel Zeit und zerbreche mir schon eine Woche den Kopf darüber.Sowas hab ich bis jetzt:
if (Stab_array[from][5] > 0)
Stab_array[from][5] = 0
else
{
if (Stab_array[from][4] > 0)
Stab_array[from][4] = 0
else
{
if (Stab_array[from][3] > 0)
Stab_array[from][3] = 0
else
{
if (Stab_array[from][2] > 0)
Stab_array[from][2] = 0
else
{
if (Stab_array[from][1] > 0)
Stab_array[from][1] = 0
else
{
if (Stab_array[from][0] > 0)
Stab_array[from][0] = 0Aber das ist mal wieder total falsch.. Eher Augenkrebsfördernd für euch.
}
-
Wenn du mehrere Wochen Zeit hattest, warum hast du die Zeit nicht mal genutzt um die Grundlagenkapitel irgendeines Lehrwerks anzusehen? Das wäre eine Sache von 30 Minuten gewesen. Jetzt ist es ein bisschen spät.
-
SeppJ schrieb:
Turmbau zu Babel macht die Sache aber viel einfacher:
void baue_turm(unsigned &anzahl_stockwerke) { baue_turm(++anzahl_stockwerke); } int main() { unsigned anzahl_stockwerke=0; baue_turm(anzahl_stockwerke); }
[...]
Naja, der Geschichte nach müsste man den Overflow noch irgendwie abfangen. Da ja besagter Turm heute nicht mehr steht, könnte man auch eine
turm
-Klasse nehmen und am Ende einen destructor aufrufen...Und dann ein
cout << "Und zur Strafe schuf der Herr BASIC, FORTRAN, PL1, Postscript, C++, Java, Perl, Assembler, Lisp, Python, Occam ..... ";