Exercice 1 - Free

Exercices Delphi & Pascal Objet - Types de données avancés IG1. Exercice 1 : ...
Exercice 4 : Reprenez le code source de l'exercice 2. ... CORRIGE. Exercice 1.

Part of the document


Exercice 1 :
Ecrivez le bloc type complet déclarant les deux nouveaux types
suivants :
. TChaine200 : type chaîne de 200 caractères.
. TEntier : type équivalent au type integer. Exercice 2 :
Ecrivez un type énuméré pour les 7 jours de la semaine. Déclarez une
variable de ce type, initialisez-la à une valeur de votre choix et affichez
sa valeur ordinale (utilisez la procédure habituelle pour cela). Si vous le
pouvez, essayez de ne pas utiliser de variable intermédiaire comme dans
l'exemple ci-dessus Exercice 3 :
Dans la procédure habituelle, déclarez un type tableau de dix chaînes
de caractères, indicées de 1 à 10. Déclarez une variable de ce type et
initialisez une de ses cases à la chaîne : « Bonjour ». Affichez ensuite le
contenu de cette case à l'aide de ShowMessage (Pour cette fois, vous avez
le droit d'utiliser une variable temporaire, essayez cependant de vous en
passer). Exercice 4 :
1. Reprenez le code source de l'exercice 2. Déclarez une constante de
type tableau avec comme indices le type TJourSemaine, et comme contenu
des cases, des chaînes de caractères. Le contenu de chaque case sera
une chaîne donnant le nom du jour représenté par la valeur de type
TJourSemaine indicant cette case ('Lundi' pour jsLundi par exemple).
2. Dans le code source, au lieu d'afficher la valeur ordinale de la
variable de type TJourSemaine, affichez à la place le nom du jour
correspondant à la valeur de cette variable en utilisant la constante
déclarée à la question 1 (indication : utilisez la valeur de la
variable comme indice de la constante tableau et affichez la case
ainsi obtenue). CORRIGE Exercice 1
Un bloc type se déclare toujours avec le mot réservé correspondant. Le
premier type à définir est une chaîne de caractère de 200 caractères. On
utilise donc la syntaxe donnée au chapitre 5 :
string[200]
Le deuxième type à définir est un équivalent du type integer. Le
nouveau type sera donc une sorte de synonyme de integer. Voici le code
source répondant à l'exercice :
type
TChaine200 = string[200];
TEntier = integer;
Exercice 2
Nous appelerons TJourSemaine ce nouveau type énuméré. Les valeurs
seront toutes nommées en utilisant le préfixe "js" qui permet de se
rappeler, lorsqu'on en voit un, du type associé (TJourSemaine). Voici une
proposition de bloc type à écrire :
type
TJourSemaine =
(jsLundi, jsMardi, jsMercredi, jsJeudi, jsVendredi, jsSamedi,
jsDimanche);
(Vous aurez certainement remarqué qu'un retour à la ligne et quelques
espaces ont été insérés après le signe "=" : c'est tout à fait permis à
beaucoup d'endroits et ceci permet d'aèrer le code ou de permettre de faire
tenir tout un texte sur une ligne, comme dans le cas présent)
Le reste de l'exercice est très semblable à ce qui est fait juste
avant l'exercice dans le chapitre 5. Pour cette raison, j'y ai ajouté une
petite difficulté : ne pas utiliser de variable temporaire pour stocker la
valeur ordinale de "Jour". La solution est d'utiliser ce qui est affecté à
cette variable temporaire à sa place. Voici donc les deux versions, avec
puis sans variable intermédiaire :
procedure TForm1.Button1Click(Sender: TObject);
type
TJourSemaine =
(jsLundi, jsMardi, jsMercredi, jsJeudi, jsVendredi, jsSamedi,
jsDimanche);
var
Jour: TJourSemaine;
I: Byte; { avec variable intermédiaire }
begin
Jour := jsMardi;
I := Ord(Jour);
ShowMessage(IntToStr(I));
end;
procedure TForm1.Button1Click(Sender: TObject);
type
TJourSemaine =
(jsLundi, jsMardi, jsMercredi, jsJeudi, jsVendredi, jsSamedi,
jsDimanche);
var
Jour: TJourSemaine;
{ sans variable intermédiaire }
begin
Jour := jsMardi;
ShowMessage(IntToStr(Ord(Jour)));
end;
Dans notre cas, la valeur affichée sera donc la valeur ordinale de
jsMardi, qui est le deuxième identificateur déclaré dans TJourSemaine, soit
la valeur 1.
Exercice 3
Le type tableau de chaînes de caractères, indexé de 1 à 10, s'écrit :
array[1..10] of string
Déclarer ce type ne doit pas poser de problème, de même que déclarer
la variable de ce type. Pour initialiser une case du tableau, il faut faire
suivre le nom de cette variable du numéro de la case entre crochets, ce qui
permet d'utiliser la case et non le tableau. Chaque case, rappelez-vous le,
est de type chaîne : on affecte donc une chaîne à cette case.
L'affichage du contenu de cette case se fait avec ShowMessage. La
chaîne à afficher est dans la case initialisée auparavant. On utilise la
même syntaxe que ci-dessus pour y accèder. Voici un code source répondant
aux exigences de l'exercice :
procedure TForm1.Button1Click(Sender: TObject);
type
TTabChaine = array[1..10] of string;
var
Chaines: TTabChaine;
begin
Chaines[4] := 'Bonjour';
ShowMessage(Chaines[4]);
end;
Note : vous pouvez également déclarer une variable temporaire S, lui
affecter la valeur de Chaines[4], puis afficher S, mais c'est parfaitement
inutile, comme le montre le code ci-dessus.
Exercice 4
le tableau utilise en guise d'indices le type TJourSemaine (type
énuméré). Le type de chaque case est string. Voici le type correspondant :
array[TJourSemaine] of string
De deux choses l'une, soit nous déclarons un nouveau type
(TJourChaines par exemple) et nous utilisons TJourChaines pour déclarer la
constante, soit nous déclarons directement la constante avec le type décrit
ci-dessus. Pour nous entraîner à déclarer des types, nous opterons pour la
première solution, plus longue.
Voici la déclaration du type et de la constante :
type
TJourSemaine =
(jsLundi, jsMardi, jsMercredi, jsJeudi, jsVendredi, jsSamedi,
jsDimanche);
TJourChaines = array[TJourSemaine] of string;
const
NomsDesJours: TJourChaines =
('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi',
'Dimanche');
La constante NomsDesJours est donc un tableau de chaînes, indicées par
le type TJourSemaine. Chaque chaîne est contenue dans une case indicée par
une valeur correspondante de type TJourSemaine. NomsDesJours[jsLundi], par
exemple, est une chaîne et vaut 'Lundi'. Avec ces explications, il devient
facile de réécrire la procédure en répondant à la question 2 :
procedure TForm1.Button1Click(Sender: TObject);
type
TJourSemaine =
(jsLundi, jsMardi, jsMercredi, jsJeudi, jsVendredi, jsSamedi,
jsDimanche);
TJourChaines = array[TJourSemaine] of string;
const
NomsDesJours: TJourChaines =
('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi',
'Dimanche');
var
Jour: TJourSemaine;
begin
Jour := jsMardi;
ShowMessage(NomsDesJours[Jour]);
end;
Voici ce qu'affiche le programme lorsqu'on clique sur l'habituel
bouton de test :
[pic]