[C] tour hanoi

tour hanoi [C] - C - Programmation

Marsh Posté le 15-10-2004 à 21:00:24    

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);
     }
     
}

Reply

Marsh Posté le 15-10-2004 à 21:00:24   

Reply

Marsh Posté le 15-10-2004 à 21:03:26    

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 ...

Reply

Marsh Posté le 15-10-2004 à 21:04:31    

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]

Reply

Marsh Posté le 15-10-2004 à 21:05:01    

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

Reply

Marsh Posté le 15-10-2004 à 21:09:54    

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.

Reply

Marsh Posté le 15-10-2004 à 21:15:21    

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

Reply

Marsh Posté le 15-10-2004 à 21:20:18    

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
Reply

Marsh Posté le 15-10-2004 à 21:23:27    

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à.

Reply

Marsh Posté le 15-10-2004 à 21:33:12    

en fait je suis ivre.

Reply

Marsh Posté le 15-10-2004 à 21:39:23    

WhatDe a écrit :

Il est encore en mode gentil là.


 
 
lol ouf g de la chance alors.

Reply

Marsh Posté le 15-10-2004 à 21:39:23   

Reply

Marsh Posté le 15-10-2004 à 21:48:26    

Taz a écrit :

en fait je suis ivre.


Ivre d'amour ?  :love:

Reply

Marsh Posté le 15-10-2004 à 21:56:38    

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
Reply

Marsh Posté le 15-10-2004 à 21:57:33    

une ptite sugestion? :)

Reply

Marsh Posté le 15-10-2004 à 23:17:54    

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];  
 

Reply

Marsh Posté le 15-10-2004 à 23:32:34    

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. ++

Reply

Marsh Posté le 15-10-2004 à 23:44:08    

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

Reply

Marsh Posté le 31-10-2004 à 18:17:14    

c sur !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed