Académique Documents
Professionnel Documents
Culture Documents
Objectif:
1ère année MSP - Cursus Ingénieur • Apprendre les concepts de base de l'algorithmique et de la
programmation
2022/2023, 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, …)
2022/2023 MSP- Cursus Ingénieur - Niv1 1 2022/2023 MSP- Cursus Ingénieur - Niv1 2
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.)
2022/2023 MSP- Cursus Ingénieur - Niv1 3 2022/2023 MSP- Cursus Ingénieur - Niv1 4
2022/2023 MSP- Cursus Ingénieur - Niv1 5 2022/2023 MSP- Cursus Ingénieur - Niv1 6
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, …)
2022/2023 MSP- Cursus Ingénieur - Niv1 7 2022/2023 MSP- Cursus Ingénieur - Niv1 8
Contrainte: être compréhensible par la machine Les opérations logiques et arithmétiques de base (addition,
multiplication, … ) sont effectuées en binaire
2022/2023 MSP- Cursus Ingénieur - Niv1 9 2022/2023 MSP- Cursus Ingénieur - Niv1 10
2
Compilateur/interpréteur Langages de programmation:
Compilateur: traduire le programme entier une fois pour toutes
Deux types de langages:
Compilateur exécution
exemple.c exemple • 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
niveau qui accomplit une tâche spécifique nécessaire au
• + plus rapide à l’exécution
programme.
• + sécurité du code source
• - 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
Interprétation+exécution Choix d’un langage?
exemple.bas
fichier source
• + exécution instantanée appréciable pour les débutants
• - exécution lente par rapport à la compilation
2022/2023 MSP- Cursus Ingénieur - Niv1 13 2022/2023 MSP- Cursus Ingénieur - 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
2022/2023 MSP- Cursus Ingénieur - Niv1 15 2022/2023 MSP- Cursus Ingénieur - Niv1 16
2022/2023 MSP- Cursus Ingénieur - Niv1 17 2022/2023 MSP- Cursus Ingénieur - Niv1 18
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’
2022/2023 MSP- Cursus Ingénieur - Niv1 19 2022/2023 MSP- Cursus Ingénieur - Niv1 20
• 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?
2022/2023 MSP- Cursus Ingénieur - Niv1 21 2022/2023 MSP- Cursus Ingénieur - Niv1 22
2022/2023 MSP- Cursus Ingénieur - Niv1 23 2022/2023 MSP- Cursus Ingénieur - Niv1 24
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 ?
2022/2023 MSP- Cursus Ingénieur - Niv1 31 2022/2023 MSP- Cursus Ingénieur - Niv1 32
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
2022/2023 MSP- Cursus Ingénieur - Niv1 35 2022/2023 MSP- Cursus Ingénieur - Niv1 36
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;
}
2022/2023 MSP- Cursus Ingénieur - Niv1 43 2022/2023 MSP- Cursus Ingénieur - Niv1 44
2022/2023 MSP- Cursus Ingénieur - Niv1 45 2022/2023 MSP- Cursus Ingénieur - Niv1 46
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
2022/2023 MSP- Cursus Ingénieur - Niv1 49 2022/2023 MSP- Cursus Ingénieur - Niv1 50
2022/2023 MSP- Cursus Ingénieur - Niv1 53 2022/2023 MSP- Cursus Ingénieur - Niv1 54
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
2022/2023 MSP- Cursus Ingénieur - Niv1 55 2022/2023 MSP- Cursus Ingénieur - Niv1 56
2022/2023 MSP- Cursus Ingénieur - Niv1 59 2022/2023 MSP- Cursus Ingénieur - Niv1 60
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
2022/2023 MSP- Cursus Ingénieur - Niv1 61 2022/2023 MSP- Cursus Ingénieur - Niv1 62
2022/2023 MSP- Cursus Ingénieur - Niv1 63 2022/2023 MSP- Cursus Ingénieur - Niv1 64
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
2022/2023 MSP- Cursus Ingénieur - Niv1 67 2022/2023 MSP- Cursus Ingénieur - Niv1 68
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
2022/2023 MSP- Cursus Ingénieur - Niv1 69 2022/2023 MSP- Cursus Ingénieur - 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
2022/2023 MSP- Cursus Ingénieur - Niv1 71 2022/2023 MSP- Cursus Ingénieur - Niv1 72
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 …
2022/2023 MSP- Cursus Ingénieur - Niv1 73 2022/2023 MSP- Cursus Ingénieur - Niv1 74
2022/2023 MSP- Cursus Ingénieur - Niv1 75 2022/2023 MSP- Cursus Ingénieur - Niv1 76
2022/2023 MSP- Cursus Ingénieur - Niv1 77 2022/2023 MSP- Cursus Ingénieur - Niv1 78
13
Algorithme de la fonction factorielle :
Solution avec la boucle Tant Que Exemple
2022/2023 MSP- Cursus Ingénieur - Niv1 79 2022/2023 MSP- Cursus Ingénieur - Niv1 80
2022/2023 MSP- Cursus Ingénieur - Niv1 83 2022/2023 MSP- Cursus Ingénieur - Niv1 84
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
2022/2023 MSP- Cursus Ingénieur - Niv1 85 2022/2023 MSP- Cursus Ingénieur - Niv1 86
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
2022/2023 MSP- Cursus Ingénieur - Niv1 89 2022/2023 MSP- Cursus Ingénieur - Niv1 90
15
Algorithme de la racine carrée :
Exercice Algorithme de la racine carrée
2022/2023 MSP- Cursus Ingénieur - Niv1 91 2022/2023 MSP- Cursus Ingénieur - Niv1 92
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
2022/2023 MSP- Cursus Ingénieur - Niv1 93 2022/2023 MSP- Cursus Ingénieur - Niv1 94
2022/2023 MSP- Cursus Ingénieur - Niv1 95 2022/2023 MSP- Cursus Ingénieur - Niv1 96
16
Exemple de programme /
Forme d’une Fonction fonction
Une fonction s'écrit en dehors du programme principal sous la forme
2022/2023 MSP- Cursus Ingénieur - Niv1 97 2022/2023 MSP- Cursus Ingénieur - Niv1 98
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
2022/2023 MSP- Cursus Ingénieur - Niv1 105 2022/2023 MSP- Cursus Ingénieur - Niv1 106
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
2022/2023 MSP- Cursus Ingénieur - Niv1 109 2022/2023 MSP- Cursus Ingénieur - Niv1 110
2022/2023 MSP- Cursus Ingénieur - Niv1 111 2022/2023 MSP- Cursus Ingénieur - Niv1 112
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é
2022/2023 MSP- Cursus Ingénieur - Niv1 113 2022/2023 MSP- Cursus Ingénieur - Niv1 114
19
Types de Récursivité Itération et Récursivité : Exemple
2022/2023 MSP- Cursus Ingénieur - Niv1 115 2022/2023 MSP- Cursus Ingénieur - Niv1 116
2022/2023 MSP- Cursus Ingénieur - Niv1 117 2022/2023 MSP- Cursus Ingénieur - Niv1 118
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)
2022/2023 MSP- Cursus Ingénieur - Niv1 121 2022/2023 MSP- Cursus Ingénieur - Niv1 122
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
2022/2023 MSP- Cursus Ingénieur - Niv1 127 2022/2023 MSP- Cursus Ingénieur - 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
2022/2023 MSP- Cursus Ingénieur - Niv1 133 2022/2023 MSP- Cursus Ingénieur - Niv1 134
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
2022/2023 MSP- Cursus Ingénieur - Niv1 135 2022/2023 MSP- Cursus Ingénieur - Niv1 136
2022/2023 MSP- Cursus Ingénieur - Niv1 137 2022/2023 MSP- Cursus Ingénieur - Niv1 138
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
2022/2023 MSP- Cursus Ingénieur - Niv1 139 2022/2023 MSP- Cursus Ingénieur - Niv1 140
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 106 tests par seconde on a :
N 103 106 109
En général, on s'intéresse à la complexité dans le pire des cas et à la
complexité moyenne temps 1ms 1s 16mn40s
2022/2023 MSP- Cursus Ingénieur - Niv1 143 2022/2023 MSP- Cursus Ingénieur - Niv1 144
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
2022/2023 MSP- Cursus Ingénieur - Niv1 145 2022/2023 MSP- Cursus Ingénieur - Niv1 146
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
2022/2023 MSP- Cursus Ingénieur - Niv1 147 2022/2023 MSP- Cursus Ingénieur - Niv1 148
La méthode de tri
2022/2023 MSP- Cursus Ingénieur - Niv1 149 2022/2023 MSP- Cursus Ingénieur - Niv1 150
25
Les algorithmes de Tri Tri par sélection
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
2022/2023 MSP- Cursus Ingénieur - Niv1 155 2022/2023 MSP- Cursus Ingénieur - Niv1 156
26
Tri par sélection : complexité Tri par insertion
2022/2023 MSP- Cursus Ingénieur - Niv1 157 2022/2023 MSP- Cursus Ingénieur - Niv1 158
2 56 4 7 0
2022/2023 MSP- Cursus Ingénieur - Niv1 159 2022/2023 MSP- Cursus Ingénieur - Niv1 160
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
2022/2023 MSP- Cursus Ingénieur - Niv1 161 2022/2023 MSP- Cursus Ingénieur - Niv1 162
27
Tri à bulles : algorithme Tri à bulles : exemple
4 1 5 3 2
2022/2023 MSP- Cursus Ingénieur - Niv1 163 2022/2023 MSP- Cursus Ingénieur - Niv1 164
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
2022/2023 MSP- Cursus Ingénieur - Niv1 167 2022/2023 MSP- Cursus Ingénieur - Niv1 168
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
2022/2023 MSP- Cursus Ingénieur - Niv1 169 2022/2023 MSP- Cursus Ingénieur - 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