Académique Documents
Professionnel Documents
Culture Documents
Objectif:
1ère année IMSP • Apprendre les concepts de base de l'algorithmique et de la
programmation
2020/2021, Semestre 1
• Etre capable de mettre en oeuvre ces concepts pour analyser des
problèmes simples et écrire les programmes correspondants
«Ce que l’on conçoit bien s’énonce clairement et les
Plan:
mots pour le dire arrivent aisément» [N. Boileau] • Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages
de programmation, …)
Applications
• Unité de commande
(Word, Excel, Jeux, Maple, etc.)
Langages
(Java,C/C++, Fortran,etc.)
Système d’exploitation Périphériques
(DOS,Windows, Unix, etc.) • Moniteur (l'écran), clavier, souris
Matériel • Modem, imprimante, scanner, …
(PC, Macintosh, station SUN, etc.)
1
Actions d’un ordinateur : Exemple
Qu’est ce qu’un système d’exploitation?
Ensemble de programmes qui gèrent le matériel et
Attendre qu’un nombre soit tapé au clavier contrôlent les applications
Sortir à l’écran le nombre entré
Attendre qu’un nombre soit tapé au clavier • Gestion des périphériques (affichage à l'écran, lecture du
clavier, pilotage d’une imprimante, …)
Sortir à l’écran le nombre entré
Additionner les deux nombres entrés • Gestion des utilisateurs et de leurs données (comptes,
partage des ressources, gestion des fichiers et répertoires, …)
Sortir à l’écran le résultat de l’addition
• Interface avec l’utilisateur (textuelle ou graphique):
Interprétation des commandes
Ces lignes forment un programme d’ordinateur • Contrôle des programmes (découpage en taches, partage
du temps processeur, …)
Contrainte: être compréhensible par la machine Les opérations logiques et arithmétiques de base (addition,
multiplication, … ) sont effectuées en binaire
2
Compilateur/interpréteur Langages de programmation:
Compilateur: traduire le programme entier une fois pour toutes
Deux types de langages:
Compilateur
exemple.c exemple
exécution
• Langages procéduraux : sont à base de procédures. Une
fichier source fichier exécutable procédure est une portion de programme écrit en langage de haut
• + plus rapide à l’exécution
niveau qui accomplit une tâche spécifique nécessaire au
• + sécurité du code source
programme.
• - il faut recompiler à chaque modification • Langages orientés objets : sont des langages non procéduraux
dans lesquels les éléments du programme sont considérés comme
Interpréteur: traduire au fur et à mesure les instructions du des objets qui peuvent s'échanger des messages.
programme à chaque exécution
exemple.bas
Interprétation+exécution Choix d’un langage?
fichier source
• + exécution instantanée appréciable pour les débutants
• - exécution lente par rapport à la compilation
2020/2021 IMSP - Niv1 13 2020/2021 IMSP - Niv1 14
Principaux Langages de
programmation: Etapes de réalisation d’un programme
Blaise PASCAL, Langage compilé et structuré,
Enoncé du problème
mathématicien et inventeur de dérivé d'ALGOL. c'est un
Pascal la première machine à langage de développement Spécification
calculer 1971 standard pour les micro-
Cahier des charges
ordinateurs.
Analyse
C'est une version améliorée Langage de programmation
du langage de programmation structuré et compilé, très Algorithme
C B du Bell Laboratory, créé en largement employé car ses Traduction en langage
1972 programmes peuvent
facilement se transférer d'un Programme source
type d'ordinateur à un autre. Compilation
Maple Nasa 1980 de SUN couvrir tous les domaines
Programme exécutable
D’application formel
Tests et modifications
Java Microsystems 1990 Ce langage connaît un Version finale et résultats
succès qu'aucun autre
langage n'avait encore connu. La réalisation de programmes passe par l’écriture d’algorithmes
D’où l’intérêt de l’Algorithmique
2020/2021 IMSP - Niv1 15 2020/2021 IMSP - Niv1 16
3
Exemple de pseudo code
problème du tri
Algorithmique
• Entrée: une séquence de n
nombres (a1, : : : ,an)
• Sortie: une permutation (a1’;
: : : ;an’) de la séquence
d’entrée: a1’<a2’<….<an’
• Exemple : (31;41;59;26;41;58)
Notions et instructions de base
(26;31;41;41;58;59)
• la lecture / écriture • 10h25 : karim transvase le contenu de son seau en plastique dans celui en bois
• 10h30 : karim transvase 2 litres de son seau en bois dans celui en fer
• les tests • 10h35 : karim informe Asmae du nombre de litres contenu dans ses seaux en
Quelles sont les quantités des trois seaux que Asmae a reçues?
4
Choix des identificateurs (1) Choix des identificateurs (2)
Le choix des noms de variables est soumis à quelques règles qui Conseil: pour la lisibilité du code choisir des noms significatifs
varient selon le langage, mais en général: qui décrivent les données manipulées
Un nom doit commencer par une lettre alphabétique exemples: TotalVentes2006, Prix_TTC, Prix_HT
exemple valide: A1 exemple invalide: 1A
5
Exercices simples sur l'affectation (1) Exercices simples sur l'affectation (2)
Donnez les valeurs des variables A, B et C après exécution Donnez les valeurs des variables A et B après exécution des
des instructions suivantes ? instructions suivantes ?
Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de Les instructions de lecture et d'écriture permettent à la machine de
priorité est le suivant (du plus prioritaire au moins prioritaire) : communiquer avec l'utilisateur
6
Les instructions d'entrées-sorties:
lecture et écriture (2) Exemple (lecture et écriture)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis
L'écriture permet d'afficher des résultats à l'écran (ou de les écrire qui calcule et affiche le double de ce nombre
dans un fichier)
7
Méthode de construction d’un Méthode de construction d’un
algorithme simple (3/4) algorithme simple (3/4)
Algorithme Programme Pascal Programme C
Calcul_Aire Program Calcul_Aire; #include <stdio.h>
Constantes CONST #include <math.h>
Pi = 3,14159 Pi = 3.14159 Main ( )
Variables VAR {
Rayon, Surface : réels Rayon, Surface : REAL; Float Pi = 3.14159;
Début BEGIN Float rayon, surface;
lire (Rayon) READLN (Rayon); Scanf (« °/°f », &rayon);
Surface := Pi * (Rayon)2 Surface := Pi * SQR (Rayon) surface = pi*pow (rayon,2);
écrire (Surface) WRITELN (Surface) Printif (« °/°f\n »surface, )
Fin END. Return 0;
}
8
Tests: instructions conditionnelles (2) Exemple (Si…Alors…Sinon)
La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que
Algorithme AffichageValeurAbsolue (version1)
la condition est fausse, aucun traitement n'est réalisé
Variable x : réel
• On utilisera dans ce cas la forme simplifiée suivante: Début
Ecrire " Entrez un réel : "
Si condition alors Lire (x)
instruction ou suite d'instructions1 Si x < 0 alors
Finsi Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
9
Tests imbriqués Tests imbriqués: exemple (version 1)
Les tests peuvent avoir un degré quelconque d'imbrications Variable n : entier
Si condition1 alors Début
Ecrire ("entrez un nombre : ")
Si condition2 alors
Lire (n)
instructionsA Si n < 0 alors
Sinon Ecrire ("Ce nombre est négatif")
instructionsB Sinon
Finsi Si n = 0 alors
Sinon Ecrire ("Ce nombre est nul")
Si condition3 alors Sinon
instructionsC Ecrire ("Ce nombre est positif")
Finsi Finsi
Finsi
Finsi
Fin
2020/2021 IMSP - Niv1 55 2020/2021 IMSP - Niv1 56
10
Tests imbriqués: corrigé de l'exercice 2
Variables
Début
A, B, C, Delta, X1, X2 : réels Algorithmique
Lire (A, B, C)
Delta ← B2 – 4 AC
Ecrire (« le trinome possède deux racines réelles : », X1, X2) Les boucles
Sinon
X1 ← (-B ) / 2A
Ecrire (« le trinome possède une racine réelle : », X1)
Finsi
Finsi
Fin
2020/2021 IMSP - Niv1 61 2020/2021 IMSP - Niv1 62
11
Trouver le PGCD de a et b
Algorithme d’Euclide
Exemple: pgcd(30, 105)
Trouver le plus grand diviseur commun (pgcd) de deux entiers 1ère méthode: Trouver tous les diviseurs de a et b, et trouver le
diviseur commun le plus grand
Définition: q est un diviseur commun de m et n si q divise à la • Diviseurs de 30: 1, 2, 3, 5, 6, 10, 15, 30
fois m et n (le reste de la division entière est 0) • Diviseurs de 105: 1, 3, 5, 7, 15, 21, 35, 105
Le pgdc de m et n est le plus grand entier q divisant à la fois m pgcd(30, 105) = 15
et n.
• 2ème méthode: la méthode d’Euclide
Exemple: pgcd(4, 6) = 2; pgcd(3,8) = 1; • 105 = 30.3 + 15. Donc pgcd(105, 30) = pgcd(30,15)
• 30 = 15.2 + 0. Donc pgcd(30, 15) = pgcd(15,0)
pgcd(9, 12) = 3; • pgcd(15,0)=15
Algorithme d’Euclide
Méthode d’Euclide : Algorithme Entrée: a, b deux entiers positifs Trace de l’algorithme pour
a=504 et b=396
Sortie: pgcd(a,b)
504 396 a
Soient r0, r1 deux entiers strictement positifs,
108 1
tels que r0=r1.q+r2 avec 0≤r2<r1 Procédure pgcd(a,b)
Tant que b <> 0 Faire
b 396 108 a
Début
Si r2 = 0, pgcd (r0, r1) = r1 72 3
diviser a par b: a = b.q+r, 0 ≤ r < b;
Sinon, rediviser ri par ri+1 tant que ri+1 est a:=b; b a
108 72
différent de 0 b:=r; 36 1
Si rn est le premier reste nul, alors Fin
72 36 a
pgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1 Retourner (a) b 0 2
Fin pgcd
2020/2021 IMSP - Niv1 69 2020/2021 IMSP - Niv1
b 70
instructions Compteur est une variable de type entier (ou caractère). Elle doit
FinPour être déclarée
i ←initiale 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
Vrai
i n'a pas atteint finale instructions i ← i + pas Initiale et finale peuvent être des valeurs, des variables définies
avant le début de la boucle ou des expressions de même type que
Faux compteur
12
Déroulement des boucles Pour Boucle Pour : exemple
1) La valeur initiale est affectée à la variable compteur
Algorithme Plus-Grand-Element: Réécriture de l’algorithme précédent
2) On compare la valeur du compteur et la valeur de finale : mais avec une boucle ``Pour’’
Entrée: n entiers S1,…, Sn
a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas Sortie: grand contenant le plus grand élément
positif (ou si compteur est < à finale pour un pas négatif), on sort de la
boucle et on continue avec l'instruction qui suit FinPour Algo plus-grand (S,n)
b) Si compteur est <= à finale dans le cas d'un pas positif (ou si compteur grand := S1;
est >= à finale pour un pas négatif), instructions seront exécutées Pour i =1 à n Faire
Si Si > grand alors // une plus grande valeur a été trouvée
i. Ensuite, la valeur de compteur est incrémentée de la valeur du pas grand := Si;
si pas est positif (ou décrémenté si pas est négatif)
ecrire (grand)
ii. On recommence l'étape 2 : La comparaison entre compteur et Fin plus-grand;
finale est de nouveau effectuée, et ainsi de suite …
13
Algorithme de la fonction factorielle :
Solution avec la boucle Tant Que Exemple
14
Détecter l’erreur dans les deux
essaie tant que et pour Boucles imbriquées
Les instructions d'une boucle peuvent être des instructions
Algorithme Algorithme itératives. Dans ce cas, on aboutit à des boucles imbriquées
Essai de tant que Essai pour
Variables Variables Exemple: Exécution
n : entier K, N : entier
Pour i allant de 1 à 5 OX
Début Début
Pour j allant de 1 à i OOX
n ← 15 n ← 200
tant que (n<>0)
écrire("O") OOOX
pour K variant de 1 à n
écrire (n) écrire (K) FinPour OOOOX
n←n-2 K ← n – 100 écrire("X") OOOOOX
Fin de tant que Fin pour FinPour
Fin Fin
Variables som, i : entier S'il n'est pas possible de connaître le nombre d'itérations avant
Debut l'exécution de la boucle, on fera appel à l'une des boucles TantQue
som ← 0 ou répéter jusqu'à
i←0
Répéter Pour le choix entre TantQue et jusqu'à :
i ← i+1
• Si on doit tester la condition de contrôle avant de commencer les
som ← som+i instructions de la boucle, on utilisera TantQue
Jusqu'à ( som > 100)
Ecrire (" La valeur cherchée est N= ", i) • Si la valeur de la condition de contrôle dépend d'une première
exécution des instructions de la boucle, on utilisera répéter jusqu'à ou
Fin faire tanque
2020/2021 IMSP - Niv1 89 2020/2021 IMSP - Niv1 90
15
Algorithme de la racine carrée :
Exercice Algorithme de la racine carrée
Fonctions et procédures
Algorithmique Lorsqu’une séquence d’instructions se répète plusieurs fois, il est
intéressant de faire un sous-programme correspondant à ce bloc
d’instructions et de l’utiliser autant de fois que nécessaire
16
Exemple de programme /
Forme d’une Fonction fonction
Une fonction s'écrit en dehors du programme principal sous la forme
17
La fonction de recherche des
Entrée: Un entier positif m Entrée: Un entier positif n
Sortie: Vrai si m est premier, Faux si non. Sortie: Le plus petit nb premier m > n
18
Transmission des paramètres : exemples Transmission par valeur, par adresse : exemples
Procédure incrementer1 (x : entier par valeur, y : entier par adresse) Procédure qui calcule la somme et le produit de deux entiers :
x ← x+1 Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)
y ← y+1 som ← x+y
FinProcédure prod ← x*y
Algorithme Test_incrementer1 FinProcédure
variables n, m : entier
Début Procédure qui échange le contenu de deux variabales :
n←3 Procédure Echange (x : réel par adresse, y : réel par adresse)
m←3 variables z : réel
incrementer1(n, m) résultat : z←x
écrire (" n= ", n, " et m= ", m) n=3 et m=4 x←y
Fin y←z
FinProcédure
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
2020/2021 IMSP - Niv1 109 2020/2021 IMSP - Niv1 110
Récursivité
Algorithmique Définition :Un algorithme est dit récursif
lorsqu’il est défini en fonction de lui-même.
Récursivité simple
La fonction puissance x xn. Cette fonction peut être
définie récursivement :
La Récursivité
19
Types de Récursivité Itération et Récursivité : Exemple
20
Fonctions récursives : exercice Fonctions récursives : exercice
Ecrivez une fonction récursive (puis itérative) qui calcule le terme n
La version récursive de la suite de Fibonacci définie par : U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)
21
Tableaux : remarques Tableaux : exemples (1)
L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple, Pour le calcul du nombre d'étudiants ayant une note supérieure à
notes[i] donne la valeur de l'élément i du tableau notes 10 avec les tableaux, on peut écrire :
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, Variables i ,nbre : entier
notes[i] désigne l'élément i+1 du tableau notes tableau notes[30] : réel
Début
Il est possible de déclarer un tableau sans préciser au départ sa dimension.
nbre ← 0
Cette précision est faite ultérieurement .
Pour i allant de 0 à 29
• Par exemple, quand on déclare un tableau comme paramètre d'une procédure, Si (notes[i] >10) alors
on peut ne préciser sa dimension qu'au moment de l'appel
nbre ←nbre+1
• En tous cas, un tableau est inutilisable tant qu’on n’a pas précisé le nombre de FinSi
ses éléments FinPour
Un grand avantage des tableaux est qu'on peut traiter les données qui y écrire ("le nombre de notes supérieures à 10 est : ", nbre)
sont stockées de façon simple en utilisant des boucles Fin
2020/2021 IMSP - Niv1 127 2020/2021 IMSP - Niv1 128
22
Exemples : lecture d'une matrice Exemples : affichage d'une matrice
Procédure qui permet de saisir les éléments d'une matrice : Procédure qui permet d'afficher les éléments d'une matrice :
Procédure SaisieMatrice(n : entier par valeur, m : entier par valeur , Procédure AfficheMatrice(n : entier par valeur, m : entier par valeur
tableau A : réel par référence ) ,tableau A : réel par
Début valeur )
variables i,j : entier Début
Pour i allant de 0 à n-1 variables i,j : entier
écrire ("saisie de la ligne ", i + 1)
Pour i allant de 0 à n-1
Pour j allant de 0 à m-1
Pour j allant de 0 à m-1
écrire ("Entrez l'élément de la ligne ", i + 1, " et de la colonne ", j+1)
lire (A[i][j])
écrire ("A[",i, "] [",j,"]=", A[i][j])
FinPour FinPour
FinPour FinPour
Fin Procédure Fin Procédure
Exemples : somme de deux matrices Appel des procédures définies sur les matrices
Procédure qui calcule la somme de deux 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 :
Procédure SommeMatrices(n, m : entier par valeur,
tableau A, B : réel par valeur , tableau C : réel par référence ) Algorithme Matrices
Début variables tableau M1[3][4],M2 [3][4],M3 [3][4] : réel
variables i,j : entier Début
Pour i allant de 0 à n-1 SaisieMatrice(3, 4, M1)
Pour j allant de 0 à m-1 SaisieMatrice(3, 4, M2)
C[i][j] ← A[i][j]+B[i][j] AfficheMatrice(3,4, M1)
FinPour AfficheMatrice(3,4, M2)
FinPour SommeMatrice(3, 4, M1,M2,M3)
Fin Procédure AfficheMatrice(3,4, M3)
Fin
2020/2021 IMSP - Niv1 135 2020/2021 IMSP - Niv1 136
23
Algorithme recherche Mini Tableaux : 2 problèmes classiques
Recherche Mini
Variables
i, Indice_Mini, Mini : entiers
Tab(10) : tableau d’entiers Recherche d’un élément dans un tableau
Début
pour i variant de 1 à 10
Lire Tab(i)
• Recherche séquentielle
Fin de pour • Recherche dichotomique
Mini Tab(1)
Indice_Mini 1
pour i variant de 2 à 10
Si Tab(i) < Mini alors
Tri d'un tableau
Mini Tab(i)
Indice_Mini i • Tri par sélection
Fin de Si
Fin de pour
• Tri rapide
ecrire (Mini, Indice_Mini)
Fin
Le nombre d'opérations dépend généralement du nombre de données à La complexité dans le pire des cas est d'ordre N, (on note O(N))
traiter. Ainsi, la complexité est une fonction de la taille des données. On
s'intéresse souvent à son ordre de grandeur asymptotique Pour un ordinateur qui effectue 10 6 tests par seconde on a :
24
Recherche dichotomique Recherche dichotomique : algorithme
Dans le cas où le tableau est ordonné, on peut améliorer l'efficacité inf←0 , sup←N-1, Trouvé ← Faux
de la recherche en utilisant la méthode de recherche dichotomique TantQue (inf <=sup) ET (Trouvé=Faux)
milieu←(inf+sup)div2
Si (x=T[milieu]) alors
Principe : diviser par 2 le nombre d'éléments dans lesquels on
cherche la valeur x à chaque étape de la recherche. Pour cela on Trouvé ← Vrai
compare x avec T[milieu] : SinonSi (x>T[milieu]) alors
inf←milieu+1
Sinon sup←milieu-1
• Si x < T[milieu], il suffit de chercher x dans la 1ère moitié du tableau
FinSi
entre (T[0] et T[milieu-1])
FinSi
FinTantQue
• Si x > T[milieu], il suffit de chercher x dans la 2ème moitié du tableau
Si Trouvé alors écrire ("x appartient au tableau")
entre (T[milieu+1] et T[N-1])
Sinon écrire ("x n'appartient pas au tableau")
FinSi
Si la valeur cherché est 20 alors les indices inf, sup et milieu vont évoluer L'écart de performances entre la recherche séquentielle et la recherche
comme suit : dichotomique est considérable pour les grandes valeurs de N
La méthode de tri
25
Les algorithmes de Tri Tri par sélection
temp ← T[indice]
Cette propriété est donc invariante avec i, on l’appelle un invariant. T[indice] ← T[i] Permutation des deux valeurs
T[i] ← temp
FinPour
2020/2021 IMSP - Niv1 153 2020/2021 IMSP - Niv1 154
9 4 1 7 3 1 4 9 7 3
• Étape 2: on cherche le plus petit élément, mais cette fois à partir du
deuxième élément. On le trouve en dernière position, on l'échange
avec le deuxième:
1 3 9 7 4
• Étape 3:
1 3 4 7 9
26
Tri par sélection : complexité Tri par insertion
2 56 4 7 0
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
27
Tri à bulles : algorithme Tri à bulles : exemple
4 1 5 3 2
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
28
Procédure de partition Tri Rapide : Exemple
Procédure Partition(tableau T : réel par adresse, p,r: entier par valeur,
q: entier par adresse )
Variables i, j: entier Partage avec pivot = 3
pivot: réel
2 4 1 7 3 2 3 6
pivot← T[p], i←p+1, j ← r
TantQue (i<=j)
2 2 1 7 3 4 3 6
TantQue (i<=r et T[i] <=pivot) i ← i+1 FinTantQue
TantQue (j>=p et T[j] >pivot ) j ← j-1 FinTantQue
<3 3
Si i <j alors
Echanger(T[i], T[j]), i ← i+1, j ← j-1 2 2 1 3 3 4 7 6
FinSi Suite du tri
TRI TRI
FinTantQue
Echanger(T[j], T[p]) 1 2 2 3 3 4 6 7
q←j
Fin Procédure
2020/2021 IMSP - Niv1 169 2020/2021 IMSP - Niv1 170
Le pire des cas correspond au cas où le pivot est à chaque choix le plus petit
élément du tableau (tableau déjà trié)
29