Le concept de données
Les données sont l'expression générale décrivant l'ensemble des opérations effectuées par l'ordinateur. Au niveau matériel et du code machine, toutes les données sont représentées par des séquences de chiffres binaires (bits). Les langages de haut niveau permettent d'utiliser des concepts abstraits et d'ignorer les détails de la représentation, notamment en développant le concept de type de données.
Un type de données définit l'ensemble des valeurs qu'une variable peut prendre. Chaque variable présente dans un programme doit être associée à un seul type. Bien que les types de données en Pascal puissent être assez sophistiqués, chacun doit être construit à partir de types non structurés. Un type non structuré est soit défini par le programmeur, puis appelé type scalaire déclaré, soit l'un des quatre types scalaires standard : Integer, Real, Booleen ou Char.
Un type scalaire est caractérisé par l'ensemble de ses valeurs distinctes, sur lesquelles un ordre linéaire est défini. Ces valeurs sont désignées par des identifiants dans la définition du type.
Le type booléen
Une valeur booléenne est une valeur logique de vérité, désignée par les identifiants prédéfinis false (faux) et true (vrai).
Les opérateurs logiques suivants produisent une valeur booléenne lorsqu'ils sont appliqués à des opérandes booléens :
| Opérateur | Description |
|---|---|
| and | conjonction logique |
| or | disjonction logique |
| not | négation logique |
Chacun des opérateurs relationnels (=. <>. <=, <, >, >=, in) génère une valeur Boolean. De plus, le type booléen est défini de telle sorte que false < true. Il est donc possible de définir chacune des 16 opérations booléennes à l'aide des opérateurs logiques et relationnels ci-dessus. Par exemple, si p et q sont des valeurs booléennes, on peut exprimer :
- implication si p <= q
- équivalence si p = q
- OU exclusif si p <> q
Les fonctions booléennes standard, c'est-à-dire les fonctions standard donnant un résultat booléen, sont :
| Fonction | Description |
|---|---|
| odd(x) | true si l'entier x est impair. false sinon |
| eoln(f) | Fin de ligne. |
| eof(f) | Fin du fichier |
Le type Integer (entier)
Une valeur de type entier est un élément d'un sous-ensemble de nombres entiers défini par l'implémentation.
Les opérateurs arithmétiques suivants produisent une valeur entière lorsqu'ils sont appliqués à des opérandes entiers :
| Opérateur | Description |
|---|---|
| * | multiplier |
| div | diviser et tronquer (c'est-à-dire que la valeur n'est pas arrondie) |
| mod | a mod b = a - ((a div b)*b) |
| + | ajouter |
| - | soustraire |
Les opérateurs relationnels =, <>, <. <=. >=, > produisent un résultat booléen lorsqu'ils sont appliqués à des opérandes entiers. <> indique une inégalité.
Les quatre fonctions standard importantes produisant des résultats entiers sont :
| Fonction | Description |
|---|---|
| abs(x) | Le résultat est la valeur absolue de x. |
| sqr(x) | Le résultat est x au carré. |
| trunc(x) | x est une valeur réelle : le résultat est sa partie entière. (La partie fractionnaire est ignorée. Par conséquent, trunc(3,7)=3 et trunc(-3.7)=-3) |
| round(x) | x est la valeur surfacique : le résultat est l'entier arrondi. round (x) signifie pour x >=0 trunc(x+0,5). et pour x<0 trunc(x-0,5) |
Remarques : abs et sqr ne donnent un résultat entier que si leur paramètre est également de type entier. Si i est une variable de type entier, alors :
| Fonction | Description |
|---|---|
| succ(i) | donne l'entier «suivant», et |
| pred(i) | donne l'entier précédent |
Ceci est cependant exprimé plus clairement par les expressions :
- i+1 et i-1
Il existe un identifiant standard maxint, dépendant de l'implémentation. Si a et b sont des expressions entières, l'opération :
- a op b
est garanti d'être correctement mis en oeuvre lorsque :
- abs(a op b) <= maxint,
- abs(a) <= maxint, et
- abs(b) <= maxint
Le type réel
Une valeur de type réel est un élément du sous-ensemble de nombres réels défini par l'implémentation.
Tant qu'au moins un des opérandes est de type réel (l'autre pouvant être de type entier), les opérateurs suivants génèrent une valeur réelle :
| Opérateur | Description |
|---|---|
| * | Multiplier |
| / | Diviser (les deux opérandes peuvent être des entiers, mais le résultat est toujours réel) |
| + | Ajouter |
| - | Soustraire |
Les fonctions standards, lorsqu'elles acceptent un paramètre réel, donnent un résultat réel :
| Fonction | Description |
|---|---|
| abs(x) | Valeur absolue |
| sqr(x) | x au carré |
Fonctions standards avec paramètre réel ou entier et résultat réel :
| Fonction | Description |
|---|---|
| sin(x) cos(x) arctan(x) |
Fonctions trigonométriques |
| ln(x) | logarithme naturel |
| exp(x) | Fonction exponentielle |
| sqrt(x) | Racine carrée |
Attention : bien que le «real» soit inclus comme type scalaire, il ne peut pas toujours être utilisé dans le même contexte que les autres types scalaires. En particulier, les fonctions pred et succ ne peuvent pas accepter de paramètres réels. De plus, les valeurs de type «real» ne peuvent pas être utilisées pour l'indexation de tableaux, ni pour le contrôle d'instructions, ni pour définir le type de base d'un ensemble.
Le type char
Une valeur de type char est un élément d'un ensemble fini et ordonné de caractères. Chaque système informatique définit un tel ensemble à des fins de communication. Ces caractères sont ensuite disponibles sur les équipements d'entrée et de sortie. Malheureusement, il n'existe pas d'ensemble de caractères standard; par conséquent, la définition des éléments et leur ordre dépendent strictement de l'implémentation.
Les hypothèses minimales suivantes s'appliquent au type char, indépendamment de l'implémentation sous-jacente :
L'ensemble de caractères comprend :
- l'ensemble alphabétique des lettres latines majuscules A...Z;
- l'ensemble numériquement ordonné et contigus des chiffres 0...9;
- le caractère blanc.
Un caractère entouré d'apostrophes (guillemets simples) désigne une constante de ce type.
Exemples :
- '*' 'G' '3' '''' 'X'
(Pour représenter une apostrophe, on l'écrit deux fois.)
Les deux fonctions standard ord et chr permettent de cartographier l'ensemble de caractères donné sur un sous-ensemble de nombres naturels, appelés nombres ordinaux de l'ensemble de caractères, et vice versa : ord et chr sont appelées fonctions de transfert.
| Fonction | Description |
|---|---|
| ord(c) | est le numéro ordinal du caractère c dans le jeu de caractères ordonné sous-jacent. |
| chr(i) | est la valeur du caractère avec le nombre ordinal i. |
On voit immédiatement que ord et chr sont des fonctions inverses, c'est-à-dire :
De plus, l'ordre d'un ensemble de caractères donné est défini par :
- c1 < c2 iff ord(c1) < ord(c2)
Cette définition peut être étendue à chacun des opérateurs relationnels : =, <>, <, <=, >=, >. Si R désigne l'un de ces opérateurs, alors :
- c 1 R c2 iff ord(c1) R ord(c2)
Lorsque le paramètre des fonctions standards pred et succ est de type char, les fonctions peuvent être définies comme :
- pred(c) = chr(ord(c)-1)
- succ(c) = chr(ord(c)+1)
Remarque : le prédécesseur (successeur) d'un caractère dépend de l'ensemble de caractères sous-jacent et n'est pas défini s'il n'en existe pas.