[Débutante] Exercice sur l'héritage
darkslew
Messages postés
2
Statut
Membre
-
loupius Messages postés 789 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
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
A voir également:
- [Débutante] Exercice sur l'héritage
- Maison héritage canapé avis - Forum Consommation & Internet
- Que du fake formate héritage ✓ - Forum Vos droits sur internet
- Fake ? - Forum Consommation & Internet
- Arnaque aux canape. - Forum Vos droits sur internet
- Template et heritage ✓ - Forum Programmation
4 réponses
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 ;-)
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 ;-)
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-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. </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."
< 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-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. </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."