Les Variable et types de données scalaires
- Qu'est ce qu'une variable ?
- Définir un type pour une variable
- Définir de nouveaux types
- Récapitulatif du cours
Jusqu'à présent, nous avons travaillé sur des valeurs. Si vous vous souvenez de vos cours de mathématiques, vous avez vu la notion d'Inconnues. En mathématiques, on nommait ces inconnues X et Z (voire Z pour les nombres complexes).
En programmation informatique, on utilise également ce concept. A part qu'ici, on appelle cela une Variable. Une variable en informatique est un espace réservé, plus ou moins grand, avec un nom unique, ayant un type qui peut changer de valeur à la volée. Il est à opposer à Constante qui est une valeur attribuée dès le début à un nom de constante ne changeant JAMAIS de valeur.
Définir le nom d'une variable
Comment attribuer un nom ? Un nom de variable commence par une lettre (majuscule ou minuscule) OU le caractère UNDERSCRORE "_" (eh oui le tiret du 8 a un NOM) suivi d'un ensemble de lettres, chiffres, ou caractères UNDERSCORE.En Langage PASCAL, les lettres majuscules et muniscules sont indifférenciées pour nommer les noms de variables, les instructions, les noms de fonctions etc. Ainsi, les noms write, Write, wRItEdésigneront la même chose!! C'est une des différences du Pascal avec d'autres langages comme le C, Java, Python etc... Le langage Pascal est un langage d'apprentissage de la programmation (ce qui n'empêche pas d'être puissant et utilisable pour tout type d'algorithmes).
Attention : Vous devez nommer vos variables différemment des Instructions de langages, des noms de fonctions existant déjà (dans l'unité System ou d'autres unités), etc.
Exemple de noms de variable acceptées
Tous les noms données ici sont acceptés:- Toto
- Nom_de_famille
- Jeu_des_7_familles
- _Cocotiers_bananiers
- Sept_fois_3_egal_21
- forwhile
- 7_fois_3_egal_21 : ne commence ni par une lettre, ni par UNDERSCORE
- Nom-de-famille : les signes de calcul (signe moins ici) sont interdits dans un nom (utilisés pour les opérations)
- for, while, do, etc ... sont des mots résevés en Pascal. Forwhileest autorisé car le mot entier n'est pas "for" ou "while"
Dans un programme Pascal, les types de variables sont toujours déclarés dans une zone commençant par le mot clé VAR comme dans l'exemple suivant
program Mesvars;
var
Montexte : String[30];
Element : char;
a, b, c : word;
i, j, k:byte;
x,y; real;
Begin
{corps du programme}
End.
Types numériques
En mathématiques, vous avez vu des ensembles N (entiers naturel), Z (entiers relatifs), Q (Rationnels), R (Réels).En programmation informatique, dans des langages typés (Pascal, C, Java), vous devez OBLIGATOIREMENT DECLARER les variables que vous utilisez au sein de votre programme afin d'indiquer au compilateur comment seront traités lesdites variables. Voir les différents types Pascal dans le lexique de ce site internet.
En langage Pascal, il y a différents types de données numériques... Une distinction se fait entre les types entiers et les types réels, qui ne sont pas du tout codés de la même manière (et ce, quelle que soit le langage de programmation, typé ou pas) : c'est pourquoi il est important de définir le type de données. Les langages de scripts (Python, PHP, JavaScript, Pearl) ne nécessitent pas de déclarer le type mais cela entraine une perte de performance et des bugs dans le programme si on n'y prend garde.
Liste des types numériques en Pascal :
- Types entiers (Byte, Integer, Word, ShortInt, LongInt) : les types Byte et Word sont des Entiers Naturel et les autres types sont des Entiers relatifs
- Types réels (single, double, real, extended) : font parti de l'ensemble des réels mais avec plus ou moins de précision et plus ou moins de valeurs limites suivant le type. Le type extended est le type ayant le plus de précision en Pascal et la plage la plus large. De plus, le type extended ne peut être utilisé que si un coprocesseur arithmétique existe dans l'architecture de l'ordinateur (sinon c'est le type real qui sera employé).
- Type Booléen : qui ne prend que 2 valeurs, Vrai ou Faux et qui n'existait pas en langage C jusqu'à récemment.
Exemple
program Mesvars;
var
a, b, c : word;
x,y; real;
Begin
a := 851;
b := 202;
c := a-b;
writeln('a - b = ', c);
c := a+b;
writeln('a + b = ', c);
c := a*b;{Résultat dépendant des options de compilation}
writeln('a * b = ', c);
c := a/b;{Retourne une erreur de compatibilité de type}
writeln('a / b = ', c);
x := a/b;
writeln('a / b = ', y);
c := a div b;{division entière}
writeln('a div b = ', c);
RealLn;
End.
Commentaires sur ce programme :
- Les variables Montexte, Element , ...,y, ont été définies avec des types particuliers et, pour chaque variable, un emplacement en RAM sera réservé.
- On voit dans la première fois dans ces tutoriels, comment on attribut une valeur à une variable, avec le couple de symbole ":=". Quand vous initialisez une variable, celle ci est VIDE (ou plutôt est remplie de 0). Une variable étant "variable", vous pouvez lui attribuer toute valeur compatible avec son type.
- Les résultats des sommes et différences sont du même type que la variable ayant le type dont l'ensemble est le plus large (ici "word")
- Concernant la multiplication, le résultat peut dépasser la capacité de la variable c et donner un résultat erroné. Il vaut meux utiliser un type de variable ayant le double d'octet, en l'occurence LongInt. De plus la compilation du programme peut signaler une erreur à ce propos (suivant les options de compilations).Je vous conseille d'utiliser les options de compilations les plus restrictives pour éviter les mauvaises surprises de ce genre
- Comme nous l'avons vu dans le cours précédent, le résultat de la division (opérateur "/") de 2 entiers est toujours un réel. Lorsqu'on effectue c := a/b; il y a une erreur indiquant que le type de la variable c n'est pas compatible avec le résultat de l'opération (puisque c est detype entier). Une variable entière ne peut être le résultat d'une division que si cette division est entière (opérateur "div"). Par conséquent, c:= a div b; ne retourne pas d'erreur (à condition que b ne soit pas nul)
- On voit dans toutes ces instructions l'importance capitale d'attribuer les bons types aux variables suivant ce qu'on souhaite en faire!
Types chaîne de caractère et char
Dans tous les langages de programmation, il existe un type Chaîne de caractères et éventuellement, char. Dans le langage Pascal avec compilateur Pure Pascal 1.1 et Turbo Pascal 7, il existe 2 types de chaînes de caractères. Voici la liste de ces types :- String : Cette variable définit une chaîne de caractères pouvant contenir jusqu'à 255 caractères. Pendant la compilation, il sera réservé un emplacement de 256 Octets dédiés à un ensemble de caractères.
Le premier caractère (qu'on apelle par chaine[0]) indiquera TOUJOURS la longueur effective de cette chaîne à l'instant t (entre 1 et 255 caractères). Vous pouvez choisir de limiter la taille d'une variable de type String en déclarant ce type ET un nombre (entre 1 et 255) entre crochets. Dans le programme indiqué ci-dessus, la variable MonTexte est un type de chaïne limité à 30 caractères (Le compilateur ne réservera que 31 caractères, la taille de la chaine s'ajoutant à la taille maxi de la chaîne). - Char : la variable utilisée ne peut contenir qu'un octet qui sera le code ASCII d'un caractère.
- PChar : Ce type a été introduit a partir de Turbo Pascal 7 et Pure Pascal 1.1 (existe dans Delphi, Free Pascal et GNU Pascal). Il s'agit d'un type chaine de caractère compatible Langage C (et Java, PHP...)!! Le type Pchar, contrairement à String, n'a pas de limite de taille, ni de premier élément indiquant la taille de cette chaîne. Le premier élément est un caractère. La fin de la chaïne se termine quand le code ASCII 0 (octet NUL ou NIL) est rencontré.
Saisissons le programme suivant:
program Untexte;
var
a,b : String[40];
c : PChar;
Begin
a:='Mon nom est : ';
b:='Arthur';
writeln (a+b);
c:='Ceci est une chaine de type Pchar. Elle se termine par le caractère NUL.';
writeln('Longueur de la chaine a = ',ord(a[0]));
writeln('Longueur de la chaine b = ',ord(b[0]));
writeln(c);
writeln ('Le premier caractère de la chaine c a pour caractère ascii : ',c[0]);
readln;
End.
Commentaires sur ce programme :
- Le premier texte bien indique que la chaine "a" fait 14 caractères de long. Lepremier caractère est "a[1]"
- Le 2ème texte indique que la chaine "b" fait 6 caractères de long. Le premier caractère est "b[1]"
- Le 3ème texte montre que "c[0]" est bien le premier caractère de la chaîne
- Si, pour a ou b, vous aviez tenté d'attribuer une chaine de plus de 40 caractères, seuls les 40 premiers caractères seraient intégrés à la variable (et ce, sans message d'erreur)
- On accède au ième caractère d'une variable de type String en l'indiquant entre crochets (ici a[i] et b[i])
- On accède au ième caractère d'une variable de type Pchar en mettant i-1 entre crochets (c[i-1] ici)
Le Type String contient directement la taille de la chaïne dans l'octet 0 (contrairement au type Pchar) du tableau de caractères, mais le type String est limité à 255 caractères.
Définir de nouveaux types
Le langage Pascal permet de définir de nouveaux types, basés sur les types préexistant. Soit l'exemple suivant:
program NouveauxTypes;
TYPE
Id_Mois = 1..12;
Id_Jour = 1..7;
Mois = Array [Id_Mois] of String[20];
Jour = Array [Id_Jour] of String[20];
var
{Liste de variables}
Begin
{Corps du programme}
End.
Ce programme définis des types d'index de mois, jours, un tableaux de chaines de caractères de mois et un tableau de chaines de caractères de jours.Le langage Pascal est un langage verbeux et typé permettant d'appeler de définir non seulement lesvariables et constantes mais également des types.
Cela peut s'avérer for utile dans l'organisation de ses idée dans un programme. Mais attention de ne point trop en utiliser.
Notions vues dans ce cours
- Qu'est ce qu'une variable?
- Constante
- Nommer une variable
- Types entiers (Byte, ShortInt, Integer, Word, LongInt)
- Types Réels (Single, Double, Real, Extended)
- Attribuer une valeur à une variable avec :=
- Type Booléen
- Types chaine : String, char, Pchar
- Accès à un caractère d'une chaîne
- Définir de nouveaux types