Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1892 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] tour hanoi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] tour hanoi

n°874426
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:00:24  profilanswer
 

j'aimerais introduire dans mon programme une ligne de texte me donnant le nombre de transfert d'une tour a une autre.
 
j'ai donc utiliser un tableau a 3 dimanssions de compteur. le seul hic c'est qu'il me rajoute des transferts en trop. ex:au lieux de me metre un transfert de la tour 1 vers la tour , il me met un transfert de la tour 1 vers 3, 2 vers 3 et 3 vers 3. cependant il devrait seulement me compter un transfer de 1 vers 3. please help. voici mon code:
 
 
 
#include<stdio.h>
 
 
typedef struct el{int val; struct el *suiv;} Elem;
 
typedef Elem * Pile;
 
void initialiser(Pile *sommet)
{*sommet=NULL;}
 
void empiler(int v, Pile *sommet)
{
 Pile t=(Pile)malloc(sizeof(Elem));
 t->val=v;
 t->suiv=*sommet;
 *sommet=t;
 
}
 
 
 
void depiler(int *v, Pile *sommet)
{
  Pile tmp=NULL;
   
 if (*sommet!=NULL)
  {
   tmp=(*sommet)->suiv;
   *v=(*sommet)->val;
   free(*sommet);
  }
 *sommet=tmp;
 
}
 
void hanoi(int n, Pile *a, Pile *b, Pile *c,int d, int e, int f,int tab[],int tab2[])
{
 int z;
  if (n>=1)
  {
   hanoi(n-1,a,c,b,d,f,e,tab,tab2);
   depiler(&z,a);
   empiler(z,c);
   tab[z]+=1;
 
   printf("transfert du disque de la tour %d vers la tour %d \n",d,f);
   tab2[d,f] += 1;
   printf("%d deplacement du disque %d ver %d\n", tab2[d,f],d,f);
   printf("\n cours du tableau 2\n" );
   int i,j;
   for (i=1; i<=3; i++)
    for (j=1; j<=3; j++)
     if(i!=j)
         printf(" deplacement %d vers %d vaut %d\n",i,j,tab2[i,j]);
   hanoi(n-1,b,a,c,e,d,f,tab,tab2);
  }
}
 
 
 
 
void affiche(Pile p)
{
 
 
 while (p!=NULL)
  {
   printf("%d\n",p->val);
   p=p->suiv;
  }
}
 
 
main()
{
 
 //delcaration des variables
 int v,i,n,j,max=3;
 Pile a,b,c;
 int t[n],t2[max,max];
 initialiser(&a);
 initialiser(&b);
 initialiser(&c);
 
 
 
 printf("veuiller entrer le nombre de disques\n" );
 scanf("%d",&n);
 
 //initialiser la tour 1
 for(i=n;i>=1;i--)
  {  
    empiler(i,&a);
  }
 
 //initialilser a zero te tableau t
 for(i=0;i<n;i++)
 t[i]=0;
 
 
 
 
 printf("******affichage de la premiere tour 1 l'initialisation****** \n" );
 affiche(a);
 
 
 
 //initialisation a zero le tableau 2
 for (i=1; i<=3; i++)
  for (j=1; j<=3; j++)
      t2[i,j]=0;
 
 printf("******visualisation du tab2 au depart du programme******\n" );
 for (i=1; i<=3; i++)
  for (j=1; j<=3; j++)
  {printf("deplacement %d vers %d vaut %d\n",i,j,t[i,j]);}
 
       
       
       
 
 //debut du programe hanoi
 hanoi(n,&a,&b,&c,1,2,3,t,t2);
 printf("*****tour 1***** \n" );
 affiche(a);
 printf("*****tour 2***** \n" );
 affiche(b);printf("*****affiche tour 3*****\n" );affiche(c);
 
 
 
 
 printf("**********Deplacement jetons***********\n" );
 
 for(i=1;i<=n;i++)
  printf("t[%d]=%d\n",i,t[i]);
   
   
   
   
 printf("**********nombre de deplacement d'une tour a une autre***********\n\n" );
 
   
  for (i=1; i<=3; i++)
  for (j=1; j<=3; j++)
     {
      if (i!=j)
          printf(" %d deplacements de la tour %d vers %d \n ", t2[i,j], i, j);
     }
     
}

mood
Publicité
Posté le 15-10-2004 à 21:00:24  profilanswer
 

n°874429
Taz
bisounours-codeur
Posté le 15-10-2004 à 21:03:26  profilanswer
 

typedef struct el{int val; struct el *suiv;} Elem;
 
typedef Elem * Pile;
 
void initialiser(Pile *sommet)
{*sommet=NULL;
 
 
 
ce que je déteste ça ... dès la première ligne on ne sait plus qui est une structure et qui est un pointeur ...

n°874430
Taz
bisounours-codeur
Posté le 15-10-2004 à 21:04:31  profilanswer
 

t2[i,j], t2[max,max];
 
t'as vu ça ou toi ?
 
 for (i=1; i<=3; i++)
t'as vu où qu'en C on indexait sur [1;N]

n°874431
Taz
bisounours-codeur
Posté le 15-10-2004 à 21:05:01  profilanswer
 

void affiche(Pile p)
{
 
 
 while (p!=NULL)
  {
   printf("%d\n",p->val);
 
 
magnifique, plus plus d'incompréhension

n°874434
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:09:54  profilanswer
 

lol pour void affiche et la structure ca vient de mon cour. et si c'est pour critiquer c'est pas trop la peine de poster un message. je prefére que tu me dises tout simplement que c'est pas claire.

n°874440
Taz
bisounours-codeur
Posté le 15-10-2004 à 21:15:21  profilanswer
 

C'EST PAS CLAIR. et mon deuxième message te dit ce qui va pas.

n°874446
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:20:18  profilanswer
 

oui j'ai vue. je te remercie.
j'aurais préféré que tu me le dises sur un autre ton.


Message édité par pekultra le 15-10-2004 à 21:20:47
n°874447
WhatDe
Posté le 15-10-2004 à 21:23:27  profilanswer
 

pekultra a écrit :

oui j'ai vue. je te remercie.
j'aurais préféré que tu me le dises sur un autre ton.


Il est encore en mode gentil là.

n°874456
Taz
bisounours-codeur
Posté le 15-10-2004 à 21:33:12  profilanswer
 

en fait je suis ivre.

n°874459
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:39:23  profilanswer
 

WhatDe a écrit :

Il est encore en mode gentil là.


 
 
lol ouf g de la chance alors.

mood
Publicité
Posté le 15-10-2004 à 21:39:23  profilanswer
 

n°874471
WhatDe
Posté le 15-10-2004 à 21:48:26  profilanswer
 

Taz a écrit :

en fait je suis ivre.


Ivre d'amour ?  :love:

n°874476
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:56:38  profilanswer
 

bon j'ai remplacer tous mes tab2[i,j] par tab2[i][j] ainsi que dans les declarations par contre il m'indique un message d'erreur lors de la compilation dans le programme hanoi.
 
invalid use of array with unspecified bounds


Message édité par pekultra le 15-10-2004 à 21:57:02
n°874480
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 21:57:33  profilanswer
 

une ptite sugestion? :)

n°874554
cris56
Posté le 15-10-2004 à 23:17:54  profilanswer
 

la taille du tableau doit etre une constante (resolu a la compilation) et lors du passage en parametre, passe un pointeur sur un tableau pour pouvoir indexer en 2d, int (*tab2)[DIM_SIZE] ou int tab2[][DIM_SIZE]
 
en c99 tu peux faire
 
const size_t DIM_SIZE = 3;
 
 
 
void hanoi(int n, Pile *a, Pile *b, Pile *c,int d, int e, int f,int tab[],int tab2[][DIM_SIZE]);
 
int main()  
{  
 ...
 int t2[DIM_SIZE][DIM_SIZE];  
 

n°874563
pekultra
un esprit st dans un corp st
Posté le 15-10-2004 à 23:32:34  profilanswer
 

tu c koi? je taimmmmmmmmmmmmmmmmme. :) je te remercie beaucoup. (je suis pas une bete en info) ca fait tte lapres midi que je galére. ++

n°874576
Taz
bisounours-codeur
Posté le 15-10-2004 à 23:44:08  profilanswer
 

une fonction avec 9 arguments, c'est pas un cadeau

n°887186
viewtiful2
Posté le 31-10-2004 à 18:17:14  profilanswer
 

c sur !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] tour hanoi

 

Sujets relatifs
Help!! Mayday!!! SOS, Panpan (je crois avoir tour essaye!!)tours d'Hanoi
quel est le meilleur langage (2eme tour)[Oracle] decode marche pas (tour de magie)
[blabla@hosto] Le topic des chomistes bouffeurs d'allocsÉlection du modérateur supplémentaire, 2è tour
Les tours Hanoi en java en applet ... Aidez moi Tour de Hanoï..
Vote pour l'election du futur modo: 2e tour 
Plus de sujets relatifs à : [C] tour hanoi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR