# Initiation à la programmation/L'algorithme

C'est l'outil que nous utiliserons pour décrire le comportement d'un programme.
Un algorithme est la description du comportement à l'aide de blocs fonctionnels élémentaires sur des valeurs (objets) connues.
L'algorithme est indépendant du langage de programmation.
Une fois l’algorithme écrit, il suffit au programmateur de le traduire dans le langage de programmation adéquat.

## Règles d'écritures des algorithmes

Les algorithmes sont écrits en langage courant compréhensible par toute personne.
C'est un processus systématique, de résolution, par le calcul, d'un problème permettant de décrire les étapes vers le résultat.
Il se compose comme une suite finie et non ambiguë d'opérations permettant de donner la réponse au problème.
* Indiquer son chemin à quelqu'un ;
** Si vous ne lui donnez pas des informations claires, vous ne lui permettrez pas d'arriver au résultat qui consiste à arriver à destination.
** En revanche, il peut y avoir plusieurs solutions pour atteindre le même résultat. Certaines solutions peuvent être plus efficaces que d'autres suivant les contraintes que l'on se fixe (chemin le plus rapide, chemin le plus court…).
* recette de cuisine ;
** Là encore, l'ordre des opérations est important (on ne met pas le plat au four pour un gâteau avant d'avoir mis l'appareil dedans) même si certaines opérations peuvent être inversées (on peut mettre le sucre avant la farine ou vice-versa).
* montage d'un meuble en kit.

## Les commentaires

Dans ce cours, ils sont encadrés par des accolades, {ceci est un commentaire}, ce n'est pas une règle générale.
Ils sont là uniquement pour renseigner le lecteur lorsqu'il prend connaissance de l’algorithme. Ils n'apportent rien au niveau du fonctionnement, mais sont très utiles lors de la maintenance par exemple. Ils spécifient à quoi correspondent les variables utilisées. Ils peuvent former une notice explicative.

## Les blocs graphiques

On peut se servir de blocs graphiques pour décrire les différentes actions qui doivent avoir lieu. C'est un langage graphique pour débuter, mais ce type d'écriture devient rapidement lourd à manipuler. On préférera par la suite utiliser les structures de contrôles (ou de composition).
* Marque le début et la fin d'un bloc fonctionnel
* Description d'une opération d'entrée ou de sortie avec des modules de dialogue H/M.
* Décrit une instruction.
* Test, selon le résultat du test (exemple : A est bien égal à 2, test vrai, on continuera la série d'instructions qui part de la branche vrai ; inversement si A est différent de 2, test faux, alors on continuera la série d'instructions qui part de la branche faux) le bloc fonctionnel poursuit vers un chemin ou l'autre.

## Les structures de contrôles (ou compositions séquentielles)

L'écriture d'un algorithme consiste à décrire de façon statique (du texte) le comportement dynamique d'un système. Pour ce faire, nous disposons de trois possibilités :
* enchainer les actions (exécution séquentielle) ;
* choisir entre plusieurs solutions en faisant des tests ;
* répéter les actions avec des boucles.
À savoir que de manière la plus générale, possible, le système se contente d'exécuter les instructions qu'il rencontre l'algorithme les unes à la suite des autres et ceux quels que soient la nature de ces instructions (boucle, test, etc.). On appelle cet chainement, la séquentialité.

### La séquentialité (l'enchainement ou composition séquentielle)
#### Exécution inconditionnelle d'une suite d'instructions

Lorsque plusieurs instructions doivent être exécutées successivement, on donnera la suite de ces instructions dans l’ordre où elles doivent être exécutées.
Les actions seront portées sur des lignes successives, (ou sur une même ligne) et seront séparées par le caractère « ; » qui a deux rôles :
* indiquer la fin d'une instruction (on parle aussi de séparateur).
* indiquer que le processus n’est pas fini.
Les instructions sont exécutées les unes à la suite des autres.

### Les test SI (sélection)
#### Composition conditionnelle : exécution conditionnelle d'une action

On provoque certain événement que si la condition est remplie SI condition ALORS instruction(s). La condition est une proposition booléenne dont on vérifie la valeur « vrai » ou « faux », si « vrai », on exécute l'instruction suivante.
Si la condition est « vrai », alors l'instruction est exécutée. Sinon, elle ne l'est pas.

#### Composition alternative : exécution conditionnelle de l’une des deux instructions

On provoque une instruction si la condition est vérifiée et une autre si elle ne l’est pas : SI condition ALORS instruction 1 SINON instruction 2.
Si la condition est « vrai », alors l'instruction est exécutée. Sinon, c’est l’instruction 2 qui sera exécutée.

#### Composition sélective : exécution conditionnelle de l’une parmi plusieurs instructions

Idem aux deux précédentes en un peu plus compliquée. Il faut respecter le fait que toutes les conditions s'excluent mutuellement.
Il est nécessaire que le champ des valeurs recouvre tous les choix possibles, sinon il y aura une erreur (effet de bord). Une façon de palier à cela est d'ajouter :

### Les boucles (itération)
#### Composition itérative : exécution multiple d'une même instruction

On exécute l’instruction tant que la condition est vraie tant que condition (…) faire instruction.
Tant que la condition est « vraie », alors l'instruction 1 est exécutée. Sinon, elle finit.
Une boucle tant que n'est pas exécutée si la condition est fausse au départ, ainsi l’instruction ne sera pas faite.

#### Composition itérative : exécution multiple d'une même instruction ; autre forme

On provoque toujours la même instruction tant que la condition n'est pas remplie répéter instruction(s) tant que condition (…).
On trouve aussi l'écriture
Tant que la condition est « vraie », alors l'instruction 1 est exécutée. Sinon, elle finit.
L'instruction 1 est exécutée au moins une fois, à la différence de la boucle précédente, ce qui peut provoquer des erreurs, on préférera donc utiliser la première forme de boucle tant que … faire et non faire … tant que.
Avec ces quelques structures de contrôle, on peut faire déjà pas mal de choses en algorithme (puis en programmation). Mais rappelez-vous de la règle d'or : vos algorithmes doivent être clairs.
| Généralités | Les variables en programmation |