Expressions



next up previous contents index
Next: Types tableaux Up: Quelques éléments de Previous: Types scalaires

Expressions

  Les expressions sont elles aussi de plusieurs types. Les expressions arithmétiques font intervenir les opérateurs classiques sur les entiers + (addition), - (soustraction), * (multiplication), div (division entière), mod (modulo). On utilise les parenthèses comme en mathématiques standard. Ainsi, si x et y sont deux variables entières, on peut écrire 3 * (x + 2 * y) + 2 * x * x pour .

De même, les mêmes opérateurs peuvent servir pour les expressions réelles, à l'exception de la division qui se note /. Donc si z et t sont deux variables réelles, on peut écrire 3 * (z + 1) / 2 pour . Il y a les fonctions trunc et round de conversion des réels dans les entiers: la première donne la partie entière, la seconde l'entier le plus proche. Réciproquement, les entiers sont considérés comme un sous-ensemble des réels, et on peut écrire librement 3.5 + (x div 2).

On peut aussi faire des expressions booléennes, à partir des opérateurs or, and, not. Ainsi si b etc sont deux variables booléennes, l'expression

(b and not c) or (not b and c)

représente le ou-exclusif de b et c. (On peut aussi l'écrire simplement b <> c).

Il existe aussi des opérateurs plus hétérogènes. Ainsi, les opérateurs de comparaison =, <>, <=, <, >, >= rendent des valeurs booléennes. On peut comparer des entiers, des réels, des booléens, des caractères (dans ce dernier cas, l'ordre est celui du code ASCII).

La précédence des opérateurs est relativement naturelle. Ainsi * est plus prioritaire que +, lui-même plus prioritaire que =. Si un doute existe, il ne faut pas hésiter à mettre des parenthèses. Il faut faire attention dans les expressions booléennes, et bien mettre des parenthèses autour des expressions atomiques booléennes, comme dans:

if (x > 1) and (y = 3) then ...

    L'ordre d'évaluation des opérateurs dans les expressions est malheureusement très simple. Ainsi, dans , on évalue d'abord et donnant les valeurs et , puis on évalue . Ceci veut donc dire que si l'évaluation de ou se passe mal (non terminaison, erreur de type à l'exécution), l'évaluation de se passera mal également. Cette remarque sera particulièrement gênante quand on fera de la recherche dans une table a, où on voudra écrire typiquement une boucle du genre

while (i <= TailleMax) and (a[i] <> v) do ...

Cette écriture sera interdite, puisqu'on devra évaluer toujours les deux arguments de l'opérateur and, même dans le cas où on finit avec et a[i] alors indéfini. Pascal, contrairement au langage C, devra tourner autour de cette difficulté avec des booléens, sentinelles ou autres instructions goto. Si l'on veut rester portable, il ne faut pas utiliser les particularités de certains Pascal (Think) qui évaluent leurs expressions booléennes de la gauche vers la droite contrairement à la définition standard.



next up previous contents index
Next: Types tableaux Up: Quelques éléments de Previous: Types scalaires