Tour de hanoi

Fermé
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013 - 2 avril 2013 à 13:36
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013 - 2 avril 2013 à 22:55
bj :) j'ai une problème au niveau de ce code du jeu de tour de Hanoi et je serai content de vous aide et merci d'avanc
c mon code
#include <iostream>
#include "Anneau.h"
#include "Tour.h"
#include "JeuHanoi.h"
using namespace std;
Anneau::Anneau( int d )
{
diamètre=d;
}
int Anneau::getdiamètre()
{
return (diamétre);
}

Anneau::~Anneau ()
{

}

Tour::Tour (int N, char c )
{
nb_dismax=N;
alias='c';
pile=new Anneau [nb_dismax=N];
}
void Tour::ajouter(Anneau Disq)

{
if (! est_pleine())
pile [nb_dis];
nb_dis++;
else
cout << "tour est pleine ";


}
void Tour::enlever()
{
if ( !est_vide())
nb_dis--;
else
cout<<" tour est vide";
}
bool Tour::est_pleine()
{
return (nb_dis==nb_dismax);
}
bool Tour::est_vide()
{
return (nb_dis==0);
}
Disque Tour::sommet()
{
if (est_vide())
return (-1);
else
return (pile[nb_dis-1]);
}
Tour::~Tour()
{
delete[] pile;
}

JeuHanoi::JeuHanoi(int k)
{
nb_disques=k;
TourA(k,A);
TourB(k,B);
TourC(k,c);

}
JeuHanoi::~JeuHanoi()
{

}
JeuHanoi::déplacer(char de, char vers) {
int DA = 0;
int DB = 0;
int DC = 0;
nb_deplacements =0.



if (!TourA.est_pleine())
DA = TourA.sommet().getdiamètre();
if (!TourB.est_pleine())
DB = TourB.sommet().getdiamètre();
if (!TourC.est_pleine())
DC = TourC.sommet().getdiamètre();

if (de == 'A') {
if (vers == 'B') {
if (DA > DB && DB != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourB.ajouter(TourA.sommet());

cout<<"L'anneau de diamètre DA est déplacé de la tour A vers la tour B";
nb_deplacements++;
return true;
}
}
else {
if (DA > DC && DC != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourC.ajouter(tourA.sommet());

cout<<"L'anneau de diamètre DA est déplacé de la tour A vers la tour C";
nb_deplacements++;
return true;
}

}
}
else {
if (de == 'B') {
if (vers == 'A') {
if (DB > DA && DA != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourA.ajouter(TourB.sommet());

cout<<"L'anneau de diamètre DB est déplacé de la tour B vers la tour A";
nb_deplacements++;
return true;
}
}
else {

if (DB > DC && DC != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourC.ajouter(TourB.sommet());

cout<<"L'anneau de diamètre DB est déplacé de la tour B vers la tour C";
nb_deplacements++;
return true;
}
}
}
else {
if (vers == 'A') {
if (DC > DA && DA != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourA.ajouter(TourC.sommet());

cout<<"L'anneau de diamètre DC est déplacé de la tour C vers la tour A";
nb_deplacements++;
return true;
}
}
else {
if (DC > DB && DB != 0) {
cout<<"Deplacement Illegal";
return false;
}
else {
TourB.ajouter(TourC.sommet());

cout"L'anneau de diamètre DC est déplacé de la tour C vers la tour B";
nb_deplacements++;
return true;
}
}
}
}
}

bool JeuHanoi::fin()
{
return(TourA.nb_dis==0);

}

int main()
{
cout << "Hello world!" << endl;
JeuHanoi J(3);
while(!J.fin())
{
char de,vers;
do
{
cout<<"de:";
cin>>((de=='A')||(de=='B')||(de=='C'))
do
{
cout<<"vers:";
cin>>vers;

}while ((vers=='A')||(vers=='B')||(vers=='C'))
J.déplacer(de,vers);

}
}

return 0;
}

4 réponses

Armulis Messages postés 1236 Date d'inscription vendredi 17 juin 2011 Statut Membre Dernière intervention 10 mai 2020 408
Modifié par Armulis le 2/04/2013 à 13:37
C'est super génial, mais si tu pouvais commencer par nous dire ce qu'on doit chercher, on aurait moins de peine à t'aider.
Et explique éventuellement (si t'as l'impression que c'est utile) un peu mieux la situation =D
C'est bien du C++ ton langagè?
0
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013
2 avril 2013 à 13:40
et c la declarations des methodes:
#ifndef ANNEAU_H_INCLUDED
#define ANNEAU_H_INCLUDED
class Anneau
{
private
int diamètre;
public
Anneau(int);
int getdiamètre;
~Anneau();
};



#endif // ANNEAU_H_INCLUDED





#ifndef TOUR_H_INCLUDED
#define TOUR_H_INCLUDED
class Tour
{
private
int nb_dismax ;
int nb_dis ;
Disque*pile ;
char alias ;
public
//Constructeur
Tour (int,char);

//methodes
bool est_vide ();
bool est_pleine();
void ajouter (Disque);
void enlever();
Anneau sommet();
~Tour();

};



#endif // TOUR_H_INCLUDED










#ifndef JEUHANOI_H_INCLUDED
#define JEUHANOI_H_INCLUDED
class JeuHanoi
{

private
int nb_disques,DA,DB,DC,nb_deplacements;
Tour TourA,TourB,TourC;
public
//constructeur
JeuHanoi(int);
~JeuHanoi();
bool fin();
bool déplacer (char,char);
};


#endif // JEUHANOI_H_INCLUDED
0
Armulis Messages postés 1236 Date d'inscription vendredi 17 juin 2011 Statut Membre Dernière intervention 10 mai 2020 408
2 avril 2013 à 13:41
Mais arrête d'envoyer du code sans arrêt, parle en français! =D
0
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013
2 avril 2013 à 13:48
bj :)
lorsque je fait la compilation ils apparaissent des messages d'erreur comme suit "error stray '\350' in program :D
0
Armulis Messages postés 1236 Date d'inscription vendredi 17 juin 2011 Statut Membre Dernière intervention 10 mai 2020 408
2 avril 2013 à 13:49
OK. Dans ce cas, tu dois te renseigner sur ces messages d'erreur, pour savoir ce qu'ils veulent dire, et chercher la solution adaptée.
0
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013
2 avril 2013 à 13:51
je n'ai pas compris sa signification ,bon le type de cet erreur
0
Armulis Messages postés 1236 Date d'inscription vendredi 17 juin 2011 Statut Membre Dernière intervention 10 mai 2020 408
2 avril 2013 à 13:56
En fait, le compilateur t'a écrit que l'erreur était à la ligne (stray) 350 de ton programme.
Je sais pas où ça se situe, puisqu'ici, les lignes ne sont pas numérotées =D
(Si-jamais tu comprends pas, traduits ce que tu peux en anglais avec google traductions, ça peut aider)
0
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013
2 avril 2013 à 19:21
merci :)
0
[Dal] Messages postés 6183 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 23 mai 2024 1 084
2 avril 2013 à 19:59
Non, "\350" n'est pas le numéro de ligne. Le numéro de ligne doit se trouver ailleurs dans le message.

Le compilateur se plaint que le code source contient des caractères qu'il n'arrive pas à lire, ou qui ne correspondent pas au format d'encodage attendu.

Tu mets des accents à tes noms de variables (par exemple : "int getdiamètre;").

Cette erreur vient très certainement de là.


Dal
0
nour hamaid Messages postés 13 Date d'inscription mercredi 27 mars 2013 Statut Membre Dernière intervention 2 mai 2013
2 avril 2013 à 22:55
c vrai dal ce type d'erreur causé par la mise des accens
0