Vous êtes sur la page 1sur 11

CHAPITRE I 

: INTRODUCTION A L’ALGORITHMIQUE

OBJET : Ce chapitre explique ce que c’est que l’algorithmique et l’algorithme.


OBJECTIFS : A la fin de ce chapitre, vous devez être à mesure de connaître :
 Ce qu’est l’algorithmique ;
 Ce que c’est l’algorithme, son rôle, son intérêt et ses
caractéristiques.

I. DEFINITION DE L’ALGORITHMIQUE

« Un langage de programmation est une convention pour donner des ordres à un
ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils. Ca, ce
sont les caractéristiques de la magie. »
- Dave Small

L’algorithmique est un terme d’origine arabe, comme algèbre, amiral ou zénith.


C’est la discipline qui traite des méthodes permettant d’écrire les règles, les
méthodes à observer pour concevoir un algorithme.
Le problème de l’algorithmique est de faire réaliser par l’ordinateur une tâche
complexe (problème) alors que ce dernier n’est capable que d’exécuter des actions
élémentaires. Il convient donc pour cela de décomposer cette tâche complexe en
une suite de tâches élémentaires qu’on appelle algorithme que l’ordinateur sera
capable d’interpréter et d’exécuter directement. Cette méthode de décomposition de
problème permet de passer avec un maximum de chances de réussite de la
description du problème initial complexe à sa résolution.

II. NOTION D’ALGORITHME

1. Définition

Avez-vous déjà fait la cuisine? Avez-vous déjà déchiffré une notice en


anglais pour faire fonctionner un appareil électronique ? Si oui, sans le savoir, vous
avez déjà exécuté des algorithmes.
Plus fort : avez-vous déjà indiqué son chemin à une personne égarée ? Avez-vous
fait chercher un objet à quelqu’un par téléphone ? Si oui, vous avez déjà créé et fait
exécuter des algorithmes.
Comme quoi, l’algorithmique n’est pas un savoir ésotérique réservé à quelques
rares initiés touchés par la grâce divine, mais une aptitude partagée par la totalité de
l’humanité. Donc, pas d’excuses.
Un algorithme, c’est une suite d’instructions, qui une fois exécutée
correctement, conduit à un résultat donné. Il est écrit dans un langage naturel
(français, anglais, arabe, allemand…) et est inintelligible à l’ordinateur. Si l’algorithme
est juste, le résultat est le résultat voulu.
Le terme algorithme vient du mathématicien Arabe MUHAMMAD IBN MUSA AL
KHAREZMI (fin VIIIe siècle, début IX e siècle) qui rédigea un traité exhaustif sur le
système de chiffres et de numération hindou d’où est tiré le nôtre. À partir de ce
moment, l’utilisation des chiffres et des modes de calcul hindou fût connu sous le
nom d’ALGORISMI.

Complétons toutefois cette définition. Après tout, en effet, si l’algorithme, comme


on vient de le dire, n’est qu’une suite d’instructions menant celui qui l’exécute à
résoudre un problème, pourquoi ne pas donner comme instruction unique : « résous
le problème », et laisser l’interlocuteur se débrouiller avec ça ? A ce prix, n’importe
qui serait champion d’algorithmique sans faire aucun effort. Ce serait trop facile.
Pour fonctionner, un algorithme doit donc contenir uniquement des
instructions compréhensibles par celui qui devra l’exécuter.

2. Algorithmique et programmation

Pourquoi apprendre l’algorithmique pour apprendre à programmer ? En quoi a-t-


on besoin d’un langage spécial, distinct des langages de programmation
compréhensibles par les ordinateurs ?
Parce que l’algorithmique exprime les instructions résolvant un problème
donné indépendamment des particularités de tel ou tel langage. Pour prendre
une image, si un programme était une dissertation, l’algorithmique serait le plan, une
fois mis de côté la rédaction et l’orthographe. Or, vous savez qu’il vaut mieux faire
d’abord le plan et rédiger ensuite que l’inverse…
Apprendre l’algorithmique, c’est apprendre à manier la structure logique d’un
programme informatique. Cette dimension est présente quelle que soit le langage de
programmation ; mais lorsqu’on programme dans un langage (en C, en Visual Basic,
etc.) on doit en plus faire attention aux problèmes de syntaxe, ou de types
d’instructions, propres à ce langage. Apprendre l’algorithmique de manière séparée,
c’est donc sérier les difficultés pour mieux les vaincre.
A cela, il faut ajouter que des générations de programmeurs, souvent
autodidactes, ayant directement appris à programmer dans tel ou tel langage, ne font
pas mentalement clairement la différence entre ce qui relève de la structure logique
générale de toute programmation (les règles fondamentales de l’algorithmique) et ce
qui relève du langage particulier qu’ils ont appris. Ces programmeurs, non seulement
ont beaucoup plus de mal à passer ensuite à un langage différent, mais encore
écrivent bien souvent des programmes qui même s’ils sont justes, restent laborieux.
Car on n’ignore pas impunément les règles fondamentales de l’algorithmique…
Alors, autant l’apprendre en tant que telle !
Savoir programmer, c’est plus savoir trouver l’algorithme à un problème que
de connaître toutes les instructions d’un langage de programmation. La base
de la programmation est l’algorithme.
3. Convention d’écriture d’un algorithme

Historiquement, plusieurs types de notations ont représenté des algorithmes.


Il y a eu notamment une représentation graphique, avec des carrés, des losanges,
etc. qu’on appelait des organigrammes. Aujourd’hui, cette représentation est
quasiment abandonnée, pour deux raisons. D’abord, parce que dès que l’algorithme
commence à grossir un peu, ce n’est plus pratique du tout du tout. Ensuite parce que
cette représentation favorise le glissement vers un certain type de programmation,
dite non structurée que l’on tente au contraire d’éviter.
C’est pourquoi on utilise généralement une série de conventions appelée
«  pseudo-code », qui ressemble à un langage de programmation authentique dont
on aurait évacué la plupart des problèmes de syntaxe. Ce pseudo-code est
susceptible de varier légèrement d’un livre (ou d’un enseignant) à un autre. C’est
bien normal : le pseudo-code, encore une fois, est purement conventionnel ; aucune
machine n’est censée le reconnaître. Donc, chaque cuisinier peut faire sa sauce à sa
guise, avec ses petites épices bien à lui, sans que cela prête à conséquence.

III. ANALYSE DU PROBLEME

En amont de toute programmation se trouve nécessairement un problème. En fait


c’est la résolution du problème en utilisant l’ordinateur qui amène à la
programmation. Donc pour mieux cerner le problème à résoudre, il ya des étapes à
suivre. Ainsi l’analyse d’un problème consiste à :
*Enoncer le problème ;
*Poser le problème ;
*Décrire le cheminement pour la résolution du problème.

1. Enoncer le problème

Il consiste à répertorier toutes les données, les situations initiales et aussi les
résultats. En plus de cela il s’agit majoritairement de comprendre à fond la nature et
le contenu du problème. Vous devrez vous poser ces quelques questions :
De quoi est-il question dans le problème ?
 Qu’est ce qu’on me demande ?
 Quels sont les éléments contenus dans le problème et que je dois utiliser
pour sa résolution ?
 il ya-t-il un calcul à effectuer (si oui poser la formule du calcul et déduire les
éventuelles variables) ?
 Quelle est la finalité du problème ?
2. Poser le problème

C’est décrire les grandes lignes de la résolution du problème posé, c’est-à-dire


pour passer des données aux résultats tout en respectant les hypothèses de travail.
Il s’agit simplement de dégager les grandes lignes de la résolution du problème. Ceci
est l’étape qui précède la résolution proprement dite du problème.

3. Le cheminement

Il s’agit de décrire de façon non ambiguë et détaillée les différentes étapes pour
passer des données aux résultats tout en respectant les hypothèses de travail. En
fait, c’est ici que l’on résout le problème posé. Ce cheminement devra être formulé
dans un langage naturel mais non intelligible à l’ordinateur appelé ALGORITHME.
Bref, c’est ici que l’on écrit l’algorithme.

4. Les éléments de l’Algorithme

Un algorithme se caractérise par deux sous ensembles qui sont :


*L’ensemble des objets (données et résultats)
*L’ensemble des opérations ou actions
L’objet désigne une entité du problème. Il est caractérisé par son identificateur (son
nom) et par son titre (l’ensemble des opérations applicables à cet objet).Les actions
sont appliquées sur les données pour produire les résultats.

5. Les caractéristiques de l’Algorithme

*Formel : langage qui utilise un ensemble de termes et de règles syntaxiques


pour permettre de communiquer sans ambiguïté.
*Inintelligible à l’ordinateur : L’ordinateur ne comprend pas l’algorithme (écrit
dans un langage naturel (espagnol, baoulé, bété, dioula…) donc il va falloir le
traduire dans un langage que l’ordinateur comprend (langage de programmation)
pour que l’ordinateur puisse l’exécuter.
* Indépendant à la fois de l’ordinateur qui l’exécute (à travers les programmes) et
des langages de programmation.

EXERCICES D’APPLICATION

1. Quel est l’intérêt d’un algorithme ?

2. Quelles sont les qualités attendues d’un programmeur ?

3. « Savoir programmer c’est plus savoir trouver l’algorithme à un problème que


de connaître toutes les instructions d’un langage de programmation ».
Commentez ce passage.

4. De quoi est constitué un programme informatique ?


5. Quelles sont les grandes lignes de la résolution d’un problème ?

6. Pourquoi pour la résolution d’un problème par l’ordinateur, nous devons le


décomposer en éléments très simples et détaillés ?

7. Quelles sont les étapes lors de l’analyse d’un problème ?

CHAPITRE II : INTRODUCTION AUX ELEMENTS DE L’ALGORITHME


OBJET : Ce chapitre présente la structure de l’algorithme et les objets servant à
l’élaboration de celui-ci, c’est-à-dire les différents éléments sur lesquels les actions
vont porter.

OBJECTIFS : A la fin de ce chapitre, vous serez à mesure de maîtriser :


 La structure d’un algorithme ;
 Les différents éléments de l’algorithme sujets aux traitements ;
 Les différents opérateurs.

« A l’origine de toute erreur attribuée à l’ordinateur, vous trouverez au moins deux
erreurs humaines. Dont celle consistant à attribuer l’erreur à l’ordinateur. »

- Anonyme

I. STRUCTURE GENERALE DE L’ALGORITHME

1. Structure d’un Algorithme

La mise en place d’un algorithme respecte un certains nombres de règles .Ainsi


la structure d’un algorithme se subdivise en trois parties dont l’ordre est à respecter.
Les trois grandes parties sont :

 L’entête : Cette partie permet tout simplement de donner un nom à notre


algorithme. Ce nom n’influence en rien le bon déroulement de l’algorithme. En
générale il faut donner des noms parlants à nos algorithmes, ceci pour
permettre au lecteur d’avoir une idée de ce que fera l’algorithme qu’il lira.
Ecrire ce nom en :
 ne mettant pas d’espace ou utiliser l’Under-score (le tiret du 8 au clavier), pour
séparer les mots composant le nom de l’algorithme ;
 ne mettant pas d’accent ou mettre en majuscule pour éviter les caractères
accentués ;
 ne mettant pas de chiffre au début ;
 n’utilisant pas de symboles (ex. : ω, ≠, β, $, %, &, @, *, €, £…)

 Partie déclarative : c’est une liste exhaustive des objets, grandeurs utilisés
et manipulés dans le corps de l’algorithme. Cette liste est placée en début
d’algorithme. On parle de déclaration de variables, de constantes, les
structures de données, les fonctions et procédures.
 le corps de l’algorithme : il est obligatoire et débute par le mot clé DEBUT
et se termine par le mot clé FIN. C’est dans cette partie de l’algorithme que
sont placées les tâches (instructions opérations …) à exécuter par notre
algorithme en utilisant les éléments déclarés éventuellement dans la partie
déclarative.

Tous les mots clés sont de préférable mis en lettre majuscule.

2. Syntaxe générale d’un Algorithme

ALGORITHME nom_algorithme ; L’ENTETE

VAR nom_variable : type ;

CONST nom_constante=valeur ; PARTIE DECLARATIVE

FONCTION nom_fonction () : type; facultatif

PROCEDURE nom_procédure ;

DEBUT

Instruction1 ;
.
.
. LE CORPS
Instruction n ;

FIN

II. LES OBJETS : VARIABLES ET CONSTANTES

Dans un programme informatique, on va avoir en permanence besoin de stocker


provisoirement ou constamment des valeurs. Il peut s’agir de données issues du
disque dur, fournies par l’utilisateur (frappées au clavier). Il peut aussi s’agir de
résultats obtenus par le programme, intermédiaires ou définitifs. Ces données
peuvent être de plusieurs types (on en reparlera) : elles peuvent être des nombres,
du texte, etc. Toujours est-il que dès que l’on a besoin de stocker une information au
cours d’un programme, on utilise un objet.
Pour employer une image, cet objet est une boîte, que le programme (l’ordinateur)
va repérer par une étiquette. Pour avoir accès au contenu de la boîte, il suffit de la
désigner par son étiquette.
En réalité, dans la mémoire vive de l’ordinateur, il n’y a bien sûr pas une vraie
boîte, et pas davantage de vraie étiquette collée dessus (j’avais bien prévenu que la
boîte et l’étiquette, c’était une image). Dans l’ordinateur, physiquement, il y a un
emplacement de mémoire, repéré par une adresse binaire. Si on programmait dans
un langage directement compréhensible par la machine, on devrait désigner nos
données par de superbes 10011001 et autres 01001001, de tels langages existent !
Ils portent le nom d’assembleur mais ce ne sont pas les seuls langages disponibles.
Les langages informatiques plus évolués (ce sont ceux que presque tout le monde
emploie) se chargent précisément, entre autres rôles, d’épargner au programmeur la
gestion fastidieuse des emplacements mémoire et de leurs adresses. Et, comme
vous commencez à le comprendre, il est beaucoup plus facile d’employer les
étiquettes de son choix, que de devoir manier des adresses binaires.

1. Définition et caractéristique d’objet


La première chose à faire avant de pouvoir utiliser un objet est de créer la boîte
et de lui coller une étiquette. Ceci se fait tout au début de l’algorithme, avant même
les instructions proprement dites. C’est ce qu’on appelle la déclaration des objets.
Lorsqu’on déclare un objet (variable ou constante), il ne suffit pas seulement de
créer une boîte (réserver un emplacement mémoire) ; encore doit-on préciser ce que
l’on voudra mettre dedans, car de cela dépendent la taille de la boîte (de
l’emplacement mémoire) et le type de codage utilisé.
La déclaration des objets se fait à l’aide des éléments suivants :
*L’identificateur ou nom ;
*le type ;
*et éventuellement sa valeur (constante).

a. L’identificateur ou nom 
Le nom de l’objet (l’étiquette de la boîte) obéit à des impératifs changeant selon
les langages. Toutefois, une règle absolue est qu’un nom de variable peut comporter
des lettres et des chiffres (pas de chiffre au début du nom), mais qu’il exclut la
plupart des signes de ponctuation, en particulier les espaces et les accents (voir
règles pour le nom de l’algorithme). Un nom de variable correct commence
également impérativement par une lettre. Quant au nombre maximal de caractères
pour un nom de variable, il dépend du langage utilisé.
En pseudo-code algorithmique, on est bien sûr libre du nombre de caractères pour
un nom d’objet, même si pour des raisons purement pratiques, on évite
généralement les noms à rallonge.

b. Les types
C’est l’intervalle des différentes valeurs que peuvent prendre l’objet. Ainsi suivant
le type qu’on va attribuer à l’objet (qui est d’ailleurs fonction du problème qu’on aura
à résoudre), celui-ci pourra prendre telles valeurs ou ne pourra pas prendre telles
autres valeurs.
b.1 Types numériques classiques
Commençons par le cas très fréquent, celui d’un objet destiné à recevoir des
nombres. Si l’on réserve un octet pour coder un nombre, je rappelle qu’on ne pourra
coder que 28 = 256 valeurs différentes. Cela peut signifier par exemple les nombres
entiers de 1 à 256, ou de 0 à 255, ou de –127 à +128… Si l’on réserve deux octets,
on a droit à 65 536 valeurs ; avec trois octets, 16 777 216, etc. Et là se pose un autre
problème : ce codage doit-il représenter des nombres décimaux ? Des nombres
négatifs ?
Bref, le type de codage (autrement dit, le type d’objet) choisi pour un nombre va
déterminer :

 les valeurs maximales et minimales des nombres pouvant être stockés dans la
variable
 la précision de ces nombres (dans le cas de nombres décimaux).

Tous les langages, quels qu’ils soient offrent une panoplie de types numériques,
dont le détail est susceptible de varier légèrement d’un langage à l’autre. On retrouve
cependant les types suivants :
 
Type Numérique Plage
Byte (octet) 0 à 255
Entier simple -32 768 à 32 767
Entier long -2 147 483 648 à 2 147 483 647
-3,40x1038 à -1,40x1045 pour les valeurs négatives
Réel simple
1,40x10-45 à 3,40x1038 pour les valeurs positives
1,79x10308 à -4,94x10-324 pour les valeurs négatives
Réel double
4,94x10-324 à 1,79x10308 pour les valeurs positives

Pourquoi ne pas déclarer toutes les objets numériques en réel double, histoire
de bétonner et d’être certain qu’il n’y aura pas de problème ? En vertu du
principe de l’économie de moyens. Un bon algorithme ne se contente pas de
« marcher » ; il marche en évitant de gaspiller les ressources de la machine.
Sur certains programmes de grande taille, l’abus de variables
surdimensionnées peut entraîner des ralentissements notables à l’exécution,
voire un plantage pur et simple de l’ordinateur. Alors, autant prendre dès le
début de bonnes habitudes.

En algorithmique, on ne se tracassera pas trop avec les sous-types de variables


numériques. On se contentera donc de préciser qu'il s'agit d'un nombre, en gardant
en tête que dans un vrai langage, il faudra être plus précis.

b.2 Autres types numériques


Certains langages autorisent d’autres types numériques, notamment :
 le type monétaire (avec strictement deux chiffres après la virgule)
 le type date (jour/mois/année).

Nous n’emploierons pas ces types dans ce cours ; mais je les signale, car vous ne
manquerez pas de les rencontrer en programmation proprement dite.

b.3 Type alphanumérique

Fort heureusement, les boîtes que sont les objets peuvent contenir bien d’autres
informations que des nombres. Sans cela, on serait un peu embêté dès que l’on
devrait stocker un nom de famille, par exemple.
On dispose donc également du type alphanumérique (également appelé type
caractère, type chaîne ou en anglais, le type string –Dans un objet de ce type, on
stocke des caractères, qu’il s’agisse de lettres, de signes de ponctuation, d’espaces,
ou même de chiffres. Le nombre maximal de caractères pouvant être stockés dans
un seul objet  string dépend du langage utilisé.
Un groupe de caractères (y compris un groupe de un, ou de zéro caractères), qu’il
soit ou non stocké dans un objet, est donc souvent appelé chaîne de caractères.
En pseudo-code, une chaîne de caractères est toujours notée entre guillemets
pour éviter deux sources principales de  possibles confusions :

 la confusion entre des nombres et des suites de chiffres. Par exemple, 323
peut représenter le nombre 323 (trois cent vingt-trois), ou la suite de caractères 3, 2,
et 3. Et ce n’est pas du tout la même chose ! Avec le premier, on peut faire des
calculs, avec le second, point du tout. Dès lors, les guillemets permettent d’éviter
toute ambiguïté : s’il n’y en a pas, 323 est trois cent vingt trois. S’il y en a, "323"
représente la suite des chiffres 3, 2, 3.
 Mais ce n'est pas le pire. L'autre confusion, bien plus grave - et bien plus
fréquente – consiste à se mélanger les pinceaux entre le nom d'un objet et son
contenu. Pour parler simplement, cela consiste à confondre l'étiquette d'une boîte et
ce qu'il y a à l'intérieur.

b.4 Type booléen


Le dernier type d’objet est le type booléen: on y stocke uniquement les valeurs
logiques VRAI et FAUX.
On peut représenter ces notions abstraites de VRAI et de FAUX par tout ce qu'on
veut : de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Peu importe. Ce qui
compte, c'est de comprendre que le type booléen est très économique en termes de
place mémoire occupée, puisque pour stocker une telle information binaire, un seul
bit suffit.

c. La valeur
C’est ce que vaut l’objet à un instant donné. C’est son contenu.

2. Déclaration de variables
Une variable est un objet dont la valeur est susceptible de varier tout au long du
déroulement du programme d’où le terme « variable ».En fait, l’on peut lui attribuer
une valeur x et après lui attribuer une autre valeur y, ainsi de suite.

En pseudo-code, une déclaration de variables aura ainsi cette tête :


Var nom_variable: type ;

Ex. : var x : entier ;

3. Déclaration de constante
Une constante est un objet dont la valeur (le contenu) ne change pas au cours du
traitement, et donc son contenu reste identique durant tout le programme ; d’où le
terme « constante ». Elle conserve la valeur qu’on lui a attribuée au départ, sans
aucune possibilité de modification.
SYNTAXE : CONST nom_constante = valeur ;
Ex. : CONST x = 25 ;
Val=3.5 ;
Cat = ‘c’ ;

III. LES OPERATEURS


On va maintenant détailler ce que l’on entend par le terme d’opérateur.
Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.

1. Opérateurs numériques :
Ce sont les quatre opérations arithmétiques, tout ce qu’il y a de classique.
+ : addition
- : soustraction
* : multiplication
/ : Division
mod : ex. : a = x mod y ; signifie que a est le reste de la division entière de x par y
Mentionnons également le ^ qui signifie « puissance ». 45 au carré s’écrira
donc 45 ^ 2
Enfin, on a le droit d’utiliser les parenthèses, avec les mêmes règles qu’en
mathématiques. La multiplication et la division ont « naturellement » priorité sur
l’addition et la soustraction. Les parenthèses ne sont ainsi utiles que pour modifier
cette priorité naturelle.
Cela signifie qu’en informatique, 12 * 3 + 5 et (12 * 3) + 5 valent strictement la
même chose, à savoir 41. Pourquoi dès lors se fatiguer à mettre des parenthèses
inutiles ?
En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96. Rien de difficile là-dedans, que du
normal.

2. Opérateur alphanumérique : &


Cet opérateur permet de concaténer, autrement dit d’agglomérer, deux chaînes
de caractères. Par exemple :
A vaut "BENE" ;
B vaut "DICTION" ;
si C vaut A & B ;

La valeur de C à la fin de l’algorithme est "BENEDICTION"

3. Opérateurs logiques (ou booléens) :

Ce sont les conjonctions de coordination utilisées en programmation. Ils


permettent de relier des conditions pour en faire une seule
Il s’agit du ET, du OU (OU inclusif), du NON (négation) et du XOR (OU exclusif),
dont seuls les trois premiers sont les plus utilisés.
EX. :
*SI (E>1) ET (J=3) ALORS INSTRUCTION1 ;

INSTRUCTION1
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI (A=B) OU (X>Y) ALORS INSTRUCTION2 ;

INSTRUCTION2
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI NON (P=T) ALORS INTRUCTION3 ;

INSTRUCTION3
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI (T≠0) XOU (B>A) ALORS INSTRUCTION 4 ;


L’instruction 4 sera exécutée si et seulement une et une seule des conditions est
vraie.

4 .Les opérateurs relationnels

Ils permettent de faire des comparaisons. Ce sont : >, >=, <, =<, ≠, =

Vous aimerez peut-être aussi