Les types scalaires et ensembles:
En plus des types usuels utilisés (Integer, Real, Char et Boolean), Pascal donne la possibilité d'utiliser d'autres types nommés scalaires (types énumérés et types intervalles) et les types ensembles. Ces types sont introduits pour permettre une programmation plus structurée au niveau du choix des données dans le programme.
a) Les types énumérés :
Très souvent, une variable ne peut prendre qu'un petit nombre de valeurs distinctes. Par exemple, une variable qui représente le jour de semaine ne peut prendre que l'une des valeurs énumérées: (Samedi, Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi).Il est possible d'utiliser les entiers positif; (0, 1, ..., 6) pour représenter ces valeurs. Mais Pascal nous permet d'utiliser des noms pour désigner ces valeurs plutôt que des valeurs numériques abstraites, Ceci est possible grâce au types énumérés, Un type énuméré est défini par la liste de valeurs que peut prendre une valeur de ce type.
Exemple : Type
unites = (centimetre, mettre, kilometre) ;
jour = (Samedi, Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi) ;
La déclaration d'une variable d'un type énuméré se fait alors dans la section de déc1aration du variables en utilisant l'identificateur de type approprié.
Exemple : Var
echelle : unîtes;
Conge:Jour;
Ces deux dernières déclarations sont équivalentes aux déclarations suivantes :
Var
Echelle : (centimetre, mettre, kilometre) ;
Conge : (Samedi, Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi) ;
Règles d'utilisation des types énumérés:
. Les valeurs d'un type énumérées sont numérotées à partir de zéro (0), de ce fait elles sont ordonnées de façon croissante dans l'ordre de leur écriture.
. Une variable déclarée avec un type énuméré ne Peut prendre que l'une des valeurs énumérées de ce type.
Par exemple: conge := Jeudi;
. Les seuls opérateurs pouvant être appliqués à des variables de type énuméré sont les opérateurs de comparaison, Dans l'exemple plus haut on a : Samedi < Dimanche < lundi, ,. et ainsi de suite.
.Le type prédéfini Boolean est lui même un type énuméré, implicitement défini par :
TYPE Boolean = (FALSE,TRUE) ;
.Les fonctions pred et succ peuvent avoir des arguments de type énuméré et retourne une valeur de même type que l'argument.
succ (mardi) = mercredi
pred (kilometrc) = metre
Le premier membre de la liste n’a pas prédécesseur et le dernier membre n’a pas de successeur.
. La fonction ord peut également avoir un argument de type énuméré et retourne le numéro de cette valeur dans la liste.
ord (samedi) = 0
ord (kilometre) = 2
. Il n'est pas possible de lire ou d'écrire des valeurs d'un type énuméré.
. Il est possible d’utiliser une variable de type énuméré comme compteur de la boucle FOR.
Var
Travail : (Samedi, Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi) ;
BEGIN
For travail := samedi To Jeudi Do
Begin
……….
End ;
b) Les types intervalles:
Un type intervalle est défini par deux constantes du type lnteger, Char ou d'un type énuméré. Par exemple: Type
octet = 0..255 ;
minuscule = 'a'..'z' ;
chiffre = 0..9 ;
Semaine = (samedi, dimanche, lundi, mardi, mercredi, jeudi, vendredi) ;
jour_ouvrable = samedi..jeudi;
La borne inférieure de l'intervalle doit, bien évidemment, être inférieure à la borne supérieure. Une variable de type intervalle est déclarée comme suit:
Var
lettre: minuscule ;
Comme dans le cas des types énumérés, cette déclaration aurait pu être écrite ainsi:
Var
lettre: 'a'..'z' ;
Mais il est généralement préférable de séparer les déclarations de types des déclarations de variables.
Règles d'utilisation du type intervalle:
. Les variables de type intervalle peuvent être lues ou écrites.
. Les variables d'un type intervalle sont compatibles avec les variables du type de base de l'intervalle. Par exemple, les instructions suivantes sont valides:
Var
jour: 1..31 ;
lettre: 'a'..'z' ;
j : Integer ;
C :Char ;
Begin
i := j ;
lettre := c ;
i :=j*3+1 ;
. Il est fréquent d'utiliser des variables de type intervalle comme compteur de boucle FOR.
. Toutes les fonctions définies sur le type de base des bornes de l'intervalle sont applicable aux variables de ce type intervalle.
c) Les types ensembles :
Un ensemble est une collection d'objets de même type. En Pascal un type ensemble peut être défini à partir de n' importe quel type énuméré ou intervalle. Les valeurs d'un type ensemble sont des ensembles de valeurs du type de base utilisé.
Exemple :
Type
Ingredients = (orange, fraise, pomme, banane, creme,_chocolat, noisette) ;
Dessert = Set of ingredients ;
Les variables de type Dessert sont déclarées ainsi: .
Var
gouter, panier: Dessert;
Ces variables peuvent recevoir n'importe quel ensemble de valeurs de type Ingredients. Ces valeurs sont comprises entre les deux crochets '[' et ']' et sont séparées' par les virgules. Par exemple, on peut écrire:
panier := [orange, fraise, pomme] ;
gouter := [noisette, crème, chocolat] ;
ou alors,
panier:= [orange..banane];
gouter := [ ];
Le nombre de valeurs possibles des variables d'un type ensemble est égal à 2**n où n représente le nombre de valeurs dans le type de base de l'ensemble. Dans l'exemple plus haut, les valeurs du type Dessert peuvent prendre l'une des 2**6=64 valeurs possibles (ensembles possibles).
Opération sur les ensembles :
Les opérations suivantes sont définies sur les variables d’un type ensemble :
Opération Symbole Pascal Résultat Union + Ensemble
Intersection * Ensemble
Différence - Ensemble
Contient Boolean
Est contenu dans Boolean
Appartenance IN Boolean
Exemple :
Program ensembles;
Type
Semaine = (samedi; dimanche, lundi, mardi, mercredi, jeudi, vendredi) ;
Jours = set of Semaine;
Var
travail, conge, marche, dentiste, tous, occupation: Jours;
x, y, z, w : Boolean ;
Begin
tous := [samedi.. vendredi] ;
travail := [samedi..jeudi] ;
conge := tous - travail ;
marche := [lundi, jeudi] ;
dentiste := [mardi] ;
occupation := dentiste + marche;
x := marche travail ;
y := occupation conge ;
z := samedi in marche;
End.
Remarque : Les valeurs de type ensemble ne peuvent être ni lues ni écrites.