Programm umschreiben
-
Hallo zusammen,
ich möchte folgendes Programm umschreiben.
Das Ziel soll sein, die Scheiben auf b und nicht auf c zu setzen.
Was muss ich machen?
#include <stdio.h>/**
* Bewegt n Scheiben von Turm a nach Turm c und benutzt als Zwi-
* schenspeicher Turm b.
*/
static void bewege (char a, char b, char c, int n)
{
if (n == 1) {
printf("Lege die oberste Scheibe von Turm %c "
"auf Turm %c.\n", a, c);
} else {
bewege(a, c, b, n-1);
bewege(a, b, c, 1);
bewege(b, a, c, n-1);
}
}int main (int argc, char **argv)
{
bewege('a', 'b', 'c', 5);
return 0;
}
-
Was muss ich machen?
Dir überlegen, was nötig ist, um deine Scheiben auf c statt b setzen zu lassen, und es entsprechend umsetzen...
-
Du suchst die maschinell effektive Lösung für die Türme von Hanoi richtig?
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich nutze mal die Gelegenheit um fuer Haskell zu werben:
hanoi (0, _, _, _) = [] hanoi (n, from, to, using) = hanoi(n-1, from, using, to) ++ (from,to) : hanoi(n-1, using, to, from)
Daraus kann man auch C-Code generieren.
-
knivil schrieb:
I
Daraus kann man auch C-Code generieren.zeig doch mal, wie der generierte code aussieht.
-
/* GHC_PACKAGES base integer ghc-prim rts */ #include "Stg.h" EI_(base_GHCziBase_zpzp_closure); EI_(integer_GHCziInteger_smallInteger_closure); static StgWord rg9_srt[] = { (W_)&base_GHCziBase_zpzp_closure, (W_)&integer_GHCziInteger_smallInteger_closure }; II_(rg9_info); static StgWord rg9_closure[] = { (W_)&rg9_info, 0x0 }; static StgWord sHa_info[] = { ((W_)&rg9_srt+4), 0x0, 0x10010U }; ...
Etwa 1000 Zeilen (ghc -fvia-C -C hanoi.hs), wenn man noch etwas IO hinzufuegt:
import System.Environment main :: IO () main = do args <- getArgs let y = str2int( head args ) let a = hanoi(y,1,2,3) let b = length a putStrLn ( show b )
Als Kommandozeilenparameter wird die Scheibenzahl uebergeben.