Vous êtes sur la page 1sur 7

Cours Algorithmique Chapitre VI : Types

CHAPITRE 6
TYPES ENUMERES et ENREGISTREMENTS

Déclaration d’un type


Créer un type, c'est bien, mais le nommer, c'est mieux.
On déclare les noms de types entre les mots clés TYPE et VAR.

Syntaxe
nom_du_type = type;

Exemple
TYPE
Tab = tableau[1..100] d’entier ;

VAR
T,V: Tab;

De la sorte Tab est un nom de type au même titre qu’ entier ou caractère.

6.1. Le type scalaire énuméré :


Définition : Le type scalaire par énumération définit un ensemble ordonné fini de
valeurs désignées par des identificateurs.

Exemple
Définir le type jour contenant les jours de la semaine.

Types
Jour=(Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi,Dimanche)

On peut appliquer la fonction Ord sur ses valeurs pour déterminer leurs numéro
d'ordre.
Exemple : Ord(Lundi)=0 et Ord(Mardi)=1
 Les opérateurs applicables à ses valeurs sont:
-Les opérateurs de relation >, <, <=, >=, =, <>
-Les opérateurs Pred et Succ

Déclaration en Pascal:
Type
<nom_type>= (constante_1,constante_2,,constante_n) ;

var <nom_variable> : nom_type ;

Exemple:
Type
jour =(Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche) ;
var
j: jour;

Licence 1ere Année Mme S. Boukerram Page 1


Cours Algorithmique Chapitre VI : Types

Application
succ(Lundi) = mardi
Pred(mardi)= Lundi
Lundi<vendredi ;
J := Samedi ;
Ecrire(j) ne donne aucun résultat
Par contre on peut faire : Ecrire(ord(j)) ; résultat est 5
A ces constantes sont attribuées les valeurs numérique (la première constante prend
toujours la valeur 0).

Remarque : On ne peut ni lire (saisir) ni écrire (afficher) une variable de type scalaire
énuméré.
Program feux
VAR
feux : (Rouge, Orange, Vert, Clignotant);
BEGIN
{ ... }
if feux = Rouge
then Arreter
else if feux = Orange
then Ralentir
else if feux = Vert
{ ... }
END.

6.2Type intervalle
Un intervalle est décrit par la donnée de deux constantes « Borne inf » et « borne sup » (tq
borne inf < borne sup) appartenant à un type scalaire discret ordonnée (entier, caractère et un
type énuméré).
Syntaxe :
Type
<nom_type>=borne_inf..borne_sup ;
var
<nom_variable>: nom_type ;
Exemple:
Type
pourcentage = 0 .. 100; { le type hôte est integer }
digit = '0' .. '9'; { le type hôte est char }
reponse = false .. true; { le type hôte est boolean }

week_end = samedi..dimanche;
mois = 1..12;
lettres = 'a'..'z' ;

var
m : mois ; w : week_end ; l : lettres ;

Licence 1ere Année Mme S. Boukerram Page 2


Cours Algorithmique Chapitre VI : Types

Remarques
- Les types autorisés sont : integer, char et boolean qui sont des types ordinaux. En Pascal
on dit qu’ils sont des types scalaires et ont un nombre fini de valeurs
- Les types réels ne sont pas autorisés car ils ne sont pas scalaires.
- Seul un type ordinal admet les opérateurs : pred, succ et ord ;
- Par contre le type real n'est pas ordinal, et donc on ne pas créer un type intervalle avec
des réels, il n'y a pas de notion de < réels consécutifs >.
- Un autre cas de type non ordinal est le type string pour les chaînes de caractères, qui
n'est pas codé sur un mais sur plusieurs entiers. On ne peut donc pas déclarer 'aaa'..'zzz'
- Deux variables de types intervalle peuvent être utilisées des deux côtés d’une affectation
- Affecter une valeur à une variable hors de son domaine de définition provoquera une
erreur d’exécution.
- Les procédures Lire et Ecrire peuvent être utilisé sur un type intervalle si le type de
référence est entier et caractère.

Exemple
Program Aff1 ; Pogram aff2 ;
VAR CONST
feux : 0..3; { rouge, orange, vert, PMin = 0;
clignotant } PMax = 100;
BEGIN
{ ... } VAR
if feux = 0 pourcentage : PMin .. PMax;
then Arreter BEGIN
else if feux = 1 writeln ('L''intervalle est ', PMin, ' .. ',
then Ralentir PMax);
else if feux = 2 END.
{ ... }
END.

PROGRAM portrait;
CONST
TailleMin = 50; { en cm }
TailleMax = 250;
TYPE
taille_t = TailleMin .. TailleMax;
couleurs_t = (Blond, Brun, Roux, Bleu, Marron, Noir, Vert);
cheveux_t = Blond .. Roux;
yeux_t = Bleu .. Vert;
VAR
taille_b, taille_l : taille_t;
cheveux_b, cheveux_l : cheveux_t;
yeux_b, yeux_l : yeux_t;
BEGIN
taille_b := 180;
cheveux_b := Brun;
yeux_b := Noir;
END.

Licence 1ere Année Mme S. Boukerram Page 3


Cours Algorithmique Chapitre VI : Types

6.3. Les ensembles


Un ensemble est une collection d’objets de même type.
Les valeurs d’un type ensemble sont des ensembles de valeurs du type énuméré
considéré.

Syntaxe
Type
<nom du type>= set of <type> ;

Exemple
Ingredient = (pomme,fraise,babane,noisette,sucre,glace) ;
Dessert=set of ingredient ;
Var
Sorbet,salade,gouter : dessert ;

Remarque
L’instruction affectation ( :=) peut être utilisée avec des variables de type ensemble.
Les valeurs que peuvent prendre les var de type dessert
Salade :=[pomme,banane]
Sorbet:=[pommes..sucre]
Gouter :=[ ]

Les opérateurs :
Les opérateurs de comparaison peuvent être utilisés pour comparer des ensembles.
= Egalité de deux ensembles [pomme,banane]=[banane,pomme]
<> Inégalité de deux ensembles [sucre]<>[glace]
<= Est contenu dans
>= Contient

Symbole Symbole Exemple


conventionnel pascal
Ensemble {….} […] [pomme,banane]
Union  + Dessert :=[pomme]+[sucre,glace]
Intersection  * Dessert :=[pomme,sucre]*[sucre,glace]
Contient  >= [Pomme..glace]>=[banae..sucre]
Est contenu dans  <= [fraise]<=[graise,sucre,glace]
Appartenance  In Pomme in [pomme,fraise,sucre]
Ensemble vide  []

6.4 LES CHAÎNES DE CARACTÈRES

Une chaine de caractère est un objet qui peut contenir plusieurs caractères de manière
ordonnée.
Une chaîne de caractère peut être considérée comme un tableau de caractères.

Une déclaration de variable chaîne se présente sous la forme suivante :

var
<nom> : string [<longueur >] ;
La variable nom est déclaré comme étant de type string, longueur indique la taille maximale de cette
chaîne.

Licence 1ere Année Mme S. Boukerram Page 4


Cours Algorithmique Chapitre VI : Types

Si cette longueur n’est pas précisée, une longueur par défaut de 255 caractères est appliquée.
Exemple :
VAR
NOM : string[30] → Chaine de 30 caractères maximum
ADRESSE : string ; → Chaine de 128 caractères maximum
Il y a peu d’opérations directement réalisables sur les chaînes de caractère.
Si s et s’ sont des chaînes de type string[N], voici ce qu’on peut faire :

Accès à un caractère : s[i]


Longueur effective : length(s)
Concaténation : s+s’

Le caractère s[i] est le i-ème caractère de la chaîne (le premier a pour numéro 1). Le résultat est de
type char, mais il peut être affecté à une chaîne.

Concaténer deux chaînes consiste à ajouter la deuxième au bout de la première. Si la chaîne résultante
est trop longue, elle est simplement tronquée.

Exemple :

program hello_chaine ;
var s1 , s2 , s3 : st ing ;
begin
s1 := ’ Hello ’ ;
s2 := ’ , ’ ;
s3 := ’World ’ ;
writeln ( s1+s2+s3 )
end.

Résultat : “Hello, World”

Licence 1ere Année Mme S. Boukerram Page 5


Cours Algorithmique Chapitre VI : Types

6.5 Type Enregistrement


Un enregistrement, comme un tableau, est une variable structurée avec plusieurs champs.
Mais les champs d’un enregistrement peuvent avoir des types différents et sont accessibles par
leur nom et non pas par un indice.
Syntaxe
TYPE
<idf> = Record
Idf1 : Type1;
Idf2 : Type2;
…..
Idfn : typen ;

End;

Exemple
Etudiant = Record
Nom : chaine de caractères ;
Prénom : chaine de caractères
Note : tableau [1..2] d’entiers ;
Moy : entier ;
End ;
Var
Et1, Et2 : Etudiant ;
L1 : tableau[1..100] d’Etudiant ;

L’accès à un champ de l’enregistrement se fait de cette manière :

.
<idf de l’enregistrement> <idf du champ> ;

Exemple

Lire(Et1.nom) ; (* rempli le champ nom de Et1*)


Et1.prenom := ‘yanis’ ;
Et1.note[1] := 14 ;
Et1.note[2] :=13 ;
Et1.Moy :=(Et1.note[1]+Et1.note[2])/2 ;

Licence 1ere Année Mme S. Boukerram Page 6


Cours Algorithmique Chapitre VI : Types

Remarque :
- La seule opération globale sur un enregistrement est : recopier le contenu
de Et1 dans Et2 en écrivant :
Et2 := Et1;
Ceci est équivalent (et plus efficace) que de copier champ par champ ; en plus on ne risque
pas d'oublier un champ.
Il y a une condition : les 2 variables doivent être exactement du même type.

Intérêt de ce type
Il permet de structurer très proprement des informations qui vont ensemble, de les recopier
facilement et de les passer en paramètres à des procédures.

Remarque générale
Crée un type T2 à partir d'un type T1, ce type T1 doit déjà exister ; donc T1 doit être déclaré
avant T2.

Reprenons l'exemple du programme portrait.


{ ... }
TYPE
{ ... }
personne_t = Record
taille : taille_t;
cheveux : cheveux_t;
yeux : yeux_t;
End;
VAR
bob, luc : personne_t;
BEGIN
bob.taille := 180;
bob.cheveux := Brun;
bob.yeux := Noir;
luc := bob;
END.

Licence 1ere Année Mme S. Boukerram Page 7

Vous aimerez peut-être aussi