A. Sigayret : Algorithmique

2. Données et traitements


Un algorithme agit sur des données qui peuvent être élémentaires ou bien structurées. Une donnée élémentaire correspond à tout ce qui peut être représenté par un codage sur un mot-mémoire. Cela comprend des nombres, des symboles, ou tout autre élément de la réalité qui peut être codé simplement. Le nombre de bits qui compose un mot-mémoire conditionne le nombre d'objets élémentaires qu'on peut coder. Une structure de données permet de regrouper des données élémentaires de manière cohérente. Pour modéliser les données, on peut utiliser un type abstrait, à un niveau d'abstraction supérieur à celui de la structure de données.
Par exemple, en choisissant un codage sur 32 bits, on pourra représenter plus de quatre milliards d'entiers naturels ou relatifs, l'ensemble des caractères Unicode, ... ou l'ensemble des nouveaux-nés de l'année en cours. On pourra modéliser l'identité d'un individu par un type abstrait Ensemble groupant son nom, ses prénoms, sa date de naissance, etc. La structure de données matérialisant cet ensemble pourra contenir une chaine de n caractères pour le nom, une liste de chaines de p caractères pour les prénoms, un triplet d'entiers naturels pour la date de naissance, etc.

Chaque objet élémentaire ou structuré est représenté dans un algorithme par un identificateur (un nom). On ne donne pas au début d'un algorithme général la liste des identificateurs utilisés ni leurs types (il n'est même pas obligatoire de conserver un même type pour un identificateur !). Les identificateurs essentiels sont indiqués dans les rubriques Entrée et Sortie, et les autres variables (d'usage) sont découvertes à mesure. Par contre, dans un algorithme précisé, on peut ajouter une rubrique Variables d'usages (après Résultat ou Sortie) qui donne la liste de ces variables. Il n'y a pas lieu de différencier identificateurs de variables ou de constantes.

Quand on veut affecter une valeur à une variable on utilise le symbole ← (flèche gauche, souvent écrite <-). Par exemple n←3 pour placer la valeur 3 dans la variable n. Plus généralement, on utilise des notations littérales et des symboles mathématiques plutôt que des symboles venant des langages de programmation :
algorithmique mathématiques programmation
=   := let
non ¯   ¬ !   ~   -
et *   ∧ &   &&   and
ou +   ∨ |   ||   or
Faux (F) 0 0   False   FALSE
Vrai (V) 1 1   True   TRUE
= = =   ==
<>   !=   ~=
> > >
>=
< < <
<=
exposant exposant ^   **
div division entière /   //
mod et son reste %   %%

Les actions élémentaires qu'effectue un algorithme sur ces données (lecture, modification, copie, etc.) constituent les traitements, lesquels peuvent être des suites d'instructions élémentaires constituant des blocs ou la structuration et l'imbrication de divers blocs d'instructions à l'aide de structures de contrôle (parfois appelées schémas de contrôle). Il y a un nombre fini d'instructions élémentaires sur un mot-mémoire, mais on peut créer des instructions structurées en les combinant. Quand un ensemble d'instructions porte sur un type abstrait, on peut créer une primitive qui réalisera une action de base pour ce type.
Par exemple, en utilisant l'addition comme instruction élémentaire, on pourra créer une instruction structurée qui réalisera une multiplication : « pour multiplier n par p, ajouter p fois n à lui-même » (bien évidemment, il est préférable de prévoir la multiplication comme instruction élémentaire!).  Autre exemple, pour obtenir l'âge d'une personne, on effectue une suite d'opérations sur les années, mois et jours. Le type abstrait Date peut alors être associée à une primitive age(date_naissance,date_du_jour).

Structures de données usuelles :
Structures de contrôles usuelles : Par convention, les instructions élémentaires sont séparées par un point-virgule ; la dernière instruction se termine par un point. L'indentation de la présentation met en évidence les blocs d'instructions, sans qu'il soit besoin d'indicateurs de fin de structure de contrôle (Finsi, Finpour, ...) ; dans un algorithme précisé, certains conservent toutefois ces indicateurs.

On peut effectuer des combinaisons emboîtées de structures de contrôle. Les deux plus fréquents sont sans doute l'imbrication de boucles déterminées et l'enchainement de conditionnelles :
Pour h de 1 à n faire
Pour i de 1 à p faire    
BLOC_interne;
BLOC_externe;
Si condition_1 alors BLOC_1
sinon Si condition_2 alors BLOC_2
sinon BLOC_3

Remarque. Il n'y a pas lieu pour l'écriture des algorithmes de privilégier l'anglais, au contraire de la programmation où l'utilisation de mots-clés dans une autre langue favorise la visualisation des autres mots (identificateurs, fonctions, etc.) qui, dans un cadre francophone, peuvent être en français.