[Débutante] Exercice sur l'héritage

darkslew Messages postés 2 Statut Membre -  
loupius Messages postés 789 Statut Membre -
Bonjour,Je suis encore un bleu en informatique alors pardonnez-moi les erreurs alors j'ai un exercice pour mon devoir et je n'ai pas pu l'ouvrir.
SVP j'aimerais que quelqu'un m'aide à trouver la solution !!

Les échecs fournissent un exemple classique d’application de l’héritage qui est riche. Cet exercice aborde seulement une partie du sujet.

1- Créer la classe PieceEchec qui s’intéresse au déplacement d’une pièce. Elle prend comme champs : la position des cases de départ et d’arrivée lors d’un déplacement, ainsi que le nom de la pièce. La position d’une case est définie par deux entiers compris entre 1 et 8 : le numéro de la rangée et celui de la colonne.
La classe PieceEchec possède les mèthodes suivantes :

* Norme ()(norme du dèplacement ) retournant le carré de la distance entre les cases de départ et d’arrivée
* EstValide() qui retourne 1 si la case d’arrivée est dans l’échiquier et 0 sinon (on peut aussi utiliser un booléen au lieu d’un nombre entier)
* Tostring() et imprimer()

Cette classe comporte également un constructeur pour initialiser les champs et un constructeur vide.

2- Quand un cavalier se déplace, la norme du déplacement vaut 5. Créer une classe Cavalier étendant la classe PieceEchec. Dont le constructeur fait appel à celui de la super-classe. De même, la méthode estValide() de cavalier utilisera la méthode estValide() de la super-classe.

N.B : pour traiter ces questions, il est nécessaire de recourir au if.

SUGGESTION : On peut poursuivre l’étude de cette question en ajoutant d’autres pièces. Le fou se déplace en diagonale alors que la tour utilise les rangées et les colonnes. La reine a les capacités d’une tour et d’un fou. La classe Reine ne peut pas hériter des classes Fou et Tour, car l’héritage multiple est impossible. Le roi a les capacités de déplacement d’une reine mais il ne peut se transporter que sur une case contiguë (sauf au moment du roque). On peut donc concevoir la classe Roi comme une sous-classe de Reine, ou se contenter de qu’un roi est une pièce dont sa norme de déplacement vaut 1 ou 2 .

voici se que j ai parvenue a faire jusqu'à présent

unit échec;

INTERFACE

uses crt;

type
pieceEchec= object
private
nomPiece:string;
rangeDepare:integer;
rangeArrive:integer;
coloneDepare:integer;
coloneArrive:integer;
constructor init;
public
function norme:integer;
fuction estValide:boolean;
function toString:String;
procedure imprime;
end;

type piece=^pieceEchec;

IMPLEMENTATION

constructor PieceEchec.init;
Begin
rangeDepare:=1; {je defenie l'emplacement de chaque pièce au
coloneDepare:=1; demarrage du jeux}
end;

function PieceEchec.norme:integer;
begin
norme:=sqr(rangeArrive-rangeDepare)+sqr(coloneArrive-coloneDepare);
end;

function PieceEchec.estValide:boolean;
begin
if 1<=rangeArrive>=8 and 1<=coloneArrive=>8 then
estValide:=true else estValide:=false;
end;

function pieceEchec.toString:String;
var ch1,ch2:String;
begin
Str(rangeArrive,ch1); {j affiche le nom de la piece
Str(coloneArrive,ch2); et son nouveau emplacement}
toString:=Concat(nomPiece,': R',ch1,' - C',ch2);
end;

procedure pieceEchec.imprime;
begin
write(tostring);
end;

end.

program JeuxDechec;
uses Echec;
type
cheval = object(PieceEchec)
constructor init;
procedure deplace;
end;

constructor cheval.init;
begin
NomPiece:='cheval';
RangeDepare:=3;
ColoneDepare:=1;
end;

procedure cheval.deplace;
begin
RangeArrive:=RangeDepare+2;
ColoneArrive:=ColoneDepare+1;
end;

var chevalg:^cheval;
BEGIN
new(chevalg, init);
chevalg.deplace;
chevalg.norme;
chevalg.estValide;
chevalg.tosring;
chevalg.imprime;
end.

mes problèmes sont:
quelle est le rôle du constructeur vide ?

que signifie "Dont le constructeur fait appel à celui de la super-classe. De même, la méthode estValide() de cavalier utilisera la méthode estValide() de la super-classe."

merci d avance

4 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Bonsoir,

Hmm. Juste un truc, ça ne te dérange pas de reposter le code avec les balises code?
http://www.commentcamarche.net/faq/sujet 4622 ccm astuces et conseils pour la redaction#code

Comme ça on conserve l'indentation et c'est moins fatigant à relire.
Là tel quel, je t'avouerais que j'ai pas le courage...

Merci ;-)
1
darkslew Messages postés 2 Statut Membre
 
bon voila les reglage

< code> Les échecs fournissent un exemple classique d’application de l’héritage qui est riche. Cet exercice aborde seulement une partie du sujet.

1- Créer la classe PieceEchec qui s’intéresse au déplacement d’une pièce. Elle prend comme champs : la position des cases de départ et d’arrivée lors d’un déplacement, ainsi que le nom de la pièce. La position d’une case est définie par deux entiers compris entre 1 et 8 : le numéro de la rangée et celui de la colonne.
La classe PieceEchec possède les mèthodes suivantes :

* Norme ()(norme du dèplacement ) retournant le carré de la distance entre les cases de départ et d’arrivée
* EstValide() qui retourne 1 si la case d’arrivée est dans l’échiquier et 0 sinon (on peut aussi utiliser un booléen au lieu d’un nombre entier)
* Tostring() et imprimer()

Cette classe comporte également un constructeur pour initialiser les champs et un constructeur vide.

2- Quand un cavalier se déplace, la norme du déplacement vaut 5. Créer une classe Cavalier étendant la classe PieceEchec. Dont le constructeur fait appel à celui de la super-classe. De même, la méthode estValide() de cavalier utilisera la méthode estValide() de la super-classe.

N.B : pour traiter ces questions, il est nécessaire de recourir au if.

SUGGESTION : On peut poursuivre l’étude de cette question en ajoutant d’autres pièces. Le fou se déplace en diagonale alors que la tour utilise les rangées et les colonnes. La reine a les capacités d’une tour et d’un fou. La classe Reine ne peut pas hériter des classes Fou et Tour, car l’héritage multiple est impossible. Le roi a les capacités de déplacement d’une reine mais il ne peut se transporter que sur une case contiguë (sauf au moment du roque). On peut donc concevoir la classe Roi comme une sous-classe de Reine, ou se contenter de qu’un roi est une pièce dont sa norme de déplacement vaut 1 ou 2 . </code>

voici se que j ai parvenue a faire jusqu'à présent

< code> unit échec;

INTERFACE

uses crt;

type
pieceEchec= object
private
nomPiece:string;
rangeDepare:integer;
rangeArrive:integer;
coloneDepare:integer;
coloneArrive:integer;
constructor init;
public
function norme:integer;
fuction estValide:boolean;
function toString:String;
procedure imprime;
end;

type piece=^pieceEchec;

IMPLEMENTATION

constructor PieceEchec.init;
Begin
rangeDepare:=1; {je defenie l'emplacement de chaque pièce au
coloneDepare:=1; demarrage du jeux}
end;

function PieceEchec.norme:integer;
begin
norme:=sqr(rangeArrive-rangeDepare)+sqr(coloneArrive-coloneD­epare);
end;

function PieceEchec.estValide:boolean;
begin
if 1<=rangeArrive>=8 and 1<=coloneArrive=>8 then
estValide:=true else estValide:=false;
end;

function pieceEchec.toString:String;
var ch1,ch2:String;
begin
Str(rangeArrive,ch1); {j affiche le nom de la piece
Str(coloneArrive,ch2); et son nouveau emplacement}
toString:=Concat(nomPiece,': R',ch1,' - C',ch2);
end;

procedure pieceEchec.imprime;
begin
write(tostring);
end;

end.

program JeuxDechec;
uses Echec;
type
cheval = object(PieceEchec)
constructor init;
procedure deplace;
end;

constructor cheval.init;
begin
NomPiece:='cheval';
RangeDepare:=3;
ColoneDepare:=1;
end;

procedure cheval.deplace;
begin
RangeArrive:=RangeDepare+2;
ColoneArrive:=ColoneDepare+1;
end;

var chevalg:^cheval;
BEGIN
new(chevalg, init);
chevalg.deplace;
chevalg.norme;
chevalg.estValide;
chevalg.tosring;
chevalg.imprime;
end. </code>

mes problèmes sont:
quelle est le rôle du constructeur vide ?

que signifie "Dont le constructeur fait appel à celui de la super-classe. De même, la méthode estValide() de cavalier utilisera la méthode estValide() de la super-classe."
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Pas d'espace entre le < et le code> ;-)
Tu peux encore éditer ton message.
0
bouchrot Messages postés 394 Statut Membre 6
 
c'est quoi ça ?
tu faudra mieux nous apporté ton code pour voir l'erreur
0
loupius Messages postés 789 Statut Membre 148
 
Sans vouloir te vexer, je serais surpris que, près de trois ans plus tard, quelqu'un ne se préoccupe encore de ce post.
Si tu as une question sur l'héritage en C++, ne te gênes pas pour la poser.
Bonne soirée.
0