Les expressions


Vous connaissez déjà tous les expressions mathématiques dans lesquelles on retrouve des nombres, des opérateurs de calculs (+,-,..) et des variables. Par exemple:

(a+b) × (a-17)

Dans les langages de programmation, on retrouve également cette notion d'expression sous une forme un peu différente et plus générale.

Une expression est une écriture possédant une valeur et un type, dans laquelle figurent (entre autres) des littéraux, des constantes, des opérateurs et des noms de variables.

Vous savez déjà ce que sont les variables. Par contre, nous n'avons pas encore défini les littéraux, les constantes et les opérateurs.

La valeur d'une expression est le résultat du calcul de cette expression en tenant compte des valeurs des variables qu'elle contient. Son type est le type du résultat.

L'écriture Age+1, est par exemple une expression de type entier, car:

Sa valeur est celle de la variable Age augmentée de 1.

Une expression peut faire intervenir plusieurs opérations. Par exemple

  (Age + 1)*2

représente le double de la valeur de la variable Age augmentée de 1.

Voilà différentes valeurs des expressions Age+1 et (Age + 1)*2 pour différentes valeurs de la variable Age :

Age Age+1 (Age + 1)*2
10 11 22
0 1 2
43 44 88



Les littéraux

Un littéral est l'écriture d'une valeur d'un certain type de variable.

L'écriture des littéraux obéit à un certain nombre de conventions qui dépendent du type et du langage de programmation.

Les littéraux numériques

Un littéral numérique représente la valeur d'un nombre.

Il existe de nombreuses manières d'écrire un nombre. On peut par exemple avoir:

Les littéraux chaine de caractères

Un littéral de type chaine de caractères s'écrit entre quotes.

Par exemple 'Il fait beau', '4012', '(3 x + 1)', 'VisualC++', '@%^¨¤' sont des littéraux de type chaine de caractères.

On remarquera que tous les caractères sont autorisés entre les quotes sauf les quotes eux mêmes !. Pour mettre une quote dans une chaine de caractères, il faut le faire précéder par une autre quote. Par exemple:

    'L''horaire d''été'
 

Parmis les chaines de caractères, il y en a une qui joue un rôle particulier : la chaine vide.

La chaine vide est une chaine qui ne contient aucun caractère. On l'écrit '' (deux quotes).

Les Constantes

Une constante est un littéral portant un nom. Avant la compilation (ou l'interprétation) du code ce nom sera remplacé par le littéral dans tout le code.

Une constante est donc en quelque sorte le synonyme d'une valeur. On pourra par exemple introduire une constante PI représentant le nombre 3.14159. Avant la compilation du code (cette étape s'appelle en fait la précompilation) toutes les occurrences du mot PI seront remplacées par 3.14159.

Comme son nom l'indique, la valeur d'une constante ne peut pas varier durant l'exécution d'un programme.

Déclaration d'une constante en Pascal

En Pascal, une constante peut se déclarer de la manière suivante:

    Const nom de constante = littéral ;
 

Le nom d'une constante obéit aux même règles que le nom d'une variable.

Exemple
    Const PI = 3.14159 ;
     CLEF_USB = 'F:' ;  DISQUE_DUR = 'C:';
 

Operateur

En programmation, un opérateur est généralement représenté par un ou deux caractères représentant une certaine opération.

Voici par exemple, quelques opérateurs fréquement rencontrés dans les langages de programmation: +   -  /  *  ^  =  ++  !   %

Dans ce cours, nous nous concentrerons pour l'instant sur les opérateurs suivants:

Vous connaissez déjà les quatre premiers opérateurs, puisqu'il s'agit des opérateurs mathématiques classiques. Mais si vous n'avez jamais fait de programmation, vous ignorez probalement le sens de l'opérateur de concaténation.

La concaténation
Concaténer deux chaines de caractères signifie les mettre bout à bout.

Par exemple, si je concatène la chaine 'para' avec la chaine 'pluie', j'obtient la chaine 'parapluie'.

La manière de noter l'opérateur de concaténation dépend des langages.

En Pascal, il se note comme l'opérateur d'addition, c'est à dire avec un signe +.

L'opérateur de concaténation permet de construire des expressions de type chaine de caractères.

Par exemple, 'Je suis '+Prenom est une expression de type chaine de caractères constituée d'un littéral ('Je suis '), de l'opérateur de concaténation + et d'un nom de variable (Prenom).

On peut concaténer autant de chaines de caractères qu'on le souhaite. Par exemple, dans l'expression 'Je suis '+Prenom+' '+Nom il y a quatre chaines de caractères.

Voilà différentes valeurs de l'expression

 'Je suis ' + Prenom

pour différentes valeurs de la variable Prenom :

Prenom 'Je suis '+Prenom
'Jimi' 'Je suis Jimi'
'Albert' 'Je suis Albert'

Voilà différentes valeurs de l'expression

 'Je suis ' + Prenom + ' ' + Nom

pour différentes valeurs des variables Prenom et Nom :

Prenom Nom 'Je suis '+Prenom+' '+Nom
'Jimi' 'Hendrix' 'Je suis Jimi Hendrix'
'Albert' 'Einstein' 'Je suis Albert Einstein'
'Albert' '' 'Je suis Albert'

Validité d'une expression

L'écriture d'une expression dans un certain langage de programmation doit nécessairement obéir aux règles propres à ce langage.

Une expression de type T est valide si elle peut être "comprise" par l'interpréteur (ou le compilateur) comme un calcul d'une valeur de type T ou plus généralement comme la construction d'un objet de type T.

Nous donnons ici, un certain nombre de règles non exhaustives permettant d'écrire des expressions valides en Pascal.

Expressions valides de type chaine de caractères

Les règles suivantes permettent de construire des expressions de type chaine de caractères valides:


Règle1: un nom de variable est une expression valide de type chaine de caractères si et seulement cette variable est de type chaine de caractères.

Règle2: un littéral (ou une constante représentant ce littéral) est une expression valide de type chaine de caractères si et seulement si ce littéral est une chaine de caractères.

Règle3: A+B est valide si et seulement si A et B sont deux expressions valides de type chaine de caractères.

Règle4: un littéral, une constante ou un nom de variable ne peut pas être suivi immédiatement d'un littéral, d'une constante ou d'un nom de variable.

Exemples d'application de ces règles (Nom et Prenom sont des chaines de caractères et Age est un entier):

Expression Validité Règle non respectée
Prenom Oui
Age Non 1
'Thirion' Oui
48 Non 2
'Eric'+'Thirion' Oui
Prenom+Nom Oui
Prenom+'Thirion' Oui
'Cours de'+Prenom+'Thirion' Oui
'Eric'+'Thirion a' +Age+' ans' Non 3
'Eric'+'Thirion a' + 48 +' ans' Non 3
Prenom Nom Non 4
'Eric' 'Thirion' Non 4
Prenom 'Thirion' Non 4
Expressions valides de type numérique

Les règles suivantes (non exhaustives) permettent de construire des expressions numériques valides:


Règle1: une variable est une expression numérique valide si et seulement si elle est de type numérique (integer ou double par exemple).

Règle2: un littéral (ou une constante représentant ce littéral) est une expression numérique valide si et seulement si il est de type numérique.

Règle3: les écritures A+B, A-B, A*B, A/B sont des expressions numériques valides, si et seulement si A et B sont des expressions numériques valides.

Règle4: un littéral, une constante ou un nom de variable ne peut pas être suivi immédiatement d'un littéral, d'une constante ou d'un nom de variable.

Règle5: (A) est une expression numérique valide si et seulement si A est une expression numérique valide.

Règle6: chaque parenthèse ouvrante correspond à une et une seule parenthèse fermante.

Exemples d'application de ces règles (avec Nom de type String, Age de type Integer et Poids de type Double):

Expression Validité Règle non respectée
Nom Non 1
Age Oui
201 Oui
20.14 Oui
'20.14' Non 2
Age * Poids Oui
Age + Nom Non 3
Poids/(Age*2.2) Oui
Age Poids Non 4
Age 49 Non 4
(Age * Poids) Oui
(Age * Nom) Non 5
(Poids/((Age*(2.2))) Oui
Poids/((Age + 1 ) Non 6


Affichage d'expression

Les procédures d'affichage de l'unité ETBib permettent d'afficher la valeur d'une expression. Selon le type de l'expression on utilisera Afficher, AfficherEntier ou AfficherNombre.

Expression de type chaine de caractères

Pour afficher une expression E de type chaine de caractères dans une zone de texte ou zone de liste Z, on utilisera l'instruction:

   Afficher ( E, Z);

Exemple: la variable Nom contient le nom d'une personne et la variable Adresse son adresse. L'instruction suivante permet d'afficher le nom et l'adresse de la personne sur une seule ligne dans la zone de liste ZL_Client:

   Afficher (Nom + '-' + Adresse, ZL_Client);

le nom et l'adresse sont séparés par un tiret.

Expression numérique

Pour une expression numérique dont le résultat est toujours un nombre entier, on peut utiliser AfficherEntier ou AfficherNombre. Par contre, si le résultat n'est pas forcément entier, il faudra utiliser AfficherNombre.

Exemple1: Un hotel propose des chambres à 47 euros. La variable NJ contient le nombre de jours. L'instruction suivante permet d'afficher le prix du séjour dans la zone de texte ZT_PrixSejour :

   AfficherEntier ( NJ * 47 , ZT_PrixSejour);

dans cet exemple, on peut utiliser la procédure AfficherEntier car le prix à payer est forcément un nombre entier.

Exemple2: Supposons à présent que le prix d'une chambre soit variable et pas forcément entier. Ce prix est stocké dans une variable P de type double. Dans ce cas, on ne sait pas si le prix du séjour est un nombre entier. Il faut donc utiliser l'instruction:

   AfficherNombre ( NJ * P , ZT_PrixSejour);
Traitement sans variables résultats

Revenons sur le schéma lecture-traitement-affichage. A présent, nous pouvons expliquer comment afficher les résultats d'un traitement sans les sauvegarder dans des variables: il suffit d'écrire l'expression du traitement à l'intérieur de l'instruction d'affichage !

Voilà par exemple comment écrire le programme d'addition sans sauvegarder le résultat dans une variable:

 var
  Form1: TForm1;
  // Déclaration des variables globales
  x, y  : integer;

implementation

{ TForm1 }

procedure TForm1.BoutonAdditionnerClick(Sender: TObject);
begin
  // Lecture des données
  LireEntier (x,zoneTexteX);
  LireEntier (y,ZoneTexteY);
  // Traitement et Affichage du résultat
  AfficherEntier (x + y, ZoneTexteSomme);

end;     

Le calcul de l'addition se fait à l'intérieur de l'instruction d'affichage.

Dans des cas simples, cette manière de programmer peut être utilisée. Mais de manière générale, essayez autant que possible de séparer le traitements des données et l'affichage. Vous obtiendrez ainsi des programmes plus lisibles et plus faciles à modifier.