*C* Tours d'Hanoi, mon code

M

Membre supprimé 1

Invité
[cpp]#include <stdio.h>
#include <stdlib.h>
#define N 20

typedef struct { int sommet;
int tab[N];
} pile;

void empiler(int c, pile *p)
{ (*p).tab[(*p).sommet] = c;
(*p).sommet ++;
}

int depiler(pile *p)
{ (*p).sommet --;
return (*p).tab[(*p).sommet + 1];
}



int hanoi(pile *un, pile *deux, pile *trois, int n)
{ int c;
if (n == 0 ) return 0;
else
{ hanoi(un, trois, deux, n-1);
if ( (*un).sommet > 0){
c = depiler(un);
empiler(c, trois);
}
hanoi(deux, un, trois, n-1);
}
}


int main()
{ int n, i, d;
pile *un, *deux, *trois;
printf("Nombre d anneaux ? : ");
scanf("%d", &n);
un = (pile *)malloc(sizeof(int) * (n+1));
deux = (pile *)malloc(sizeof(int) * (n+1));
trois = (pile *)malloc(sizeof(int) * (n+1));

d = n;
printf("\npiquet UN :\n");
for(i=0 ; i<n ; i++)
{ (*un).tab = d ;
(*deux).tab = 0;
(*trois).tab = 0;
d--;
printf("%d\t", (*un).tab);
}
(*un).sommet = n-1;
(*deux).sommet = 0;
(*trois).sommet = 0;


hanoi(un, deux, trois, n);

printf("\nApres le jeu :\n\npiquet UN :\n");
for(i=1 ; i<= (*un).sommet ; i++)
{ printf("%d\t", (*un).tab);
}
printf("\npiquet DEUX :\n");
for(i=1 ; i<= (*deux).sommet ; i++)
{ printf("%d\t", (*deux).tab);
}
printf("\npiquet TROIS :\n");
for(i=1 ; i<= (*trois).sommet ; i++)
{ printf("%d\t", (*trois).tab);
}

return 0;
}
[/cpp]

Salut j'essaye de faire en C l'algo des tours d'Hanoi je sais pas si vous connaissez, j'suis arrivé à ça (au dessus) mais ca ne marche pas vraiment
Vous pouvez m'aider un ptit peu ? :D
Merkiiii
 

Mossieur Propre

Expert
à mon avis, y'a plus court :o

(j'avais créé un petit programme qui, suivant le nombre de disques indiqué dans le code, nous donnait chacune des étapes qu'il fallait faire pour résoudre le problème)
 
M

Membre supprimé 1

Invité
[citation=3934,1][nom]Mossieur Propre a écrit[/nom]à mon avis, y'a plus court :o

(j'avais créé un petit programme qui, suivant le nombre de disques indiqué dans le code, nous donnait chacune des étapes qu'il fallait faire pour résoudre le problème)
[/citation]

Oui mais ça je sais le faire, il suffit de faire une fonction hanoi qui s'apelle elle meme 2 fois avec un printf entre les 2 appels et ca affiche tous les déplacements
Je l'avais fait, mais lorsque j'essaye de faire avec la struct pile et en remplissant rééllement 2 piles ca ne marche pas (je dois mal l'écrire) voir au dessus...
 
M

Membre supprimé 1

Invité
[cpp]#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int N, cpt=0;

int **creermatrice(int l, int c)
{ int i,**p;
p = (int **)malloc(sizeof(int *) * l);
for (i=0 ; i<l ; i++)
{ p = (int *)malloc(sizeof(int) * c); }
return(p);
}

int **liremat(int l)
{ int **p;
int i, j;
p=creermatrice(l,3);

for (i=0 ; i<l ; i++)
{ for (j=0 ; j<3 ; j++)
{ if (j) p[j] = 0;
else p[j] = i+1;
}
}
return p;
}


void ecriremat(int **p, int l)
{ int i, j;
printf("\n\n");
for (i=0 ; i<l ; i++)
{ for (j=0 ; j<3 ; j++)
{ if (p[j] == 0) printf(".\t");
else printf("%d\t", p[j]); }
printf("\n");
}
printf("-------------------");
}


void traiter(int **p, int d, int a, int n)
{
int i=0, v;
while ( (i<n) && (p[d] == 0) )
i++;

if (i<n) { v = p[d];
p[d] = 0;
}
i=n-1;

while ( (i>=0) && (p[a] != 0) )
i--;
if (i>=0)
p[a] = v;

cpt++;
ecriremat(p, N);
}


void hanoi(int **p, int n, int un, int deux, int trois)
{
if (n == 0 ) {;}
else
{ hanoi(p, n-1, un, trois, deux);

traiter(p, un, trois, N);

hanoi(p, n-1, deux, un, trois);
}
}






int main()
{ int **p;

printf("Nombre d anneaux ? : ");
scanf("%d", &N);

p = liremat(N);
printf("\n\n");
ecriremat(p, N);

hanoi(p, N, 0, 1, 2);

printf("\n\nRealise en %d operations\n\n", cpt);

return 0;
}
[/cpp]

C'est bon j'y suis arrivé comme ceci
Merci
 
M

Membre supprimé 1

Invité
pourquoi on voit plus mes codes ?
Ca le fait sur plusieurs topics (et pas que sur MES posts) :

http://forum.presence-pc.com/forum2.php3?config=&post=497&cat=9&cache=cache&sondage=&owntopic=0&p=1&trash=&subcat=

http://forum.presence-pc.com/forum2.php3?config=&post=496&cat=9&cache=cache&sondage=&owntopic=0&p=1&trash=&subcat=

Kesskisspass? :bounce:
 

XLogo

Nouveau membre
Bonjour,

Je suis en train de programmer les tours d'Hanoï en Logo... connaissez-vous ce langage de programmation ?
Si quelqu'un connait XLogo et a déjà programmer les tours d'hanoï ou l'utilise à d'autres fins : se serait vraiment cool de me contacter !!!

Merci et bonnes fêtes de Noël à tous !
XLogo
 

Emmanuel Delahaye

Expert
C'est bon j'y suis arrivé comme ceci
Merci
Désolé pour le déterrage de topic, mais la mémoire n'est pas libérée...
[fixed]
Nombre d anneaux ? : 5




1 . .
2 . .
3 . .
4 . .
5 . .
-------------------

. . .
2 . .
3 . .
4 . .
5 . 1
-------------------
<...>
. . 1
. . 2
. . 3
. . 4
. . 5
-------------------

Realise en 31 operations

SYSALLOC Err: Not-matched list:
SYSALLOC Bloc 003D24E8 (20 bytes) malloc'ed at line 10 of 'main.c' not freed
SYSALLOC Bloc 003D2508 (12 bytes) malloc'ed at line 13 of 'main.c' not freed
SYSALLOC Bloc 003D2520 (12 bytes) malloc'ed at line 13 of 'main.c' not freed
SYSALLOC Bloc 003D2538 (12 bytes) malloc'ed at line 13 of 'main.c' not freed
SYSALLOC Bloc 003D2550 (12 bytes) malloc'ed at line 13 of 'main.c' not freed
SYSALLOC Bloc 003D2568 (12 bytes) malloc'ed at line 13 of 'main.c' not freed
SYSALLOC Released Memory

Press ENTER to continue.
[/fixed]
 

boub popsyteam

Grand Maître



Ahhh le logo :love: j'ai commencé avec ça il y a fort longtemps .... Disons 20 ans environ :ange:

C'est quoi tes questions ? :)
 

marsien

Grand Maître
Ahhh le logo :love: j'ai commencé avec ça il y a fort longtemps .... Disons 20 ans environ :ange:

C'est quoi tes questions ? :)
Faut pas confondre, y a 20 ans tu jouais aux Légo, tu sais ces petites pièces qui s'emboîtent :o




/voilà, sacéfè [:vendredi]
 

boub popsyteam

Grand Maître
Vu qu'on a environ le même age, tu as du en faire a peu pres en même temps que moi :evil:
 

XLogo

Nouveau membre
Le Logo est denouveau à la mode dans sa nouvelle version ! Je l'utilise pour faire entrer des jeunes gens dans la programmation : c'est quand-même plus digeste que le "C", non ?
Est-ce que quelqu'un, dans vos connaissances, utilise encore Logo ?
Est-ce que quelqu'un saurait programmer les tours d'Hanoï en Logo ?
Merci d'avance !
 

boub popsyteam

Grand Maître
Un bon MO5 et c'est reparti :o

je ne m'en sers plus mais je pense que je m'en souviens assez pour t'aider au besoin ;)

Et sinon on ne fait pas de code pour les gens, par contre on peut aider à corriger du code qui ne fonctionne pas !
 

Emmanuel Delahaye

Expert

http://judo.sourceforge.net/

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 707
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut