# Algorithmique impérative/Types expressions opérateurs

Nous entrons maintenant dans le vif du sujet. Cette première partie est plutôt abstraite et une fois que vous l'aurez étudiée, peut entrainer une sensation de confusion sans application pratique concrète. À cet effet, vous trouverez en fin de document une partie « Ce qu'il faut retenir ». Lors de votre première lecture, n'essayez pas de comprendre mais plutôt d'admettre. Une seconde lecture vous permettra d'avoir une vue d'ensemble et de constater qu'en fait, tout se tient.

## Première approche

Un type est la façon de comprendre la signification d'une donnée. Prenons la donnée 4 : elle peut être de type entier (de valeur 4 : 3+1), de type caractère (le caractère "4"), est-ce un réel... ?
Un opérateur transforme des données. Par exemple, la somme est un opérateur qui transforme des données en une autre donnée. Il convient de se demander sur quel(s) type(s) un opérateur fonctionne. Par exemple, la somme de deux données de type "entier" est de type "entier". On peut donc supposer que la somme de deux données de type "réel" sera de type "réel" (rassurez-vous : ce sera le cas). Qu'en est-il de la somme de deux données de type "caractère" et de la somme d'une donnée de type "réel" et d'une autre de type "entier" ?
Une expression est une combinaison d'opérateur et de données. Par exemple "4+3" est une expression comportant un opérateur et deux données de type "entier". Toutes les expressions ont une valeur, "4+3" a la valeur 7 ; 7 est une donnée de type "entier".
Nous avons donc trois notions différentes, mais liées entre elles par des règles que nous allons voir.

## Spécification

Chaque type a donc son ensemble de valeurs possibles et des opérateurs qui lui sont propres. Par exemple, le type entier qui peut prendre des valeurs telles que 10 ou 12345...
Les opérateurs sont des fonctions mathématiques et à ce titre, ils ont un espace de départ et un espace d'arrivée. Cette propriété s'étend aux opérateurs puisque chaque opérateur à un ou plusieurs types de départ (fonction à une ou plusieurs variables) et un type d'arrivée.
Prenons la fonction mathématique « somme ». On pourrait noter : somme : ℕ² → ℕ : x,y → x+y. De la même façon, l'opérateur somme ajoute deux données de type "entier" et renvoie un "entier". Remarquez que "a+b" est une notation de somme(a,b).
Pour chaque opérateur que vous découvrez ou utilisez, demandez-vous toujours quels sont les types de départ et d'arrivée. Beaucoup d'erreurs sont dues à des opérateurs mal utilisés.
Une expression est donc une suite d'opérateurs et de données qui doit respecter les règles imposées par l'usage des opérateurs.
Dans notre cours nous allons introduire cinq types, les plus couramment utilisés en informatique :
* entier
* réel
* caractère
* chaîne de caractères
* booléen
Ce(s) dernier(s) vous est (sont) probablement étrangers : ne vous inquiétez pas, nous allons y revenir.

## Les entiers et les réels

Voici deux types fidèles à leur définition mathématique.
Les opérateurs sur les entiers sont "+", "-" "*" "/", respectivement la somme, la différence, la multiplication et la division entière. Un dernier opérateur est l'opérateur mod, donnant le reste de la division entière. Tous ces opérateurs prennent deux données de type "entier" pour en renvoyer une autre du même type. (Rappel : a = (a / b)*b + a mod b)
Les opérateurs sur les réels sont "+", "-" "*" "/", respectivement la somme, la différence, la multiplication et la division. Tous ces opérateurs prennent deux données de type "réel" pour en renvoyer une autre du même type.
Il convient de se demander ce qu'il se passe quand on considère l'expression "a+b" avec a entier et b réel. Cela est censé ne jamais arriver. Néanmoins, on pourra considérer que l'entier se transforme en réel avant l'opération.

## Les caractères et les chaînes de caractères

Un caractère est tout simplement une lettre, un chiffre ou un symbole : par exemple, "1", "a", "A", "|" sont des caractères.
Aucun opérateur n'existe sur les caractères, ayant un caractère pour résultat. Dans certains langages de programmation, il peut exister des opérateurs pour ajouter un caractère à une chaîne de caractères.
Une chaîne de caractères est une suite de caractères telle que décrite précédemment. "1", "1abc" (par exemple) sont des chaînes de caractères. À noter que "" est une chaîne de caractères (la seule comportant 0 caractère).
Il n'existe qu'un seul opérateur sur les chaînes. Il s'agit de l'opérateur de concaténation qu'on notera "+". La concaténation revient à mettre la seconde chaîne à la suite de la première.
Par exemple "abc"+"def" est équivalente a "abcdef". Remarquez que l'opérateur de concaténation, même s'il est noté "+", n'est pas commutatif comme l'est la somme, nous n'avons évidemment pas a+b=b+a.
Attention, par la suite, à ne pas confondre 1+2 qui est l'entier de valeur 3 avec "1"+"2" qui est la concaténation des chaînes "1" et "2" qui vaut "12" (et sûrement pas "3").
Il n'existe pas de convention pour désigner l'opérateur de concaténation. Nous pourrons également utiliser la notation ".".
Bien que cela ne doive pas arriver, nous pouvons considérer que l'opération de concaténation effectuée sur des caractères fonctionne et donne une chaîne de caractères.

## Introduction à l'arithmétique booléenne

En informatique on introduit un nouveau type un peu moins familier : le booléen. Au même titre que les entiers ou les réels : un booléen peut prendre un ensemble de valeurs et possède ses propres opérateurs.
Il n'est donné ici que quelques explications (nécessaires et suffisantes pour la suite du cours) sur le booléen. Il existe cependant toute une algèbre permettant de travailler sur les booléens. Un complément essentiel de ce cours d'algorithmique impérative est l'étude de l'algèbre de Boole.

### Première approche

En mathématiques, les entiers ont été invités pour dénombrer, les réels pour représenter les distances, les volumes, etc... Le booléen a également pour utilité de représenter le réel. Il sert à représenter la véracité, c'est à dire à déclarer si une chose est vraie ou fausse.
L'ensemble des valeurs possibles d'un booléen est de deux (!). Ces deux valeurs sont notées VRAI et FAUX.
Voici deux exemples comportant des informations représentées par des booléens :
Premier exemple : Supposons que E soit en ensemble qui contient les éléments a, b, c et d.
* L'information cardinal de E est une information qui peut être représentée par un entier (ici 4).
* L'information b appartient à E est une information qui peut être représentée par un booléen (ici VRAI).
* L'information e appartient à E est une information qui peut être représentée par un booléen (ici FAUX).
* L'information 'E comporte au moins 2 éléments est une information qui peut être représentée par un booléen (ici VRAI).
Second exemple : Prenons l'ascenseur d'un immeuble.
* L'information nombre de personnes dans l'ascenseur peut être représentée par un entier.
* L'information il y a au moins une personne dans l'ascenseur peut être représentée par un booléen.
* L'information l'ascenseur est au premier étage peut être représentée par un booléen.
* etc.
Vous voyez donc qu'un booléen peut servir à représenter une multitude d'informations différentes mais ne remplace pas les entiers, les réels ou tout autre type. Chaque type à un usage et il convient d'user du booléen a bon escient tout comme on ne représente pas une distance avec un entier ou un dénombrement avec un réel.

### Opérateurs booléens

Au même titre que pour les autres types, il existe des opérateurs sur les booléen. Nous avons vu que la somme était un opérateur qui prenait deux entiers et renvoyait un résultat de type entier également. Il en va de même pour les booléen.
| Opérateur | noté | Type des paramètres | Type du résultat | Valeur du résultat | Exemple | Remarque |
| négation | non ou ¬ | un booléen | un booléen | Si VRAI alors FAUX. Si FAUX alors VRAI | non(VRAI) a pour résultat FAUX non(FAUX) a pour résultat VRAI | non est une fonction mathématique dite réciproque : non(non(truc)) vaut truc. |
| conjonction | et | deux booléens | un booléen | Le résultat vaut VRAI seulement si les deux paramètres sont VRAI. FAUX sinon. | VRAI et VRAI a pour résultat VRAI VRAI et FAUX a pour résultat FAUX | On pourra aussi dire "Pour que le résultat soit VRAI il faut que tous les paramètres soient VRAI". |
| disjonction | ou | deux booléens | un booléen | Le résultat vaut VRAI si au moins un des deux paramètres est VRAI. FAUX si tous les paramètres sont FAUX | VRAI ou VRAI a pour résultat VRAI VRAI ou FAUX a pour résultat VRAI | |
Vous en serez déjà arrivé à ces conclusions : si b est un booléen,
* b et FAUX vaut FAUX quel que soit b
* b ou VRAI vaut VRAI quel que soit b
Ces opérateurs peuvent bien sûr former des expressions. Quelques exemples :
* non(non(FAUX)) vaut FAUX
* ((VRAI et FAUX) ou VRAI) vaut VRAI
La négation est prioritaire sur la conjonction. La conjonction est prioritaire sur la disjonction.

## Tableau récapitulatif

Tableau récapitulatif des types et de leurs opérateurs :
| Type | Ensemble de valeurs | Opérateurs |
| Entier | ℕ | + (somme), - (différence), * (multiplication), / (division entière) |
| Réel | ℝ | + (somme), - (différence), * (multiplication), / (division) |
| Booléen | {VRAI ; FAUX} | ¬ (négation), et (conjonction), ou (disjontion) |
| Caractère | | |
| Chaîne de caractères | | Concaténation |

## Ce qu'il faut retenir

Ce chapitre est abstrait et ne donne rien de concret. N'apprenez pas par cœur, tout ceci se tient et est assez cohérent par rapport à ce que vous avez appris sur les mathématiques. Voici ce qui doit retenir votre attention :
* Retenez les noms des différents types et de leurs opérateurs en retenant bien quel opérateur fait quoi et avec quoi. Vous devriez pouvoir reconstruire de tête le tableau récapitulatif (encore une fois, vous ne devriez pas avoir à l'apprendre, vous devriez pouvoir le déduire des types).
* Retenez que les booléen, les caractères et les chaînes de caractères et leurs opérateurs fonctionnent exactement de la même façon que les entiers et les réels. Ce sont des types, qui ont un ensemble de valeurs possibles et des opérateurs spécifiques. On peut écrire des expressions à condition de respecter certaines règles.
* Essayez de voir un peu comment on manipule cette arithmétique booléenne qui, comme l'arithmétique entière, vous permet de calculer des expressions et d'en simplifier d'autres. Remarquez que cette arithmétique est plus simple puisque vous n'avez que deux valeurs possibles (c'est peu par rapport à l'infinité d'entiers...).
* Vous pouvez déjà faire les exercices sur ce chapitre. Si vous avez su les résoudre sans relire ce cours.