Introduction à l'algorithmique et programmation
Introduction à l'algorithmique et programmation
d’algorithmique
1
Objectif et plan du cours
Objectif:
• Apprendre les concepts de base de l'algorithmique et de la
programmation
Plan:
• Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages
de programmation, …)
2
Système Informatique?
Techniques du traitement automatique de l’information au
moyen des ordinateurs
Système informatique = ordinateur + périphériques
Applications
(Word, Excel, Jeux, Maple, etc.)
Langages
(Java,C/C++, Fortran,etc.)
Système d’exploitation
(DOS,Windows, Unix, etc.)
Matériel
(PC, Macintosh, station SUN, etc.)
3
Qu’est-ce qu’un programme
d’ordinateur?
Allumez un ordinateur, vous n’en tirerez rien!!
4
Les catégories d’ordres
5
Actions d’un ordinateur : Exemple
6
Qu’est ce qu’un système d’exploitation?
Ensemble de programmes qui gèrent le matériel et
contrôlent les applications
7
Langages informatiques
8
Langage machine
Langage binaire: l’information est exprimée et manipulée sous
forme d’une suite de bits
9
L'assembleur
Problème: le langage machine est difficile à comprendre par l'humain
10
Langages haut niveau
Intérêts multiples pour le haut niveau:
• proche du langage humain «anglais» (compréhensible)
• permet une plus grande portabilité (indépendant du matériel)
• Manipulation de données et d’expressions complexes (réels,
objets, a*b/c, …)
Nécessité d’un traducteur (compilateur/interpréteur),
exécution plus ou moins lente selon le traducteur
11
Compilateur/interpréteur
Compilateur: traduire le programme entier une fois pour toutes
Compilateur exécution
exemple.c exemple
fichier source fichier exécutable
12
Etapes de réalisation d’un programme
Enoncé du problème
Spécification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
14
Représentation d’un algorithme
Historiquement, deux façons pour représenter un algorithme:
• L’Organigramme: représentation graphique avec des symboles
(carrés, losanges, etc.)
• offre une vue d’ensemble de l’algorithme
• représentation quasiment abandonnée aujourd’hui
15
Algorithmique
17
Les catégories d’ordres
17
Notion de variable
Dans les langages de programmation une variable sert à stocker
la valeur d’une donnée
• un nom (Identificateur)
• un type (entier, réel, caractère, chaîne de caractères, …)
18
Choix des identificateurs (1)
Le choix des noms de variables est soumis à quelques règles qui
varient selon le langage, mais en général:
20
Types des variables
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut
prendre, les types offerts par la plus part des langages sont:
Type numérique (entier ou réel)
• Byte (codé sur 1octet): de 0 à 255
• Entier court (codé sur 2 octets) : -32 768 à 32 767
• Entier long (codé sur 4 ou 8 octets)
• Réel simple précision (codé sur 4 octets)
• Réel double précision (codé sur 8 octets)
Type logique ou booléen: deux valeurs VRAI ou FAUX
22
L’instruction d’affectation
l’affectation consiste à attribuer une valeur à une variable (ça consiste en
fait à remplir où à modifier le contenu d'une zone mémoire)
Ex valides: i ←1 j ←i k ←i+j
x ←10.3 OK ←FAUX ch1 ←"SMI"
ch2 ←ch1 x ←4 x ←j
(voir la déclaration des variables dans le transparent précédent)
non valides: i ←10.3 OK ←"SMI" j ←x
23
Quelques remarques
Beaucoup de langages de programmation (C/C++, Java, …) utilisent
le signe égal = pour l’affectation ←. Attention aux confusions:
24
Exercices simples sur l'affectation (1)
Donnez les valeurs des variables A, B et C après exécution
des instructions suivantes ?
Variables A, B, C: Entier
Début
A← 3
B←7
A← B
B ← A+5
C ←A+ B
C ← B –A
Fin
25
Exercices simples sur l'affectation (2)
Donnez les valeurs des variables A et B après exécution des
instructions suivantes ?
Variables A, B : Entier
Début
A← 1
B←2
A←B
B←A
Fin
26
Expressions et opérateurs
Une expression peut être une valeur, une variable ou une
opération constituée de variables reliées par des
opérateurs exemples: 1, b, a*2, a+ 3*b-c, …
• ^ : (élévation à la puissance)
• * , / (multiplication, division)
• % (modulo)
• + , - (addition, soustraction)
exemple: 2+3*7 vaut 23
29
Les instructions d'entrées-sorties:
lecture et écriture (2)
30
Exemple (lecture et écriture)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis
qui calcule et affiche le double de ce nombre
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer la valeur de A ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
Fin
31
Exercice (lecture et écriture)
Ecrire un algorithme qui vous demande de saisir votre nom puis
votre prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom & Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
32
Méthode de construction d’un
algorithme simple (1/4)
Exemple :
33
Méthode de construction d’un
algorithme simple (2/4)
Méthodologie a suivre :
constantes : Pi = 3.14159
34
Méthode de construction d’un
algorithme simple (3/4)
Algorithme
Calcul_Aire
Constantes
Pi = 3,14159
Variables
Rayon, Surface : réels
Début
lire (Rayon)
Surface := Pi * (Rayon)2
écrire (Surface)
Fin
35
Méthode de construction d’un
algorithme simple (3/4)
Programme C
#include <stdio.h>
#include <math.h>
Main ( )
{
Float Pi = 3.14159;
Float rayon, surface;
Scanf (« °/°f », &rayon);
surface = pi*pow (rayon,2);
Printif (« °/°f\n »surface, )
Return 0;
}
36
Algorithmique
Les structures
Conditionnelles et les
boucles
38
Besoin a des concepts de
ruptures de séquence
Algorithme
Rare les algorithme qui peuvent se
Calcul_Aire décrire uniquement par un
Constantes enchaînement séquentiel
d’opération élémentaire
Pi = 3,14159
Variables
Rayon, Surface : réels On a besoin a des concept de rupture
de séquence comme les test et les
Début boucles
lire (Rayon) Ex :
Surface := Pi * (Rayon)2 un algorithme qui résout une
38
Les structures conditionnelles et les
boucles
Les tests simples : permet de réaliser un choix parmi deux
possibilités (Ex :Booléenne : vrais ou faux)
Les instructions conditionnelles : c’est un concept
de tests multiples, permet de comparer un objet à une série de
valeurs, et exécuter si la condition est vérifier (Ex : recherche des
nombres premier dans une ensemble)
Si condition alors
instruction ou suite d'instructions1
Finsi
41
Exemple (Si…Alors…Sinon)
AlgorithmeAffichageValeurAbsolue (version1)
Variable x : réel
Début
Ecrire " Entrez un réel : "
Lire (x)
Si x < 0 alors
Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
42
Exemple (Si…Alors)
AlgorithmeAffichageValeurAbsolue (version2)
Variable x,y : réel
Début
Ecrire " Entrez un réel : "
Lire (x)
y← x
Si x < 0 alors
y ← -x
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y)
Fin
43
Exercice (tests)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur,
puis qui teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier
Début
Ecrire " Entrez un entier : "
Lire (n)
Si (n%3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin
44
Conditions composées
Une condition composée est une condition formée de plusieurs
conditions simples reliées par des opérateurs logiques:
ET, OU, OU exclusif (XOR) et NON
Exemples :
• x compris entre 2 et 6 : (x > 2) ET (x < 6)
• n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
C1 NON C1
VRAI FAUX
FAUX VRAI
46
Tests imbriqués
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
47
Tests imbriqués: exemple (version 1)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors
Ecrire ("Ce nombre est négatif")
Sinon
Si n = 0 alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
48
Tests imbriqués: exemple (version 2)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors Ecrire ("Ce nombre est négatif")
Finsi
Si n = 0 alors Ecrire ("Ce nombre est nul")
Finsi
Si n > 0 alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que
dans la version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer
d'abord les conditions les plus probables (minimiser la complexité)
49
Tests imbriqués: exercice
Le prix de photocopies dans une reprographie varie selon le
nombre demandé: 0,5 DH la copie pour un nombre de copies
inférieur à 10, 0,4DH pour un nombre compris entre 10 et 20 et
0,3DH au-delà.
50
Tests imbriqués: corrigé de l'exercice
Variables copies : entier
prix : réel
Début
Ecrire ("Nombre de photocopies : ")
Lire (copies)
Si copies < 10 Alors
prix ← copies*0.5
Sinon Si copies < 20
prix ← copies*0.4
Sinon
prix ← copies*0.3
Finsi
Finsi
Ecrire (“Le prix à payer est : ”, prix)
Fin
51
Tests imbriqués: Exercice 2
52
Tests imbriqués: corrigé de l'exercice 2
Variables
A, B, C, Delta, X1, X2 : réels
Début
Lire (A, B, C)
Delta ← B2 – 4 AC
X1 ← (-B ) / 2A
Ecrire (« le trinome possède une racine réelle : », X1)
Finsi
Finsi
Fin
53
Algorithmique
Les boucles
55
Les types de boucle
55
Les boucles Tant que
TantQue (condition)
instructions
FinTantQue Vrai
condition instructions
Faux
56
Boucle Tant que : exemple simple
Un algorithme qui détermine le premier nombre entier N tel que la
somme de 1 à N dépasse strictement 100
57
Boucle Tant que : exemple
Algorithme Plus-Grand-Element: Retourne la plus
grande valeur d’une liste
Trace de l’algorithme:
Entrée: n entiers S1,…, Sn
Sortie: grand contenant le plus grand élément n=4; S1= -2; S2=6; S3=5; S4=6
instructions
FinPour
i ←initiale
Vrai
i n'a pas atteint finale instructions i ← i + pas
Faux
59
Les boucles Pour
Remarques :
Compteur est une variable de type entier (ou caractère). Elle doit
être déclarée
Pas est un entier qui peut être positif ou négatif. Pas peut ne pas
être mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le
nombre d'itérations est égal à finale - initiale+ 1
60
Déroulement des boucles Pour
1) La valeur initiale est affectée à la variable compteur
61
Boucle Pour : exemple
62
Boucle Pour : remarque
Il faut éviter de modifier la valeur du compteur (et de finale) à
l'intérieur de la boucle. En effet, une telle action :
63
Lien entre Pour et TantQue
La boucle Pour est un cas particulier de Tant Que (cas où le nombre d'itérations
est connu et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé
avec TantQue (la réciproque est fausse)
Pour compteur allant de initiale à finale par pas valeur du pas
instructions
FinPour
peut être remplacé par : compteur ← initiale
(cas d'un pas positif) TantQue compteur <= finale
instructions
compteur ← compteur+pas
FinTantQue
64
Lien entre Pour et TantQue: exemple
Calcul de x à la puissance n
avec la boucle Pour et la
boucle TantQue
x : un réel non nul
n : entier positif ou nul
65
Solution avec la boucle Pour
66
Solution avec la boucle Tant Que
67
Algorithme de la fonction factorielle :
Exemple
68
Algorithme de la fonction
factorielle
Algorithme / tantque Algorithme / Pour
Calcul factorielle 1 Calcul factorielle 2
Variables Variables
i, f, n : Naturel i, f, n : Naturel
Début Début
i←1 f←1
f←1 pour i variant de 2 à n
tant que (i < n) f←f*i
i ← i+1 Fin pour
f←f*i écrire (f)
Fin de tant que Fin
écrire (f)
Fin
69
Algorithme de la recherche des
nombres premiers : Exemple
Bloc d’instructions;
End; corps_boucle
Langage C et Java
while (condition) {
Bloc d’instructions;
}
71
La boucle Pour en langage de
programmation
Langage Pascal
For variable := valeur initiale To valeur finale Do
Begin init
Bloc d’instructions
End; test
corps_boucle
Langage C et Java
for (i=valeur initiale; i<= valeur finale; i++) {
incr
Bloc d’instructions;
}
72
Détecter l’erreur dans les deux
essaie tant que et pour
Algorithme Algorithme
Essai de tant que Essai pour
Variables Variables
n : entier K, N : entier
Début Début
n ← 15 n ← 200
tant que (n<>0) pour K variant de 1 à n
écrire (n) écrire (K)
n←n-2 K ← n – 100
Fin de tant que Fin pour
Fin Fin
73
Boucles imbriquées
Les instructions d'une boucle peuvent être des instructions
itératives. Dans ce cas, on aboutit à des boucles imbriquées
Exemple: Exécution
Pour i allant de 1 à 5 OX
Pour j allant de 1 à i OOX
écrire("O") OOOX
FinPour OOOOX
écrire("X") OOOOOX
FinPour
74
La boucle Faire…Tant Que
• Faire
Instruction(s)
Tant que (condition) Instruction(s) de la
• do
boucle
Instruction;
while (condition)
condition
Vraie
do
{ La boucle s’exécute tant que la Fausse
instructions instructions
Jusqu'à condition
Faux
condition
Vrai
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et
leur exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est
fausse)
76
Boucle Répéter jusqu’à : exemple
Un algorithme qui détermine le premier nombre entier N tel que la somme de 1
à N dépasse strictement 100 (version avec répéter jusqu'à)
79
Algorithme de la racine carrée
• Remarque : le paramètre effectif doit être une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse
Algorithme Test_incrementer1
variables n, m : entier
Début
n←3
m←3
incrementer1(n, m) résultat :
écrire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
82
Transmission par valeur, par adresse : exemples
Procédure qui calcule la somme et le produit de deux entiers :
Procédure SommeProduit (x,y: entier, som, prod : entier )
som ← x+y
prod ← x*y
FinProcédure
Une variable locale n'est connue qu'à l'intérieur du module ou elle a été
définie. Elle est créée à l'appel du module et détruite à la fin de son exécution
84
Variables locales et globales (2)
La manière de distinguer la déclaration des variables locales et globales
diffère selon le langage
• Conseil : Il faut utiliser autant que possible des variables locales plutôt que
des variables globales. Ceci permet d'économiser la mémoire et d'assurer
l'indépendance de la procédure ou de la fonction
85
Algorithmique
Les tableaux
87
Exemple introductif
Supposons qu'on veut conserver les notes d'une classe de 30 étudiants
pour extraire quelques informations. Par exemple : calcul du nombre
d'étudiants ayant une note supérieure à 10
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus
souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas,
notes[i] désigne l'élément i+1 du tableau notes
Il est possible de déclarer un tableau sans préciser au départ sa dimension.
Cette précision est faite ultérieurement .
• En tous cas, un tableau est inutilisable tant qu’on n’a pas précisé le nombre de
ses éléments
Un grand avantage des tableaux est qu'on peut traiter les données qui y
sont stockées de façon simple en utilisant des boucles
89
Tableaux : exemples (1)
Pour le calcul du nombre d'étudiants ayant une note supérieure à
10 avec les tableaux, on peut écrire :
Algorithme Tableaux
variable p : entier
tableau A[10] : réel
Début
p ← 10
SaisieTab(p, A)
AfficheTab(p,A)
Fin
92
Tableaux : fonction longueur
La plus part des langages offrent une fonction longueur qui donne la dimension
du tableau. Les procédures Saisie et Affiche peuvent être réécrites comme suit :
Procédure SaisieTab( tableau T : réel par référence )
variable i: entier
Pour i allant de 0 à longueur(T)-1
écrire ("Saisie de l'élément ", i + 1)
lire (T[i] )
FinPour
Fin Procédure
Procédure AfficheTab(tableau T : réel par valeur )
variable i: entier
Pour i allant de 0 à longueur(T)-1
écrire ("T[",i, "] =", T[i])
FinPour
Fin Procédure
93
Tableaux à deux dimensions
Les langages de programmation permettent de déclarer des
tableaux dans lesquels les valeurs sont repérées par deux indices.
Ceci est utile par exemple pour représenter des matrices
96
Exemples : somme de deux matrices
Procédure qui calcule la somme de deux matrices :
97
Appel des procédures définies sur les matrices
Exemple d'algorithme principale où on fait l'appel des procédures définies
précédemment pour la saisie, l'affichage et la somme des matrices :
Algorithme Matrices
variables tableau M1[3][4],M2 [3][4],M3 [3][4] : réel
Début
SaisieMatrice(3, 4, M1)
SaisieMatrice(3, 4, M2)
AfficheMatrice(3,4, M1)
AfficheMatrice(3,4, M2)
SommeMatrice(3, 4, M1,M2,M3)
AfficheMatrice(3,4, M3)
Fin
98
Tableaux : trouver l’erreur
Algorithme 1 Algorithme 2
Essai de tableau 1 Essai de tableau 2
Variables Variables
i : entier i, x : entiers
Tab(10) : tableau d’entiers Tab(10) : tableau d’entiers
Début Début
tant que (i <= 10) pour i variant de 1 à 10
lire tab(i) Si Tab(i+1) < Tab(i) alors
i ← i+1 permute Tab(i), Tab(i+1)
Fin de tant que Fin de Si
Fin Fin de pour
Fin
99
Tableaux : Exemple d’exercice
100
Algorithme recherche Mini
Recherche Mini
Variables
i, Indice_Mini, Mini : entiers
Tab(10) : tableau d’entiers
Début
pour i variant de 1 à 10
Lire Tab(i)
Fin de pour
Mini Tab(1)
Indice_Mini 1
pour i variant de 2 à 10
Si Tab(i) < Mini alors
Mini Tab(i)
Indice_Mini i
Fin de Si
Fin de pour
ecrire (Mini, Indice_Mini)
Fin
101
Tableaux : 2 problèmes classiques
• Recherche séquentielle
• Recherche dichotomique
102
Recherche séquentielle
Recherche de la valeur x dans un tableau T de N éléments :
103
Recherche séquentielle (version 2)
Une fonction Recherche qui retourne un booléen pour indiquer si une valeur
x appartient à un tableau T de dimension N.
x , N et T sont des paramètres de la fonction
105
Recherche séquentielle : complexité
Pour évaluer l’efficacité de l'algorithme de recherche séquentielle, on va
calculer sa complexité dans le pire des cas. Pour cela on va compter le
nombre de tests effectués
Le pire des cas pour cet algorithme correspond au cas où x n'est pas dans
le tableau T
La complexité dans le pire des cas est d'ordre N, (on note O(N))
106
Recherche dichotomique
Dans le cas où le tableau est ordonné, on peut améliorer l'efficacité
de la recherche en utilisant la méthode de recherche dichotomique
107
Recherche dichotomique : algorithme
inf←0 , sup←N-1, Trouvé ← Faux
TantQue (inf <=sup) ET (Trouvé=Faux)
milieu←(inf+sup)div2
Si (x=T[milieu]) alors
Trouvé ← Vrai
SinonSi (x>T[milieu]) alors
inf←milieu+1
Sinon sup←milieu-1
FinSi
FinSi
FinTantQue
Si Trouvé alors écrire ("x appartient au tableau")
Sinon écrire ("x n'appartient pas au tableau")
FinSi
108
Exemple d'exécution
Considérons le tableau T : 4 6 10 15 17 18 24 27 30
Si la valeur cherché est 20 alors les indices inf, sup et milieu vont évoluer
comme suit :
inf 0 5 5 6
sup 8 8 5 5
milieu 4 6 5
Si la valeur cherché est 10 alors les indices inf, sup et milieu vont évoluer
comme suit :
inf 0 0 2
sup 8 3 3
milieu 4 1 2
109
Recherche dichotomique : complexité
La complexité dans le pire des cas est d'ordre log 2 N
110
Algorithmique
112
Tris d’un tableau
La méthode de tri
112
Les algorithmes de Tri
114
Tri par sélection : méthodologie
115
Tri par sélection : algorithme
Supposons que le tableau est noté T et sa taille N
temp ← T[indice]
T[indice] ← T[i] Permutation des deux valeurs
T[i] ← temp
FinPour
116
Tri par sélection : exemple
9 4 1 7 3
117
Tri par sélection : exemple
Principe : à l'étape i, on sélectionne le plus petit élément parmi les
(n - i +1) éléments du tableau les plus à droite. On l'échange ensuite avec
l'élément i du tableau
Exemple : 9 4 1 7 3
• Étape 1: on cherche le plus petit parmi les 5 éléments du tableau. On
l’identifie en troisième position, et on l’échange alors avec l’élément 1 :
1 4 9 7 3
• Étape 3:
1 3 4 7 9
118
Tri par sélection : complexité
119
Tri par insertion
120
Tri par insertion : algorithme
121
Tri par insertion : exemple
2 56 4 7 0
122
Tri par insertion : Exemple
- Prendre l’élément i
- Insérer i dans l’ordre entre 0 et i
- Continuer à partir de i+1
2, 56, 4, 7, 0
2, 56, 4, 7, 0
2, 56, 4, 7, 0
2, 4, 56, 7, 0
2, 4, 7, 56, 0
0, 2, 4, 7, 56
123
Tri à bulles
124
Tri à bulles : algorithme
125
Tri à bulles : exemple
4 1 5 3 2
126
Tri à bulles : exemple
Un balayage
2 2 2 2 1
3 3 3 1 2
Sens de
5 5 1 3 3
lecture de
tableau
1 1 5 5 5
4 4 4 4 4
129
Procédure Tri rapide
Procédure TriRapide(tableau T : réel par adresse, p,r: entier par valeur)
variable q: entier
Si p <r alors
Partition(T,p,r,q)
TriRapide(T,p,q-1)
TriRapide(T,q+1,r)
FinSi
Fin Procédure
131
Tri Rapide : Exemple
2 2 1 7 3 4 3 6
<3 3
2 2 1 3 3 4 7 6
Suite du tri
TRI TRI
1 2 2 3 3 4 6 7
132
Tri rapide : complexité et remarques
Le pire des cas correspond au cas où le pivot est à chaque choix le plus petit
élément du tableau (tableau déjà trié)
133