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:
Dans les langages de programmation, on retrouve également cette notion d'expression sous une forme un peu différente et plus générale.
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.
Nous dirons qu'une expression est numérique si son type est un type numérique.
Par exemple, si Age est une variable de type int, l'écriture Age + 1, est une expression de type int et par conséquent, une expression numérique. 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 |
L'écriture des littéraux obéit à un certain nombre de conventions qui dépendent du type et du langage de programmation. Nous présentons ici celles du langage C++.
Un littéral numérique représente la valeur d'un nombre.
Pour le compilateur C++, une suite de chiffres éventuellement précédée d'un signe - ou +, est considérée comme l'écriture de la valeur d'un nombre entier. Exemple de littéraux de ce type: 2015, -1961, + 1935.
Pour écrire des nombres non entiers on utilise le point (et non pas la virgule !). La partie entière du nombre est suivi d'un point, puis d'une autre suite de chiffres. Exemples: 213.141559, -5.33333
Pour pouvoir écrire des nombres très grands ou très petit, C++ autorise également la notation scientifique (voir codage par virgule flottante), avec la lettre e ou E pour désigner l'exposant. Par exemple 1.7 1030, s'écrit 1.7E+30 ou 1.7e+30.
En C++, un littéral de type chaine de caractères s'écrit entre guillemets.
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 guillemets sauf les guillemets eux mêmes !. Pour mettre un guillemet dans une chaine de caractères, il faut le faire précéder par un anti-slash (le caractère \).
Parmis les chaines de caractères, il y en a une qui joue un rôle particulier : la chaine vide.
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.
Comme son nom l'indique, la valeur d'une constante ne peut pas varier durant l'exécution d'un programme.
En C++, une constante peut se déclarer de la manière suivante:
const type de la constante nom de constante = littéral ;
Le nom d'une constante obéit aux même règles que le nom d'une variable.
const float PI = 3.14159 ; const string CLEF_USB = "F:", DISQUE_DUR = "C:";
Notez que les constantes de même type peuvent être regroupées dans une même déclaration en séparant les noms des constantes par des virgules.
Nous avons utilisé des lettres majuscules pour les constantes, afin de les distinguer immédiatemment des variables. En adoptant cette convention vous rendrez vos programmes plus lisibles.
Comme pour la déclaration des variables, les déclarations de constantes peuvent figurer en de nombreux endroits d'un programme. Je vous propose de les déclarer avant le programme principal.
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. Nous en reparlerons plus loin.
Les opérateurs précédents sont tous des opérateurs binaires, c'est à dire qu'ils nécessitent deux données pour effectuer l'opération correspondante. Ces deux données s'appellent les opérandes.
En C++, une des deux opérandes figure avant l'opérateur et l'autre après. Comme par exemple 2 + 7, 3 * 9, etc .. Lorsqu'on a un opérateur binaire, on a donc forcément une opérande gauche et une opérande droite. Cela vous paraitra certainement naturel, mais sachez que d'autres langages (comme Lisp par exemple) utilisent une notation préfixée. C'est à dire que l'on écrira l'opérateur avant les deux opérandes ( par exemple + 2 7 à la place de 2 + 7).
Nous verrons ultérieurement qu'il existe également des opérateur unaires, c'est à dire des opérateurs qui ne nécessitent qu'une seule opérande.
Attention à l'opérateur de division: il se comporte de manière différente selon le type des nombres à diviser. Si au moins un des deux nombres n'est pas un entier, ce sera la division habituelle. Par contre, si les deux nombres à diviser sont entier, cet opérateur effectue la division euclidienne (également appelée division entière) des deux nombres. Par exemple:
Si vous ne voulez pas avoir la division euclidienne, il suffit d'écrire un des deux nombres avec un point à la fin. Il ne sera alors pas considéré comme un nombre entier par le compilateur. Par exemple, 1 / 2. vaudra 0.5.
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 C++, 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" |
L'écriture d'une expression dans un certain langage de programmation doit nécessairement obéir aux règles propres à ce langage.
Nous donnons ici, un certain nombre de règles non exhaustives permettant d'écrire des expressions valides en C++.
Les règles suivantes permettent de construire des expressions de type chaine de caractères valides:
Exemples d'application de ces règles (Nom et Prenom sont des variable de type String et Age est une variable de type int):
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" + 57 +" ans" | Non | 3 |
Prenom Nom | Non | 4 |
"Eric" "Thirion" | Non | 4 |
Prenom "Thirion" | Non | 4 |
Les règles suivantes (non exhaustives) permettent de construire des expressions numériques valides:
Exemples d'application de ces règles (avec Nom de type string, Age de type Integer et Poids de type float):
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 |