Académique Documents
Professionnel Documents
Culture Documents
&
TELECOMMUNICATIONS
Introduction à l’algorithmique
et à la programmation
2013-2014
Semestre 1
Raogo KABORE
Introduction à l'Algorithmique et à la Programmation | 2
Contenu de la matière :
Introduction à l’algorithmique
Environnement algorithmique
Structures conditionnelles
Structures itératives
Les enregistrements
Algorithmes de tri : par sélection, par insertion, à bulle, quick sort, etc
Mode d’évaluation :
Références (Livre, Polycopié, Site internet, etc) :
Introduction à l'Algorithmique et à la Programmation | 3
____________________________________________________________________________________________________ 1
I. Introduction et définition de l'algorithmique _________________________________________________________ 4
1. Le développement d'applications ________________________________________________________________ 4
L'analyse _______________________________________________________________________________________ 4
L'algorithmique _________________________________________________________________________________ 4
Définition de l'algorithmique _______________________________________________________________________ 4
La démarche algorithmique ________________________________________________________________________ 4
Algorithmique et informatique _____________________________________________________________________ 5
La programmation _______________________________________________________________________________ 5
2. Structure générale d'un algorithme _______________________________________________________________ 7
Saisie des données et affichage _________________________________________________ Erreur ! Signet non défini.
II. Les données ____________________________________________________________________________________ 9
3. Les variables _________________________________________________________________________________ 9
Définition et caractéristiques ______________________________________________________________________ 9
Le nom des variables _____________________________________________________________________________ 9
Le type de données des variables ___________________________________________________________________ 9
Les valeurs des variables _________________________________________________________________________ 10
Affectation ____________________________________________________________________________________ 10
Déclaration des variables _________________________________________________________________________ 10
4. Les Types de données _________________________________________________________________________ 11
Les types de base _______________________________________________________________________________ 11
Les types structurés _____________________________________________________________________________ 11
Les tableaux unidimensionnels (vecteurs) ___________________________________________________________ 13
Les tableaux bidimensionnels (matrices) ____________________________________________________________ 14
5. Les constantes ______________________________________________________________________________ 15
Définition et caractéristiques _____________________________________________________________________ 15
Déclaration des constantes _______________________________________________________________________ 15
III. Les structures de contrôle ________________________________________________________________________ 16
Exécution sélective _____________________________________________________________________________ 16
Exécution alternative (deux choix) _________________________________________________________________ 16
Structure alternative imbriquée ___________________________________________________________________ 17
Structure à choix multiple ________________________________________________________________________ 18
Exécution répétitive _____________________________________________________________________________ 20
IV. Les fonctions __________________________________________________________________________________ 22
6. Interface ___________________________________________________________________________________ 22
7. passage des paramètres _______________________________________________________________________ 22
Passage par valeur ______________________________________________________________________________ 22
Passage par adresse _____________________________________________________________________________ 22
8. Fonction recursive ___________________________________________________________________________ 23
9. visibilite des variables _________________________________________________________________________ 23
Variables locales ________________________________________________________________________________ 23
Variables globales ______________________________________________________________________________ 23
V. algorithmes de tri ______________________________________________________________________________ 24
10. Tri Par Insertion _____________________________________________________________________________ 24
11. Tri rapide (Quick Sort) ou tri par segmentation _____________________________________________________ 26
12. Tri fusion (MERGE SORT) ______________________________________________________________________ 31
13. Tri à bulles (BUBBLE SORT) _____________________________________________________________________ 34
14. Tri par sélection (selEction sort) _________________________________________________________________ 35
VI. Algorithmes de recherche _____________________________________________________________________ 36
15. Algorithme de recherche séquentielle____________________________________________________________ 36
16. Algorithme de recherche dichotomique : _________________________________________________________ 36
Introduction à l'Algorithmique et à la Programmation | 4
1. LE DEVELOPPEMENT D'APPLICATIONS
De manière générale, on peut représenter l'activité de développement sous la forme suivante :
L'analyse
L'analyse est la lecture que le développeur porte sur un problème énoncé dans une formulation propre
à l'auteur et au métier sans tenir compte des considérations informatiques.
Il est donc nécessaire à l'informaticien d'exprimer, dans un premier temps, le problème au moyen d'un
vocabulaire, d'outils, de concepts spécifiquement informatique (Modélisation, déclaration de variables,
de constantes, opérations à effectuer,…).
L'algorithmique
Une fois cette analyse complétée, nombre de données et de traitements sont mis à jour. Ceux-ci se-
ront au cœur du second temps de la réflexion, celle de la formalisation d'algorithmes.
Définition de l'algorithmique
Le mot Algorithme est la traduction latine du nom du mathématicien et philosophe perse d'Asie Cen-
trale (dans l'actuel Ouzbékistan) AL KHAWARIZNI (783-850). On lui doit aussi le mot Algèbre (al-jabr)
L'algorithmique est une méthode de réflexion qui permet de décomposer un problème complexe en
une suite ordonnée et finie d'action à accomplir (l'algorithme), pour parvenir à un résultat déterminé.
La démarche algorithmique
L'algorithmique est une méthode permettant de trouver l'algorithme qui résout un problème donné.
L'algorithme lui-même n'est donc que le résultat d'une démarche qui consiste à :
Comprendre le problème à résoudre
Si ce n'est pas le cas, il pourrait être utile de se le représenter à travers des cas ou exemples con-
crets. Par ailleurs, le questionnement et la recherche d'une reformulation seront aussi précieux pour
éclairer le sujet.
Rechercher une solution
Il peut en exister plusieurs, certaines étant meilleures que d'autres. Un moyen efficace sera de " Divi-
ser chaque problème en autant de parties qu'il est nécessaire pour mieux les résoudre"
Introduction à l'Algorithmique et à la Programmation | 5
Algorithmique et informatique
En informatique, un algorithme représente l'enchaînement des actions (instructions) nécessaires pour
faire exécuter une tâche à un ordinateur (résoudre un problème).
L'algorithme peur être présenté sous forme de graphe ou bien verbeuse. Nous utiliserons cette der-
nière forme au moyen d'un pseudo-langage.
Tout comme un programme, un algorithme transforme des données (entrées) en résultats (sorties) par
un traitement.
La programmation
Un algorithme est un programme que l'on peut qualifier d'universel. Il représente l'ensemble des ac-
tions que l'on va demander à l'ordinateur d'effectuer. Cet ensemble est rédigé dans un pseudo-
langage indépendant :
Du langage de programmation réel
Du système d'exploitation utilisé
De l'architecture de l'ordinateur
La programmation consiste à réaliser les programmes qui vont permettre la mise en œuvre des algo-
rithmes.
Le programme est obtenu par le codage de l'algorithme dans le langage de programmation retenu.
Les programmes ont pour but de traiter des données afin de produire des résultats. Ces résultats
peuvent eux-mêmes constituer des données pour d'autres programmes ou pour le programme lui-
même.
Vu de l'extérieur, le programme est une boîte noire dans laquelle ont introduit des données (les en-
trées) pour produire des résultats (les sorties).
Le rôle du programmeur est de définir le contenu de la boîte noire selon les besoin de l'utilisateur qui
souhaite des réponses correctes dans un temps raisonnable.
Introduction à l'Algorithmique et à la Programmation | 6
Les données sont manipulées des calculs dans un programme pour produire un résultat.
Les données sont :
variables
structures
tableaux
pointeurs
modèles dynamiques
…
Les mots ALGO, DEBUT et FIN ainsi que le nom de l'algorithme sont obligatoires.
L'indentation (lignes en retrait) est indispensable dans un algorithme (ou un code source) pour le
rendre plus lisible.
Il est fortement conseillé d'ajouter des commentaires dans les algorithmes et programmes. Ces com-
mentaires vont permettre de décrire des portions de code complexes, définir l'utilité d'une variable,
etc. Ces commentaires vont permettre une meilleure relecture. Ces commentaires vont permettre une
meilleure relecture du traitement et sont donc très utiles en maintenance corrective ou évolutive.
Il est possible d'insérer des commentaires:
Sur une ligne : dans ce cas on le fait précéder de //
Sur plusieurs lignes : dans ce cas, la première ligne commence par /* et la dernière ligne se
termine par */
Introduction à l'Algorithmique et à la Programmation | 8
L’affichage : ECRIRE
Cette action permet de communiquer un résultat ou un message sur écran ou sur imprimante pour
l'utilisateur.
Syntaxe
ECRIRE (paramètre1 [[,paramètre2]…])
Paramètre = variable | expression | constante
Constante = nombre | message
Exemples
ECRIRE(" La valeur de 3*2 est égale à ", 3*2)
Remarques :
1. La saisie se fait uniquement dans des variables. Ce sont les cases (cellules) qui pourront accueillir
les données correspondantes.
2. La donnée à introduire doit être de même type que la variable réceptrice.
Introduction à l'Algorithmique et à la Programmation | 9
3. LES VARIABLES
Définition et caractéristiques
Une variable est le nom d'une espace mémoire destiné à contenir une donnée (une valeur).
Convention de nommage
Le nom d'une variable est constitué d'un ou plusieurs mots, la première lettre de chaque mot
étant en majuscule, sauf le premier en général.
Exemple : montantTTC, valeurDeTravail
Un nom peut être composé de lettre et de chiffre,mais il ne peut pas commencer par un
chiffre et ne peut pas comporter d'espace
Le nom des variables doit être suffisamment significatif afin de reconnaître le rôle de cette
variable
Le type de données est une information importante, car il détermine la nature des opérations qui pour-
ront être ensuite réalisées sur la variable (opération arithmétique sur des nombres, concaténation de
chaine de caractères, etc.)
Affectation
Pour affecter une valeur à une variable, on utilise la notation suivante :
x<- 25 (on stocke le nombre 25 dans case mémoire nommée x )
Exemple
Introduction à l'Algorithmique et à la Programmation | 11
La construction de types peut être faite en combinant tous les types de base et les types déjà définis.
L’utilisation se fait en utilisant le point “.”
…
VAR t1,t2 : Date
DEBUT
t1.jour = 10
t1.mois = 5
t1.annee = 2008
...
t2 <- t1 (copie de toute la structure = 3 variables)
FIN
Introduction à l'Algorithmique et à la Programmation | 13
Un tableau représente une collection de variables. Il est de taille fixe et ses données son contiguës en
mémoire.
Tableaux : structure permettant d’accéder de façon indépendante à un ensemble de variables de
même type.
Un tableau bidimensionnel est une matrice, c’est-à-dire, un tableau dont les éléments sont des ta-
bleaux.
Définition de tableau bidimensionnel :
Définition de type
constante N = 3, M = 4
type Matrice = tableau[1 .. N][1 .. M] de Entier
Définition de variables
m1 : Matrice
m2 : tableau[1 .. N][1 .. M] de Entier
Algorithme de base
pour ligne = 1 : NaturelNonNul à N // première dimension
pour colonne = 1 : NaturelNonNul à M // deuxième dimension
traiterElément ( t [ligne][colonne] )
fpour colonne
fpour ligne
Remarques
Il est possible de définir des tableaux de dimension supérieure à deux.
Il n’est bien sûr pas possible de définir un tableau de dimension infini.
Introduction à l'Algorithmique et à la Programmation | 15
5. LES CONSTANTES
Définition et caractéristiques
Une constante est une donnée qui ne possède pas d'emplacement en mémoire. En fait, une cons-
tante est en quelque sorte un "alias" de la valeur. Au lieu d'indiquer dans le code la valeur elle-même,
on précise le nom de la constante. Le compilateur remplace directement la valeur dans le code du
programme chaque fois qu'il rencontre une constante.
L'intérêt des constantes est double : mise à jour plus rapide te lisibilité du code.
Comme la constante ne possède pas d'emplacement mémoire, sa valeur ne peut pas être modifiée.
Tout comme les variables, les constantes sont caractérisées par un nom, une valeur, et un type de
données.
Le type de donnée de la constante est implicite (on ne le précise pas) puisqu'il est déterminé par la
valeur de la constante.
Exécution sélective
La structure sélective est une structure dont les instructions sont exécutées selon les réponses des
conditions.
Si la condition vaut Vrai alors le bloc d’instructions sera exécuté, sinon il sera ignoré.
Exemple
si a < b alors
a=b
finsi
La structure s est une structure dont les instructions sont exécutées selon les réponses des condi-
tions.
Si la condition vaut Vrai alors le bloc d’instructions1 sera exécuté, et le bloc d’instructions2 sera igno-
ré, sinon le bloc d’instructions2 sera exécuté et le bloc d’instructions1 sera ignoré.
Exemple
si a < b alors
a=b
sinon
b=a
finsi
Introduction à l'Algorithmique et à la Programmation | 17
Exemple
Un algorithme qui demande un nombre entier à l’utilisateur, et l’informe ensuite si ce nombre
est positif ou négatif
Algo Nature_nombre ;
Var n : Entier ;
Début
Ecrire ('Entrez un nombre : ') ;
Lire( n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif' ) ;
Sinon
Ecrire ('Ce nombre est négatif' ) ;
Fin si
Fin.
Algo Nature_nombre ;
Var n : Entier ;
Début
Ecrire ('Entrez un nombre : ') ;
Introduction à l'Algorithmique et à la Programmation | 18
Lire (n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif ') ;
Sinon
Si n = 0 Alors
Ecrire ('Ce nombre est nul') ;
Sinon
Ecrire ('Ce nombre est négatif ') ;
Fin si
Fin si
Fin.
Si Variable vaut une valeur (val 1, val 2,……. val n) alors c’est le bloc Instructions
correspond à cette valeur qui sera exécuté et tous les autres blocs seront ignorés.
Si Variable n’a aucun valeur parmi val 1, val 2,……. val n, alors c’est le bloc autre
instructions qui sera exécuté et les instructions associées à les valeurs val 1, val 2,……. val n,
Seront ignorés.
Introduction à l'Algorithmique et à la Programmation | 19
Algo Nom_chiffre
Var n : entier ;
Début
Ecrire ('donnez votre chiffre entre 0 et 4 : ') ;
Lire (n) ;
Si n=0 Alors
Ecrire ('Zéro') ;
Sinon
Si n=1 Alors
Ecrire ('Un') ;
Sinon
Si n=2 Alors
Ecrire ('Deux') ;
Sinon
Si n=3 Alors
Ecrire ('Trois') ;
Sinon
Si n=4 Alors
Ecrire ('Quatre') ;
Sinon
Ecrire ('erreur de la saisie ') ;
Fin si
Fin si
Fin si
Fin si
Fin si
Fin.
Introduction à l'Algorithmique et à la Programmation | 20
Algo Nom_chiffre ;
Var n : entier ;
Début
Ecrire ('donnez votre chiffre entre 0 et 4 : ') ;
Lire (n) ;
Cas n vaut
0 : Ecrire (' Zéro') ;
1 : Ecrire ('Un') ;
2 : Ecrire ('Deux') ;
3 : Ecrire ('Trois') ;
4 : Ecrire ('Quatre') ;
Sinon
Ecrire ('erreur de la saisie) ;
Fin cas
Fin.
Exécution répétitive
Exemple
Exemple
I <- 0
Tant que i < 12 faire
afficher t[i]
i: = i + 1
fin tant que
Faire
Instructions
Tant que [test Vrai]
Exemple
i <- 0
Faire
afficher t[i]
i := i + 1
Tant que i < 12
Introduction à l'Algorithmique et à la Programmation | 22
6. INTERFACE
L'interface ou signature de la fonction représente les paramètres et valeur renvoyée.
Appel de la fonction
i <- TrouveMaximum(1,100)
j <- TrouveMaximum(i,120)
Introduction à l'Algorithmique et à la Programmation | 23
8. FONCTION RECURSIVE
Une fonction itérative s'exécute de manière répétitive sur des ensembles de données
A contrario, une fonction récursive s’appelle elle-même avec un ensemble de données à traiter plus
petit
Variables locales
Les variables locales sont des variables internes à un bloc
Variables globales
Les variables globales sont des variables visibles dans tout le programme
Exemple
Introduction à l'Algorithmique et à la Programmation | 24
V. ALGORITHMES DE TRI
La procédure suivante prend en paramètre un tableau A[1..n] contenant une suite de n clés à trier.
Les clés étant triées sur place, ce même tableau A contient les clées triées à la sortie de la procédure.
TRI-INSERTION (A)
Pour j<- 2 à n faire
Clé <- A[j]
I<- j-1
Tant que i > 0 et A[i] > clé
A[i+1] <- A[i]
I<- i-1
Fin Tant que
A[i+1] <- clé
Finpour
Sur le schéma, on représente en noir la case qui est analysée (indice j de la boucle pour, ligne 1). Les
cases grises correspondent aux valeurs comparées à A[j] (condition de la boucle tant que, ligne 4).
Les flèches grises représentent les clés déplacées (ligne 5) et les flèches noires l'insertion de A[j] à sa
place (ligne 8)
Insertion : méthode utilisée pour trier une main de jeu de carte. On prend les cartes une par une de la
gauche vers la droite. Pour chaque carte on la place au bon ordre parmi les précédentes.
Le tri rapide fait partie des algorithmes du type "diviser pour régner". C'est un des algorithmes les plus
utilisés et également celui qui présente certainement le plus grand nombre de variantes.
Le tri rapide choisit un élément particulier de la liste de clés, appelé pivot. Il construit ensuite deux
sous-listes gauche et droite contenant respectivement les clés inférieures et supérieures du pivot.
Ainsi pour trier un sous-tableau A[p..r] du tableau initial A[1..n], on retrouve les trois phases sui-
vantes :
Diviser : choisir le pivot d'indice q dans le tableau A[p..r]. Partitionner en 3 ce sous tableau :
A[p..q-1] contient les clés inférieures à A[q]
A[q] le pivot
A[q+1..r] contient les clés supérieures à A[q].
Les deux sous-tableaux gauche et droite peuvent éventuellement être vides.
Régner : les sous-tableaux A[p..q-1] et A[q+1..r] sont traités en appelant récursivement le tri
rapide
Combiner : Cette phase est instantanée. Puisque les sous tableau sont triés sur place, aucun
travail n'est nécessaire pour les combiner.
Version standard
PARTITION (A, p, r)
X<- A[r]
I<- p-1
Pour j<- p à r-1 faire
Si A[j] < = x alors
I<- i+1
PERMUTER (A,i,j)
Fin si
Fin pour
PERMUTER(A, i+1,r)
Retourner i+1
TRI-RAPIDE(A,p,r)
Si p < r alors
Q<- PARTITION(A,p,r)
TRI-RAPIDE(A,p,q-1)
TRI-RAPIDE(A,q+1,r)
Fin si
A[j <-tmp]
On démarre l'algorithme par un appel à TRI-RAPIDE(A,1,n)
Cette version de l'algorithme prend la dernière clé du sous-ensemble comme pivot.
Exemple d'application sur les suite d'entiers <15,10,4,34,1,19>
Sur ce schéma, on représente les appels récursifs aux deux procédures PARTITION et TRI-RAPIDE.
Sur le tableau issu de la partition, on représente en blanc le pivot, en gris le sous-tableau gauche et
Introduction à l'Algorithmique et à la Programmation | 28
en noir le sous-tableau droit. L'étape (j) est le tableau trié obtenu à la fin du déroulement de l'algo-
rithme.
Version aléatoire
Cette version rend le cas défavorable très improbable. En effet, au lieu de prendre la dernière clé du
sous-tableau comme pivot, elle prend une clé au hasard. La probabilité d'être dans le cas défavorable,
(c’est-à-dire de choisir aléatoirement une clé qui à chaque étape produirait un partitionnement complè-
tement déséquilibré) est très faible.
PARTITION-RANDOMISEE(A,p,r)
i<- RANDOM(p,r)
PERMUTER (A, r,i)
Retourner PARTITION (A,p,r)
TRI-RAPIDE-RANDOMISE(A,p,r)
Si p < r alors
q <- PARTITION-RANDOMISE(A,p,r)
TRI-RAPIDE-RANDOMISE(A,p,q-1)
TRI-RAPIDE-RANDOMISE(A,q+1,r)
Fin si
tri_rapide(tableau T)
debut
tri_rapide_bis(T,0,taille(T)-1)) //tri du tableau entier
fin
-------------------------------------------
Remarque
Nous supposons avoir mis une sentinelle dans le tableau, dans la première cellule la plus à gauche,
avec une valeur plus petite que n'importe qu'elle autre valeur du tableau.
Cette sentinelle est utile lorsque le pivot choisi aléatoirement se trouve être le plus petit élément de la
table /pivot = min (a1, a2, ... , an)/ :
La sentinelle étant plus petite que tous les éléments y compris le pivot arrêtera la boucle et encore
une fois évite de programmer le cas particulier du pivot = min (a1, a2, ... , an).
Introduction à l'Algorithmique et à la Programmation | 31
Diviser : Partager le tableau en deux sous-tableaux de taille n/2. Cette phse es instantanée,
puisqu'il suffit de calculer l'indice n/2
Régner : les sous-tableaux sont traités recursivement en appelant récursivement le tri fusion.
Combiner : C'est cette phase qui contient toute la logique de l'algorithme. La fusion de deux
sous-tableau déjà triés se fait en les parcourant en parallèle en en plaçant systématiquement
la plus petite clé dans le tableau résultat. Pour cela, la procédure FUSION crée deux tableau
temporaires pour stocker les deux sous-tableaux à fusionner. On utilise une sentinelle à la fin
de chacun de ces 2 tableaux temporaires pour éviter d'ajouter des tests suppelmentaires
pour détecter la fin de l'un d'entre eux dans la procédure de fusion.
Introduction à l'Algorithmique et à la Programmation | 32
FUSION(A,p,q,r)
N1<- q-p+1
N2 <- r-q
Créer tableaux L[1..n1+1] er R[1..n2+1]
Pour i<- 1 à n1 faire
L[i] <-A[p+i-1]
Fin pour
Pour j <- 1 à n2 faire
R[j] <- A[q+j]
Fin pour
L[n1+1] <-∞
R[n2+1] <- ∞
I<-1
J<-1
Pour k <-p à r faire
Si L[i] <= R[j] alors
A[k] <- L[i]
I <- i+1
Sinon
A[k] <- R[j]
J <- j+1
Fin Si
Fin pour
TRI-FUSION (A,p,r)
Si p < r alors
q<- (p+r)/2
TRI-FUSION(A,p,q)
TRI-FUSION(A,q+1;r)
FUSION(A,p,q,r)
Fin si
Introduction à l'Algorithmique et à la Programmation | 33
Sur ce schéma, on représente le déroulement du tri par fusion. Les étapes b, c et d correspondent aux
appels récursifs à la procédure TRI-FUSION. Ensuite les étapes e, f et g correspondent à la terminai-
son de la récursion par l'appel de la procédure fusion.
Introduction à l'Algorithmique et à la Programmation | 34
TRI-BULLES(A)
Pour i<- 1 à n faire
Pour j<- n à i+1 faire
Si A[j] < A[j-1] alors
PERMUTER (A,j,j-1)
Fin si
Fin pour
Fin Pour
TRI-SELECTION(A)
Pour i<- 1 à n faire
min <- i
Pour j <- i+1 à n faire
si A[min] > A[j] alors
min< - j
Fin si
Si min > i alors PERMUTER (A, i, min)
Fin si
Fin pour
Fin pour
VAR
i,j,min,tmp : entier
DEBUT
Pour i<-0 jusqu’`a j < taille-2 Faire
min <- i
Pour j <- i+1 jusqu’`a j < taille Faire
Si t[j] < t[min] Alors
min <- j
Fin Si
Fin Pour
tmp <- t[min]
t[min] <- t[i]
t[i] <- tmp
Fin Pour
FIN
Introduction à l'Algorithmique et à la Programmation | 36
Principe :
Parcourir le tableau A du début jusqu’à ce qu’on trouve un élément x = e.
Lorsqu’on visite un élément x d’indice i, on le compare avec e. Si x = e, on s’arrête
et on retourne i, sinon on continue le parcours du tableau (on incrémente la valeur
de i).
Algorithme :
Principe :
Lorsque le tableau initial est déjà trié, on peut améliorer la recherche en procédant, par une stratégie
de type diviser pour régner, comme suit :
On compare l’élément recherché e avec l’élément m qui se trouve au milieu du tableau initial A (dont
l’indice est j).
Si m = e, on retourne l’indice du milieu du tableau (c-à-d. j).
Si e < m, on refait le même processus dans le tableau A[1…j - 1].
Si e > m, on refait le même processus dans le tableau A[j + 1…n].
Algorithme :
Introduction à l'Algorithmique et à la Programmation | 37