tour hanoi [C] - C - Programmation
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 ...
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]
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
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.
Marsh Posté le 15-10-2004 à 21:15:21
C'EST PAS CLAIR. et mon deuxième message te dit ce qui va pas.
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.
Marsh Posté le 15-10-2004 à 21:23:27
pekultra a écrit : oui j'ai vue. je te remercie. |
Il est encore en mode gentil là.
Marsh Posté le 15-10-2004 à 21:39:23
ReplyMarsh 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
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];
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. ++
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);
}
}