IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Tour de hanoï


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Tour de hanoï
    Bonsoir a tous.
    J'ai un soucis dans mon code qui permet de calculer et d'afficher les differents mouvement fonction du nombre de disque.

    On m'impose d'utiliser un model pour la creation a savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TOH ( numDiscs, fromPeg, toPeg )
    {
    if ( numDiscs is 1 ) then
    output fromPeg, -> toPeg  /*output = print console */
     
    else
    {
    otherPeg = theOtherPeg(fromPeg, toPeg) /*Mon probleme*/
    TOH(numDiscs - 1, fromPeg, otherPeg)
    outpout Frompeg, -> ,toPeg
    TOH(numDisc -1, otherPeg, toPeg)
    }
    }
    Mon probleme se situe au niveau du "otherPeg", je ne comprend pas comment l'ecrire et malgrés moulte tentative la compilation foire a ce niveau.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include "stdio.h"
    #include "stdlib.h"
     
    void tours(int n,char depart,char arrivee)
    	{ 
    	  if(n==1)
    	     printf("\nJe bouge le disque 1 du plot %c au plot %c",depart,arrivee);
     
    	  else
    	      {
    		  char tempo;
    		  tours(n-1,depart,tempo);
    		  printf("\nJe bouge le disque %d du plot %c au plot %c",n,depart,tempo);
    		  tours(n-1,tempo,arrivee);
    	  return; 
    	      }
    	}
    main()
    	{ 
    	int n;
     
    	setvbuf(stdout, NULL, _IONBF, 0);
     
    	  printf("Combien de disque ? : ");
    	  scanf("%d",&n);
    	  printf("Voici le resultat :\n\n");
    	  tours(n,'A','C','B');
     
    	  return 0;
    	}
    Alors vous pourriez me dire : "Mais andouille ! Declare le directement au debut". Et vous auriez raison j'ai tester ca fonctionne... mais je doit resepcter le schema directeur...

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 393
    Points : 23 740
    Points
    23 740
    Par défaut
    En réalité, tu n'as pas du tout besoin d'une fonction theOtherPeg() pour résoudre le problème (fort simple, une fois qu'on l'a compris) des Tours de Hanoï. L'idée est de passer le piquet intermédiaire parmi les arguments de la fonction récursive, au même titre que les piquets de départ et d'arrivée.

    Sinon, si tu tiens à utiliser ce format — ce que je t'encourage fortement à vérifier car je suis presque certain que tes profs ne t'ont pas imposé une telle fonction —, il n'y a que trois piquets et tu en passes deux à ta fonction. Il suffit de renvoyer le troisième.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Si ça t'intéresse, voici une implémentation de l'algo décrit par Obsidian écrit en Python

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
     
    import sys
     
    # Fonction récursive qui déplace les pions d'une tour x vers une tour y
    # Paramètres entrée :
    #	nb de pions à déplacer
    #	tour de départ
    #	tour d'arrivée
    #	tour intermédiaire (facultatif)
    # Valeur sortie : aucune
    def deplace(nb, tab, dep, arr, int=None):
    	global mvt
     
    	if nb == 1:
    		# Ici on est en fin de récursivité – Il ne reste plus qu'un seul pion à déplacer
    		tab[dep]-=1
    		tab[arr]+=1
    		mvt+=1
     
    		# On affiche le mouvement et on quitte la fonction
    		print "Mvt %d: %d %d: Etat: %s" % (mvt, dep + 1, arr + 1, tab)
    		return
    	# if
     
    	nb-=1
     
    	# Déplacement récursif des pions restants de la tour de départ vers la tour intermédiaire
    	# La tour d'arrivée servira de tour de rangement provisoire
    	deplace(nb, tab, dep, int, arr)
     
    	# Déplacement du dernier pion de la tour de départ vers la tour d'arrivée
    	deplace(1, tab, dep, arr)
     
    	# Déplacement récursif des pions restants de la tour intermédiaire vers la tour d'arrivée
    	# La tour de départ servira de tour de rangement provisoire
    	deplace(nb, tab, int, arr, dep)
    # deplace()
     
    # Programme principal
     
    # Initialisation tours et compteur de mouvements
    mvt=0
    tour=[int(sys.argv[1]), 0, 0]
     
    # Affichage position de départ
    print "Départ: %s" % tour
     
    # Lancement mouvement de la tour 1 vers la tour 3 en utilisant la tour 2 comme intermédiaire
    deplace(tour[0], tour, 0, 2, 1)

    Si t'es sous Linux, ce code est directement utilisable. Te suffit de l'enregistrer dans un fichier "hanoy.py", le rendre exécutable avec le droit x et exécuter ./hanoy.py 5 (par exemple si tu veux jouer avec 5 pions).
    Le programme te montrera chaque déplacement avec, à chaque fois, le nombre de pions sur chaque tours...

    Citation Envoyé par overside Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "stdio.h"
    #include "stdlib.h"
    Attention, les include avec des guillemets présupposent que stdio.h et stdlib.h se trouvent dans ton répertoire courant.
    Généralement, stdio.h et stdlib.h se trouvent dans "/usr/include". Donc soit tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "/usr/include/stdio.h"
    #include "/usr/include/stdlib.h"
    Soit tu utilises la notation <> qui indique au préprocesseur d'aller directement les récupérer dans le ou les dossiers par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdio.h>
    #include <stdlib.h>

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour ces pistes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tours de Hanoï
    Par bentarito dans le forum Débuter
    Réponses: 6
    Dernier message: 02/01/2011, 23h43
  2. Tour de Hanoï : problème
    Par frank2243 dans le forum C++
    Réponses: 3
    Dernier message: 17/09/2009, 23h45
  3. [MIDlet Pascal] Jeu des Tours de Hanoï
    Par krachik dans le forum Contribuez
    Réponses: 1
    Dernier message: 27/05/2009, 20h04
  4. Variante des tours de Hanoï (disques pairs, impairs)
    Par loader dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 23/09/2008, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo