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.


Log in to reply