189
2006/2007 Module I2, 1ère année SMI 1 Cours d’algorithmique 1ère année SMI 2006/2007, Semestre 2 «Ce que l’on conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément» [N. Boileau]

Cours d’algorithmique

  • Upload
    janet

  • View
    71

  • Download
    1

Embed Size (px)

DESCRIPTION

Cours d’algorithmique. 1ère année SMI 2006/2007, Semestre 2 « Ce que l’on conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément» [N. Boileau]. Objectif et plan du cours. Objectif: Apprendre les concepts de base de l'algorithmique et de la programmation - PowerPoint PPT Presentation

Citation preview

Page 1: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 1

Cours d’algorithmique

1ère année SMI

2006/2007, Semestre 2

«Ce que l’on conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément» [N. Boileau]

Page 2: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 2

Objectif et plan du cours Objectif:

• Apprendre les concepts de base de l'algorithmique et de la programmation

• Etre capable de mettre en oeuvre ces concepts pour analyser des problèmes simples et écrire les programmes correspondants

Plan: • Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages de

programmation, …)

• Algorithmique (affectation, instructions conditionnelles, instructions itératives, fonctions, procédures, …)

• MAPLE (un outil de programmation)

Page 3: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 3

Système Informatique? Techniques du traitement automatique de l’information au

moyen des ordinateursSystème informatique = ordinateur + périphériques

Éléments d’un système informatique

LangagesLangages ((Java,C/C++, Fortran,etcJava,C/C++, Fortran,etc).).

Système d’exploitationSystème d’exploitation( ( DOS,Windows, Unix, etcDOS,Windows, Unix, etc).).

MatérielMatériel ((PC, Macintosh, station SUN, etcPC, Macintosh, station SUN, etc).).

ApplicationsApplications ((Word, Excel, Jeux, Maple, etcWord, Excel, Jeux, Maple, etc).).

Page 4: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 4

Matériel: Principaux éléments d’un PC

Unité centrale (le boîtier) Processeur ou CPU (Central Processing Unit)• Mémoire centrale

• Unité de calcul

• Unité de commande

Périphériques • Moniteur (l'écran), clavier, souris

• Modem, imprimante, scanner, …

Page 5: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 5

Qu’est-ce qu’un programme d’ordinateur?

Allumez un ordinateur, vous n’en tirerez rien!!

Pour le faire marcher il faut lui fournir un programmeOrdinateur = matériel + programme(s)

Un programme est une suite d’instructions d’ordinateur

Une instruction est un ordre compris par l’ordinateur et qui lui fait exécuté une action, c-a-d une modification de son environnement

Page 6: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 6

Les catégories d’ordres

les ordinateurs, quels qu’ils soient, ne sont fondamentalement capables de comprendre que quatre catégories d'ordres (en programmation, on n'emploiera pas le terme d'ordre, mais plutôt celui d'instructions). Ces quatre familles d'instructions sont :• l’affectation de variables

• la lecture / écriture

• les tests

• les boucles

Page 7: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 7

Actions d’un ordinateur : Exemple

Attendre qu’un nombre soit tapé au clavier Sortir à l’écran le nombre entré Attendre qu’un nombre soit tapé au clavier Sortir à l’écran le nombre entré Additionner les deux nombres entrés Sortir à l’écran le résultat de l’addition

Ces lignes forment un programme d’ordinateur

Page 8: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 8

Qu’est ce qu’un système d’exploitation? Ensemble de programmes qui gèrent le matériel et

contrôlent les applications

• Gestion des périphériquesGestion des périphériques (affichage à l'écran, lecture du clavier, pilotage d’une imprimante, …)

• Gestion des utilisateurs et de leurs donnéesGestion des utilisateurs et de leurs données (comptes, partage des ressources, gestion des fichiers et répertoires, …)

• Interface avec l’utilisateur (textuelle ou graphique):Interface avec l’utilisateur (textuelle ou graphique): Interprétation des commandes

• Contrôle des programmesContrôle des programmes (découpage en taches, partage du temps processeur, …)

Page 9: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 9

Langages informatiques

Un langage informatique est un outil permettant de donner des ordres (instructions) à la machine

• A chaque instruction correspond une action du processeur

Intérêt : écrire des programmes (suite consécutive d’instructions) déstinés à effectuer une tache donnée

• Exemple: un programme de gestion de comptes bancaires

Contrainte: être compréhensible par la machine

Page 10: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 10

Langage machine

Langage binaire: l’information est exprimée et manipulée sous forme d’une suite de bits

Un bit (binary digit) = 0 ou 1 (2 états électriques)

Une combinaison de 8 bits= 1 Octet possibilités qui permettent de coder tous les caractères alphabétiques, numériques, et symboles tels que ?,*,&, …

• Le code ASCII (American Standard Code for Information Interchange) donne les correspondances entre les caractères alphanumériques et leurs représentation binaire, Ex. A= 01000001, ?=00111111

Les opérations logiques et arithmétiques de base (addition, multiplication, … ) sont effectuées en binaire

25628

Page 11: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 11

L'assembleur Problème: le langage machine est difficile à comprendre par l'humain

Idée: trouver un langage compréhensible par l'homme qui sera ensuite converti en langage machine • AssembleurAssembleur (1er langage): exprimer les instructions élémentaires de façon

symbolique

• +: déjà plus accessible que le langage machine• -: dépend du type de la machine (n’est pas portableportable)• -: pas assez efficace pour développer des applications complexes

Apparition des langages évolués

ADD A, 4

LOAD B

MOV A, OUT

traducteur langage machine

Page 12: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 12

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

Code sourceCode source

en langage évoluéen langage évolué

Compilateur ouCompilateur ouLangage machineLangage machine

interpréteurinterpréteur

Page 13: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 13

Compilateur/interpréteur Compilateur: traduire le programme entier une fois pour toutes

• + plus rapide à l’exécution• + sécurité du code source• - il faut recompiler à chaque modification

Interpréteur: traduire au fur et à mesure les instructions du programme à chaque exécution

• + exécution instantanée appréciable pour les débutants• - exécution lente par rapport à la compilation

exemple.c Compilateur Compilateur

fichier sourcefichier source exemple

fichier exécutablefichier exécutable

exécutionexécution

exemple.basfichier sourcefichier source

Interprétation+exécutionInterprétation+exécution

Page 14: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 14

Langages de programmation:

Deux types de langages:• Langages procéduraux : sont à base de procédures. Une

procédure est une portion de programme écrit en langage de haut niveau qui accomplit une tâche spécifique nécessaire au programme.

• Langages orientés objets : sont des langages non procéduraux dans lesquels les éléments du programme sont considérés comme des objets qui peuvent s'échanger des messages.

Choix d’un langage?

Page 15: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 15

Principaux Langages de programmation:

Pascal

Blaise PASCAL, mathématicien et inventeur de la première machine à calculer 1971

Langage compilé et structuré, dérivé d'ALGOL. c'est un langage de développement standard pour les micro-ordinateurs.

C

C'est une version améliorée du langage de programmation B du Bell Laboratory, créé en 1972

Langage de programmation structuré et compilé, très largement employé car ses programmes peuvent facilement se transférer d'un type d'ordinateur à un autre.

Maple Nasa 1980 de SUN couvrir tous les domaines

D’application formel

Java Microsystems 1990 Ce langage connaît un succès qu'aucun autre langage n'avait encore connu.

Page 16: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 16

Etapes de réalisation d’un programme

SpécificationSpécification

AnalyseAnalyse

Traduction en langageTraduction en langage

CompilationCompilation

Tests et modificationsTests et modifications

Enoncé du problème Enoncé du problème

Cahier des chargesCahier des charges

AlgorithmeAlgorithme

Programme sourceProgramme source

Programme exécutableProgramme exécutable

Version finale et résultatsVersion finale et résultats

La réalisation de programmes passe par l’écriture d’algorithmes D’où l’intérêt de

l’Algorithmique

Page 17: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 17

Pourquoi apprendre l’algorithmique pour apprendre à programmer ?

Un algorithme est une description complète et détaillée des actions à effectuer et de leur séquencement pour arriver à un résultat donné

• Intérêt: séparation analyse/codage (pas de préoccupation de syntaxe) l’algorithmique exprime les instructions résolvant un problème donné indépendamment des particularités de tel ou tel langage.

• Qualités: exact (fournit le résultat souhaité), efficace (temps d’exécution, mémoire occupée), clair (compréhensible), général (traite le plus grand nombre de cas possibles), …

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. Mieux faire d’abord le plan et rédiger ensuite que l’inverse…

Page 18: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 18

Représentation d’un algorithme

Historiquement, deux façons pour représenter un algorithme:

• L’Organigramme: 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

• Le pseudo-code: Le pseudo-code: représentation textuelle avec une série de conventions ressemblant à un langage de programmation (sans les problèmes de syntaxe)

• plus pratique pour écrire un algorithme

• représentation largement utilisée

Page 19: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 19

Exemple de pseudo code

problème du tri

• 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) (26;31;41;41;58;59)

Page 20: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 20

Algorithmique

Notions et instructions de baseNotions et instructions de base

Page 21: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 21

Les catégories d’ordres

les ordinateurs, quels qu’ils soient, ne sont fondamentalement capables de comprendre que quatre catégories d'ordres (en programmation, on n'emploiera pas le terme d'ordre, mais plutôt celui d'instructions). Ces quatre familles d'instructions sont :

• Les variables et leurs affectation

• la lecture / écriture

• les tests

• les boucles

Page 22: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 22

Notions Fondamentales (1/2)

Karim possède 3 seaux : un seau en plastique d’une contenance de 10 litres, un seau en bois d’une contenance de 7 litres et un seau en fer d’une contenance de 9 litres.

• 10h00 : karim vide ses 3 seaux

• 10h05 : karim va rendre visite a Nabil, celui-ci met 6 litres dans le seau en bois de Karim

• 10h10 : karim transverse le contenu de son seau en bois dans le seau en fer

• 10h15 : karim revient vers nabil remplir à ras bord son seau en plastique

• 10h20 : karim déverse la moitié de son seau en plastique à l’égout

• 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

• 10h35 : karim informe Asmae du nombre de litres contenu dans ses seaux en plastique, en bois, en fer.

Quelles sont les quantités des trois seaux que Asmae a reçues?

Page 23: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 23

Notions Fondamentales (2/2)

Notion d’algorithme : si les huis phrases sont bien exécutée par Karim, alors l’histoire est un algorithme

Notion d’instruction : chacune de huis phrases est une instruction (un ordre)

Notion de valeur : { 0, 3, 5, 6, 8, 10 } Notion de mémoire : elle est matérialisée par les seaux qui « mémorisent »

les quantités de liquide Notion de variable : une variable est un emplacement mémoire, ici on a

trois variables (le seau en plastique, le seau en bois et le seau en fer) Notion d’environnement : c’est l’ensemble des objet, informations,

personnes qui on une existence hors de l’histoire mais qui interviennent dans son déroulement.

Notion des valeurs d’entrée et de sortie : c’est les valeurs que le processeur reçoit de l’environnement et celles qu’il donne à l’environnement durant l’exucution. Valeurs en entrée :{6, 10} Valeurs en sortie = {0, 3, 8}

Page 24: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 24

Notion de variable

Dans les langages de programmation une variable variable sert à stocker la valeur d’une donnée

Une variable désigne en fait un emplacement mémoire dont

le contenu peut changer au cours d’un programme (d’où le nom variable)

Règle : Les variables doivent être déclaréesdéclarées avant d’être utilisées, elle doivent être caractérisées par :

• un nom (IdentificateurIdentificateur)

• un typetype (entier, réel, caractère, chaîne de caractères, …)

Page 25: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 25

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:

Un nom doit commencer par une lettre alphabétique exemple valide: A1exemple valide: A1 exemple invalide: 1Aexemple invalide: 1A

doit être constitué uniquement de lettres, de chiffres et du soulignement _ (Eviter les caractères de ponctuation et les espaces) valides: SMI2007, SMI_2007valides: SMI2007, SMI_2007 invalides: SMI 2007, SMI-2007, invalides: SMI 2007, SMI-2007, SMI;2007SMI;2007

doit être différent des mots réservés du langage (par exemple en JavaJava: int, float, else, switch, case, default, for, main, returnint, float, else, switch, case, default, for, main, return, …)

La longueur du nom doit être inférieure à la taille maximale spécifiée par le langage utilisé

Page 26: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 26

Choix des identificateurs (2)Conseil: pour la lisibilité du code choisir des noms significatifs

qui décrivent les données manipulées

exemples: TotalVentes2006, Prix_TTC, Prix_HT

Remarque: en pseudo-code algorithmique, on va respecter les règles citées, même si on est libre dans la syntaxe

Page 27: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 27

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)Type numérique (entier ou réel)• ByteByte (codé sur 1octet): de 0 à 255

• Entier courtEntier court (codé sur 2 octets) : -32 768 à 32 767

• Entier long Entier long (codé sur 4 ou 8 octets)

• Réel simple précisionRéel simple précision (codé sur 4 octets)

• Réel double précisionRéel double précision (codé sur 8 octets)

Type logique ou booléenType logique ou booléen:: deux valeurs VRAI ou FAUX

Type caractère:Type caractère: lettres majuscules, minuscules, chiffres, symboles, …

exemples: ’A’, ’a’, ’1’, ’?’, …exemples: ’A’, ’a’, ’1’, ’?’, … Type chaîne de Type chaîne de caractère: toute suite de caractères,

exemples: " Nom, Prénom", "code postale: 1000", …exemples: " Nom, Prénom", "code postale: 1000", …

Page 28: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 28

Déclaration des variables Rappel: toute variable utilisée dans un programme doit avoir fait

l’objet d’une déclaration préalable En pseudo-code, on va adopter la forme suivante pour la

déclaration de variables

Variables liste d'identificateurs : typeVariables liste d'identificateurs : type Exemple:

Variables i, j,k : entier

x, y : réel

OK: booléen

ch1, ch2 : chaîne de caractères

Remarque: pour le type numérique on va se limiter aux entiers et réels sans considérer les sous types

Page 29: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 29

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)

En pseudo-code, l'affectation se note avec le signe ←

Var← e :Var← e : attribue la valeur de e à la variable Var attribue la valeur de e à la variable Var

- e peut être une valeur, une autre variable ou une expression

- Var et e doivent être de même type ou de types compatibles

- l’affectation ne modifie que ce qui est à gauche de la flèche

Ex valides: i ←1 j ←i k ←i+j

x ←10.3 x ←10.3 OK ←FAUX OK ←FAUX ch1 ←"SMI" ch1 ←"SMI"

ch2 ←ch1 ch2 ←ch1 x ←4 x ←4 x ←j x ←j

(voir la déclaration des variables dans le transparent précédent)

non valides: i ←10.3 i ←10.3 OK ←"SMI" OK ←"SMI" j ←xj ←x

Page 30: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 30

Quelques remarques Beaucoup de langages de programmation (C/C++, Java, …) utilisent

le signe égal = pour l’affectation ←. Attention aux confusions:

• l'affectation n'est pas commutative : A=B est différente de B=A

• l'affectation est différente d'une équation mathématique :

• A=A+1 a un sens en langages de programmation

• A+1=2 n'est pas possible en langages de programmation et n'est pas équivalente à A=1

Certains langages donnent des valeurs par défaut aux variables déclarées. Pour éviter tout problème il est préférable d'initialiser les variables déclarées

Page 31: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 31

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: EntierDébutA ← 3B ← 7A ← B

B ← A+5

C ← A + BC ← B – AFin

Page 32: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 32

Exercices simples sur l'affectation (2)

Donnez les valeurs des variables A et B après exécution des instructions suivantes ?

Variables A, B : EntierDébutA ← 1B ← 2A ← BB ← AFin

Les deux dernières instructions permettent-elles d’échanger les valeurs de A et B ?

Page 33: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 33

Exercices simples sur l'affectation (3)

Ecrire un algorithme permettant d’échanger les

valeurs de deux variables A et B

Page 34: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 34

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: exemples: 1, b, a*2, a+ 3*b-c, … 1, b, a*2, a+ 3*b-c, …

L'évaluation de l'expression fournit une valeur unique qui est le résultat de l'opération

Les opérateurs dépendent du type de l'opération, ils peuvent être :

• des opérateurs arithmétiques: +, -, *, /, % (modulo), ^ (puissance)

• des opérateurs logiques: NON, OU, ET

• des opérateurs relationnels: =, , <, >, <=, >=

• des opérateurs sur les chaînes: & (concaténation)

Une expression est évaluée de gauche à droite mais en tenant compte de priorités

Page 35: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 35

Priorité des opérateurs

Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité est le suivant (du plus prioritaire au moins prioritaire) :

• ^ : (élévation à la puissance)

• * , / (multiplication, division)

• % (modulo)

• + , - (addition, soustraction)

exemple: exemple: 2 + 3 * 7 vaut 23 23

En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer les opérations à effectuer en priorité

exemple: exemple: ((2 + 3) * 7 vaut 3 35

Page 36: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 36

Les instructions d'entrées-sorties: lecture et écriture (1)

Les instructions de lecture et d'écriture permettent à la machine de communiquer avec l'utilisateur

La lecture permet d'entrer des donnés à partir du clavier

• En pseudo-code, on note: lire (var)lire (var)

lla machine met la valeur entrée au clavier dans la zone mémoire nommée var

• Remarque: Le programme s'arrête lorsqu'il rencontre une instruction Lire et ne se poursuit qu'après la frappe d’une valeur au clavier et de la touche Entrée

Page 37: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 37

Les instructions d'entrées-sorties: lecture et écriture (2)

L'écriture permet d'afficher des résultats à l'écran (ou de les écrire dans un fichier)

• En pseudo-code, on note: écrire (var)écrire (var)

la machine affiche le contenu de la zone mémoire var

• Conseil: Avant de lire une variable, il est fortement conseillé d’écrire des messages à l’écran, afin de prévenir l’utilisateur de ce qu’il doit frapper 

Page 38: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 38

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

Page 39: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 39

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

Page 40: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 40

Exercice (respect des règles) Chacun de ces quatre algorithmes contient une erreur. Laquelle?

Algorithme1

VariablesQuantité : entier

Prix_unit : réel

DébutLire (Quantité, Prix_unit)

Prix_total := Quantité * Prix_unit

Écrire (Prix_total)

Fin

Algorithme2

VariablesX, Y, Z : réel

DébutLire (X, Y, Z)

Z :=X-Y

Écrire (Z)

Fin

Algorithme3

VariablesA1, A2: entier

A3 : réel

DébutLire (A1, A2)

A2 := A1 * A3

Écrire (A2)

Fin

Algorithme4

VariablesX : réel

DébutLire (X)

X := X-1

X :=Pi * X

Écrire (X)

Fin

Page 41: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 41

Méthode de construction d’un algorithme simple (1/4)

Exemple :

Écrire un algorithme qui consiste a calculer l’air S d’un cercle selon la formule S = Pi * R2

Rappel : Pi = 3.14159 et R le rayon du cercle

Page 42: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 42

Méthode de construction d’un algorithme simple (2/4)

Méthodologie a suivre : constantes : Pi = 3.14159

Variables : Rayon, Surface

Types : Rayon, Surface : réel

Expressions et affectation : Surface := Pi * (Rayon)2

Structures conditionnelles et les boucles : ------ Opérations d’entrée-sortie : Lire (Rayon),

Écrire (Surface)

Page 43: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 43

Méthode de construction d’un algorithme simple (3/4)

AlgorithmeCalcul_Aire

Constantes

Pi = 3,14159

Variables

Rayon, Surface : réels

Début

lire (Rayon)

Surface := Pi * (Rayon)2

écrire (Surface)

Fin

Page 44: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 44

Méthode de construction d’un algorithme simple (3/4)

Programme Pascal Programme CProgram Calcul_Aire;

CONST

Pi = 3.14159

VAR

Rayon, Surface : REAL;

BEGIN

READLN (Rayon);

Surface := Pi * SQR (Rayon)

WRITELN (Surface)

END.

#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;

}

Page 45: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 45

Algorithmique

Les structures Conditionnelles et les boucles

Page 46: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 46

Besoin a des concepts de ruptures de séquence

Rare les algorithme qui peuvent se décrire uniquement par un enchaînement séquentiel d’opération élémentaire

On a besoin a des concept de rupture de séquence comme les test et les boucles

Ex : un algorithme qui résout une

équation de deuxième degré un algorithme qui calcule une série

numérique

AlgorithmeCalcul_Aire

Constantes

Pi = 3,14159

Variables

Rayon, Surface : réels

Début

lire (Rayon)

Surface := Pi * (Rayon)2

écrire (Surface)

Fin

Page 47: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 47

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)

Les itérations : consiste a exécuté un bloc d’instructions un certain nombre de fois (Ex : calcul d’une suite numérique)

Les boucles conditionnelles : consiste a exécuté un bloc d’instructions un certain nombre de fois si la condition est vérifier (Ex : On veut

afficher le 100 premiers nombres :. Tant que i est plus petit que 100, afficher la valeur de i).

Page 48: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 48

Tests: instructions conditionnelles (1) Les instructions conditionnelles servent à n'exécuter une instruction ou une

séquence d'instructions que si une condition est vérifiée

On utilisera la forme suivante: Si Si condition alors alors

instruction ou suite d'instructions1

SinonSinon

instruction ou suite d'instructions2

FinsiFinsi

• la condition ne peut être que vraie ou fausse

• si la condition est vraie, se sont les instructions1 qui seront exécutées

• si la condition est fausse, se sont les instructions2 qui seront exécutées

• la condition peut être une condition simple ou une condition composée de plusieurs conditions

Page 49: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 49

Tests: instructions conditionnelles (2) La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que

la condition est fausse, aucun traitement n'est réalisé

• On utilisera dans ce cas la forme simplifiée suivante:

Si Si condition alors alors

instruction ou suite d'instructions1

FinsiFinsi

Page 50: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 50

Exemple (Si…Alors…Sinon)

Algorithme AffichageValeurAbsolue (version1)

Variable x : réel

DébutEcrire " 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)

FinsiFin

Page 51: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 51

Exemple (Si…Alors)

Algorithme AffichageValeurAbsolue (version2)

Variable x,y : réel

DébutEcrire " Entrez un réel : "

Lire (x)

y← x

Si x < 0 alors    y ← -x

FinsiEcrire ("la valeur absolue de ", x, "est:",y)

Fin

Page 52: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 52

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ébutEcrire " 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")

FinsiFin

Page 53: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 53

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)

• deux valeurs et deux seulement sont identiques parmi a, b et c :

(a=b) XOR (a=c) XOR (b=c)

L'évaluation d'une condition composée se fait selon des règles présentées généralement dans ce qu'on appelle tables de vérité

Page 54: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 54

Tables de vérité

C1 C2 C1 ET C2

VRAI VRAI VRAI

VRAI FAUX FAUX

FAUX VRAI FAUX

FAUX FAUX FAUX

C1 C2 C1 OU C2

VRAI VRAI VRAI

VRAI FAUX VRAI

FAUX VRAI VRAI

FAUX FAUX FAUX

C1 C2 C1 XOR C2

VRAI VRAI FAUX

VRAI FAUX VRAI

FAUX VRAI VRAI

FAUX FAUX FAUX

C1 NON C1

VRAI FAUX

FAUX VRAI

Page 55: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 55

Tests imbriqués Les tests peuvent avoir un degré quelconque d'imbrications

Si Si condition1 alors alors

Si Si condition2 alors alors

instructionsA

SinonSinon

instructionsB

FinsiFinsi

Sinon Sinon

Si Si condition3 alors alors

instructionsC

FinsiFinsi

FinsiFinsi

Page 56: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 56

Tests imbriqués: exemple (version 1)Variable n : entierDé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")

FinsiFinsi

Fin

Page 57: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 57

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é)

Page 58: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 58

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à.

Ecrivez un algorithme qui demande à l’utilisateur le nombre de photocopies effectuées, qui calcule et affiche le prix à payer

Page 59: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 59

Tests imbriqués: corrigé de l'exerciceVariables copies : entier

prix : réelDé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

Page 60: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 60

Tests imbriqués: Exercice 2

Écrire l’algorithme du traitement qui calcule le discriminant DELTA d’trinome du second degré AX2 + BX + C et qui, en fonction de son signe, calcule la ou les racines réelles du trinome ou afiche, si besoin est qu’il n’ya pas de racine réelle.

Les trois coefficients A, B et C seront saisis au clavier avant traitement.

Page 61: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 61

Tests imbriqués: corrigé de l'exercice 2 Variables

A, B, C, Delta, X1, X2 : réelsDébut

Lire (A, B, C)Delta ← B2 – 4 AC

Si (Delta < 0) Alors

     Ecrire (« le trinome n’a pas de racine réelle ») Sinon

Si (Delta > 0 AlorsX1 ← (-B + racine(delta)) / 2AX2 ← (-B - racine(delta)) / 2A

Ecrire (« le trinome possède deux racines réelles : », X1, X2)

     Sinon

X1 ← (-B ) / 2AEcrire (« le trinome possède une racine réelle : », X1)

     Finsi Finsi

Fin

Page 62: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 62

Algorithmique

Les boucles

Page 63: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 63

Les types de boucle

On distingue 2 types de boucles:

• Les boucles à compteur ou définie• On sait à l’avance combien de fois la boucle devra tourner et

une variable (le compteur ) compte les répétitions• Choisir 10 nombres au hasard. On fera dix fois l’opération choisir

un nombre au hasard.• Ex : la boucle Pour

• Les boucles à événement ou indéfinie• On ne sait pas à l’avance le nombre de fois que la boucle sera

exécutée.• Ça peut dépendre du nombre de données à traiter.• Ça peut dépendre du nombre d’essais que l’usager a effectués.• Ex : la boucle Tanque et la boucle jusqu’a

Page 64: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 64

Les boucles Tant que

TantQueTantQue (condition)

instructions

FinTantQueFinTantQuecondition instructions

Faux

Vrai

Page 65: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 65

Boucle Tant que : exemple simpleUn algorithme qui détermine le premier nombre entier N tel que la

somme de 1 à N dépasse strictement 100

Variables som, i : entierDebut

i ← 0

som← 0

TantQue (som <=100)

     i ← i+1

som ← som+i

FinTantQueEcrire (" La valeur cherchée est N= ", i)

Fin

Page 66: Cours d’algorithmique

Boucle Tant que : exemple

Algorithme Plus-Grand-Element: Retourne la plus grande valeur d’une liste

Entrée: n entiers S1,…, Sn

Sortie: grand contenant le plus grand élément

Algo plus-grand (S,n)

grand := S1;

i:=2;

Tant que i ≤ n Faire

Début Si Si > grand alors // une plus grande valeur a été trouvée

grand := Si;

i := i+1;

Fin

ecrire (grand)

Fin plus-grand;

Trace de l’algorithme:

n=4; S1= -2; S2=6; S3=5; S4=6

grand =-2 i = 2

grand = 6 i = 3

i = 4

i = 5

Page 67: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 67

Algorithme d’Euclide

Trouver le plus grand diviseur commun (pgcd) de deux entiers

Définition: q est un diviseur commun de m et n si q divise à la fois m et n (le reste de la division entière est 0)

Le pgdc de m et n est le plus grand entier q divisant à la fois m et n.

Exemple: pgcd(4, 6) = 2; pgcd(3,8) = 1; pgcd(9, 12) = 3;

Utile pour la simplification de fractions:9/12 = 3.3/4.3 = 3/4

Page 68: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 68

Trouver le PGCD de a et b

Exemple: pgcd(30, 105) 1ère méthode: Trouver tous les diviseurs de a et b, et trouver le

diviseur commun le plus grand• Diviseurs de 30: 1, 2, 3, 5, 6, 10, 15, 30• Diviseurs de 105: 1, 3, 5, 7, 15, 21, 35, 105 pgcd(30, 105) = 15

• 2ème méthode: la méthode d’Euclide• 105 = 30.3 + 15. Donc pgcd(105, 30) = pgcd(30,15)• 30 = 15.2 + 0. Donc pgcd(30, 15) = pgcd(15,0)• pgcd(15,0)=15

pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15

Page 69: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 69

Méthode d’Euclide : Algorithme

Soient r0, r1 deux entiers strictement positifs, tels que r0=r1.q+r2 avec 0≤r2<r1

Si r2 = 0, pgcd (r0, r1) = r1

Sinon, rediviser ri par ri+1 tant que ri+1 est différent de 0

Si rn est le premier reste nul, alorspgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1

Page 70: Cours d’algorithmique

Algorithme d’EuclideEntrée: a, b deux entiers positifs

Sortie: pgcd(a,b)

Procédure pgcd(a,b)

Tant que b <> 0 Faire

Début

diviser a par b: a = b.q+r, 0 ≤ r < b;

a:=b;

b:=r;

Fin

Retourner (a)

Fin pgcd

Trace de l’algorithme pour

a=504 et b=396

504 396

1108

a

b 396 108

372

a

b 108 72

136

a

b72 36

20

a

b

Page 71: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 71

Les boucles Pour

PourPour compteur allant deallant de initiale à à finale par paspas valeur du pas

instructions

FinPourFinPour

i n'a pas atteint finale instructions

Faux

Vrai

i ←initiale

i ← i + pas

Page 72: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 72

Les boucles PourRemarques :

CompteurCompteur est une variable de type entier (ou caractère). Elle doit être déclarée

PasPas est un entier qui peut être positif ou négatif. PasPas 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

Initiale et finaleInitiale 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 compteur

Page 73: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 73

Déroulement des boucles Pour1) La valeur initiale est affectée à la variable compteur

2) On compare la valeur du compteur et la valeur de finale :

a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas 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

b) Si compteur est <= à finale dans le cas d'un pas positif (ou si compteur est >= à finale pour un pas négatif), instructions seront exécutées

i. Ensuite, la valeur de compteur est incrémentée de la valeur du pas si pas est positif (ou décrémenté si pas est négatif)

ii. On recommence l'étape 2 : La comparaison entre compteur et finale est de nouveau effectuée, et ainsi de suite …

Page 74: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 74

Boucle Pour : exemple

Algorithme Plus-Grand-Element: Réécriture de l’algorithme précédent mais avec une boucle ``Pour’’

Entrée: n entiers S1,…, Sn Sortie: grand contenant le plus grand élément

Algo plus-grand (S,n)grand := S1; Pour i =1 à n Faire Si Si > grand alors // une plus grande valeur a été trouvée

grand := Si;ecrire (grand)Fin plus-grand;

Page 75: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 75

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 :

• perturbe le nombre d'itérations prévu par la boucle Pour

• rend difficile la lecture de l'algorithme

• présente le risque d'aboutir à une boucle infinie

Exepmle : Pour i allant de 1 à 5

i i -1 écrire(" i = ", i) 

Finpour

Page 76: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 76

Lien entre Pour et TantQueLa 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 Pour compteur allant deallant de initiale à à finale par paspas valeur du pas

instructions

FinPourFinPour

peut être remplacé par : compteur ← initiale

(cas d'un pas positif) TantQueTantQue compteur <= finale

instructions

compteur ← compteur+pas

FinTantQueFinTantQue

Page 77: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 77

Lien entre Pour et TantQue: exemple

Calcul de x à la puissance n avec la

boucle PourPour et la boucle TantQueTantQue

x : un réel non nul

n : entier positif ou nul

Page 78: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 78

Solution avec la boucle Pour

Variables x, puiss : réel

n, i : entier

DebutEcrire (" Entrez respectivement les valeurs de x et n ")

Lire (x, n)

puiss ← 1

Pour i allant de 1 à n

    puiss← puiss*x FinPour

Ecrire (x, " à la puissance ", n, " est égal à ", puiss)

Fin

Page 79: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 79

Solution avec la boucle Tant Que

Variables x, puiss : réel

n, i : entierDebutEcrire (" Entrez respectivement les valeurs de x et n ")

Lire (x, n)

puiss ← 1, i ← 1

TantQue (i<=n)

    puiss← puiss*x i ← i+1

FinTantQue

Ecrire (x, " à la puissance ", n, " est égal à ", puiss)

Fin

Page 80: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 80

Algorithme de la fonction factorielle : Exemple

Écrire deux algorithmes qui calculent pour un entier positif donné n la valeur n!, un de ces algorithmes doit utilisé la boucle Pour et l’autre la boucle Tanque

Entrée : n de type naturel

Sortie : factoriel (n) = 1*2*3*…..*(n-1)*n

Page 81: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 81

Algorithme de la fonction factorielle

Algorithme / tantqueCalcul factorielle 1

Variables

i, f, n : Naturel

Début

i ← 1

f ← 1 tant que (i < n)

i ← i+1

f ← f * i

Fin de tant que

écrire (f)

Fin

Algorithme / PourCalcul factorielle 2

Variables

i, f, n : Naturel

Début

f ← 1

pour i variant de 2 à n

f ← f * i

Fin pour

écrire (f)

Fin

Page 82: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 82

Algorithme de la recherche des nombres premiers : Exemple

Problème: Écrire l’algorithme estPremier, qui a partir d’un entier strictement positif donné, retourne le résultat booléen VRAI ou FAUX selon le nombre est premier ou non.

Procédure : pour déterminer si un entier m est un nombre premier. Il suffit de tester si m est divisible par un entier entre 2 et m/2• Ex : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,

41, 43, 47. (listes des nombres premier <=50)

Page 83: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 83

La boucle tantque en langage de programmation

Langage C et Java

while (condition) {

Bloc d’instructions;

}

corps_boucle

test

Langage Pascal

While condition Do

Begin

Bloc d’instructions;

End;

Page 84: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 84

La boucle Pour en langage de programmation

Langage C et Javafor (i=valeur initiale; i<= valeur finale; i++) {

Bloc d’instructions;

}

corps_boucle

incr

test

init

Langage PascalFor variable := valeur initiale To valeur finale Do

Begin

Bloc d’instructions

End;

Page 85: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 85

Détecter l’erreur dans les deux essaie tant que et pour

AlgorithmeEssai de tant que

Variables

n : entier

Début

n ← 15 tant que (n<>0)

écrire (n)

n ← n - 2

Fin de tant que

Fin

AlgorithmeEssai pour

Variables

K, N : entier

Début

n ← 200

pour K variant de 1 à n

écrire (K)

K ← n – 100

Fin pour

Fin

Page 86: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 86

Boucles imbriquées Les instructions d'une boucle peuvent être des instructions

itératives. Dans ce cas, on aboutit à des boucles imbriquéesboucles imbriquées

Exemple:Exemple: ExécutionExécution

Pour i allant de 1 à 5 OXOX

    Pour j allant de 1 à i OOXOOX

écrire("O") OOOXOOOX

FinPour OOOOXOOOOX

écrire("X") OOOOOXOOOOOX

FinPour

Page 87: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 87

La boucle Faire…Tant Que

• FaireInstruction(s)

Tant que (condition)

• doInstruction;

while (condition)

do{

f :=n;n--;

} while (n>1);

condition

Instruction(s) de la boucle

Vraie

FausseLa boucle s’exécute tant que la condition est vraie. La boucle cesse lorque la condition est fausse. À utiliser si l’on veut que la boucle soit exécutée au moins une fois

Page 88: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 88

Les boucles Répéter … jusqu’à …

RépéterRépéter

instructions

Jusqu'à Jusqu'à condition

Condition est évaluée après chaque itération

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)

condition

instructions

Vrai

Faux

Page 89: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 89

Boucle Répéter jusqu’à : exempleUn 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'à)

Variables som, i : entierDebut

som ← 0

i ← 0Répéter

     i ← i+1

som ← som+i

Jusqu'à ( som > 100)

Ecrire (" La valeur cherchée est N= ", i)

Fin

Page 90: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 90

Choix d'un type de boucle Si on peut déterminer le nombre d'itérations avant l'exécution de la

boucle, il est plus naturel d'utiliser la boucle Pour

S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution de la boucle, on fera appel à l'une des boucles TantQue ou répéter jusqu'à

Pour le choix entre TantQue et jusqu'à :

• Si on doit tester la condition de contrôle avant de commencer les instructions de la boucle, on utilisera TantQue

• 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 faire tanque

Page 91: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 91

Algorithme de la racine carrée : Exercice

Problème: Écrire l’algorithme qui calcul la racine carrée d’un nombre sans avoir recours a la fonction mathématique Racine Carrée prédéfinie.

Procédure : si n est le nombre dont on souhaite extraire la racine carrée. On construit une suite de nombres Xi dont le premier vaut 1 et dont le terme générale a pour expression :

Xi = (n/xi-1 + xi-1) / 2

Rq : Cette suite converge systématiquement vers racarrée (n)

Page 92: Cours d’algorithmique

2006/2007

Algorithme de la racine carrée

Algorithme Racine Carrée (RC)Variables

n, x : réels

i, max : entier

Début

Lire (n)

Lire (max)

x ← 1 pour i variant de 1 à max

écrire (n)

x ← ((n/x) + x) / 2

Fin de pour

Fin

Page 93: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 93

MAPLE

Présentation générale et Présentation générale et syntaxe des instructions de syntaxe des instructions de

basebase

Page 94: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 94

Maple Maple est un logiciel de calcul formel et numérique

• Calcul formel :Calcul formel : calcul sur des expressions littérales sans évaluation numérique (Maple peut calculer des dérivées, des intégrales, des développements limités, …)

> int(1-x+x^3,x);

> taylor(sin(x),x=0,6);

• Calcul numérique :Calcul numérique : calcul sur des valeurs (avec une grande précision)

> 30!; 265252859812191058636308480000000

> evalf(sqrt(2),50); 1.414213562373095048801688 7242096980785696718753769

)O(x120

x

6

x-x 6

53

4

x

2

x-x

42

Page 95: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 95

Maple : quelques fonctions

abs (n) :renvoie la valeur absolue de son argument n

• ex: >abs(-4)

• 4 Ifactor(n) : donne la décomposition de n en facteur premiers

• Ex : >ifactor(1998)

• (2)(3)3(37) Irem(a,b) : renvoie le reste de la division entiere de a par b

• Ex: >Irem(5,2)

• 1 Sum(f(k),k=a..b) : calcul la sommes de f(k) de a jusqu’à b Product(f(k),k=a..b) : calcul le produit de f(k) de a jusqu’au b

Page 96: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 96

Maple : les packages Maple dispose d'un certain nombre de packages packages (librairies). Chacun

de ces packages est spécialisé dans un traitement particulier. Comme exemples de ces packages, on a :

• linalg : linalg : pour l'algèbre linéaire

• plots :plots : pour le tracé des courbes

• geometry : geometry : pour la géométrie

• student :student : ce package est conçu pour assister l'enseignement des mathématiques de base (intéressant pour les étudiants)

Pour utiliser certaines commandes et fonctions de Maple, il faut d'abord charger le package qui les contient avec la commande with with :

• with with (NomLibrairie) : charge le package NomLibrairie

• with with (NomLib, NomCmd) : charge la commande NomCmd du package NomLib

Page 97: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 97

Maple : Généralités

Chaque instruction Maple doit se terminer par ;; ou ::

• Si l'instruction se termine par ;; Maple l'exécute et affiche le résultat

• Si l'instruction se termine par :: Maple l'exécute sans afficher le résultat

Pour introduire un texte en tant que commentairecommentaire, il suffit de précéder la ligne par # # ( le texte est alors ignoré par Maple)

Maple fait la distinction entre les lettres majuscules et minuscules (SMI, Smi, smI et smi sont différents pour Maple)

Page 98: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 98

Maple : nom et type des variables• Le nom d'une variablenom d'une variable peut être une combinaison de lettres et de

chiffres, mais qui commence par une lettre, qui ne contient pas d'espaces et qui est différente des mots réservés (commandes Maple)

• Le type d'une variabletype d'une variable est attribué automatiquement par Maple selon le contexte (exemple : si A prend la valeur 2, A sera de type integerinteger, si A prend la valeur , A sera de type floatfloat)

• Les principaux types prédéfinis en Maple sont : integerinteger (entier), float float (réel), fractionfraction (rationnel), complex complex (complexe), stringstring (chaîne de caractères), booleanboolean (booléen), arrayarray (tableau), matrixmatrix (matrice)

• Maple offre quelques commandes relatifs aux types : ex : whattype whattype(var) donne le type de la variable var

2

Page 99: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 99

Maple : l'affectation Le symbole d'affectationaffectation ← se note en Maple avec :=:=

exemple : i:= 1; j:= i+1;

Attention : Attention : en Maple a=b a=b n'est pas une instruction d'affectation, mais une expression de type logique (booleanboolean) qui est vrai si les deux valeurs a et b sont égales et fausse sinon

Maple n'évalue l'expression logique a=b que si on le demande explicitement. Pour cela, on utilisera la commande evalbevalb

exemple : a:= 1; b:= 2;

> a=b; 1=2

> evalb (a=b); false

Page 100: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 100

Maple : instructions d'entrées-sorties print(print(var) ) permet d'afficher la valeur de la variable var (c'est l'équivalent de

écrireécrire en pseudo code). Si var n'a pas de valeur, Maple affiche le nom de la

variable

print(`print(`chaine`)`) permet d'afficher la chaîne de caractères qui est entre ` `` `

> a:=1: b:=2: print(`a vaut`,a, `et b vaut`,b);

a vaut ,1 et b vaut, 2

readstatreadstat permet de saisir des données à partir du clavier (c'est l'équivalent de lirelire en pseudo code)

• Syntaxe:Syntaxe: var:=readstatreadstat(`texte`) Maple affiche le texte entre ` ` et attend qu'on entre une valeur au clavier qui doit être suivie de ; ou :

> n:=readstat(`entrez la valeur de n : `);

Remarque : il existe d'autres commandes pour les entrées-sorties en Maple

Page 101: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 101

Maple : syntaxe des tests Écriture en pseudo codeÉcriture en pseudo code Traduction en MapleTraduction en Maple

SiSi condition alors alors if if condition then then instructions instructions

FinsiFinsi fi;

SiSi condition alorsalors ifif condition thenthen

instructions 1 instructions1

SinonSinon elseelse

instructions2 instructions2

FinsiFinsi fi;fi;

Page 102: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 102

Maple : syntaxe des boucles Écriture en pseudo codeÉcriture en pseudo code Traduction en MapleTraduction en Maple

TantQueTantQue condition while while condition do do instructions instructions

FinTantQueFinTantQue odod;

Pour Pour i allant de allant de v1 à à v2v2 par pas pas p forfor i fromfrom v1 to v2 by p do

instructions instructions

FinPourFinPour od;od;

Page 103: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 103

Algorithmique

Fonctions et procéduresFonctions et procédures

Page 104: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 104

Fonctions et procédures

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

Cette séquence d’instructions sera définie dans un sous-programme qui peut prendre la forme d’une procédure ou d’une fonction

De plus, un programme est presque toujours décomposable en modules qui peuvent alors être définis de manière indépendante.

Cela permet de modifier éventuellement un module sans pour autant changer le corps du programme et de rendre le programme plus compréhensible (lisibilité)

Un programme est alors un ensemble de procédures / fonctions

Page 105: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 105

Notion de bloc dans un programme

Page 106: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 106

Fonctions

Page 107: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 107

Forme d’une Fonction Une fonction s'écrit en dehors du programme principal sous la forme

FonctionFonction identificateur (paramètres et leurs types) : type_fonction

Instructions constituant le corps de la fonctionretourneretourne …

FinFonctionFinFonction

type de fonction : le type du résultat renvoyé par la fonction Identificateur : le nom que l’on a donné à la fonction liste de paramètres : la liste des paramètres formels donnés en entrée

avec leurs types corps de la fonction : un bloc d’instructions, pouvant comprendre la

déclaration des « variables locales » a la fonctionsRemarque : le corps de la fonction doit comporter une instruction de la forme :

return(expression); où expression est du type du résultat de la fonction

Page 108: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 108

Exemple de programme / fonction

Page 109: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 109

Exemple de fonction / fonction

Page 110: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 110

Fonctions : exemples La fonction SommeCarre suivante calcule la somme des carrées

de deux réels x et y :

FonctionFonction SommeCarre (x : réel, y: réel ) : réel

variable z : réel

z ←x^2+y^2

retourneretourne (z)

FinFonctionFinFonction

La fonction Pair suivante détermine si un nombre est pair :

FonctionFonction Pair (n : entier ) : booléen

retourneretourne (n%2=0)

FinFonctionFinFonction

Paramètres formels

Page 111: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 111

Utilisation des fonctions L'utilisation d'une fonction se fera par simple écriture de son nom

dans le programme principale. Le résultat étant une valeur, devra être affecté ou être utilisé dans une expression, une écriture, ...

Exepmle : Exepmle : Algorithme exepmleAppelFonctionAlgorithme exepmleAppelFonction

variables z : réel, b : booléen

DébutDébut

b ←Pair(3)

z ←5*SommeCarre(7,2)+1

écrire("SommeCarre(3,5)= ", SommeCarre(3,5))

FinFin

Lors de l'appel Pair(3) le paramètre formelparamètre formel n est remplacé par le paramètre effectifparamètre effectif 3

Page 112: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 112

Subdivision d’un problème en un ensemble de fonctions

Problème: Trouver le plus petit nombre premier strictement supérieur à un entier positif donné n

• Utiliser l’algorithme qu’on a déjà fait estPremier (le plus petit nombre premier p supérieur à un entier n) en tant que fonction.

• Fait appel a cette fonction a l’intérieur de l’algorithme premier-plus-grand

Page 113: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 113

La fonction de recherche des nombres premiers

FonctionFonction estPremier

FonctionFonction est-premier (m : entier) : booléen

Pour i := 2 à ENT(m/2) Faire

Si m mod i = 0 alors // i divise m

Retourne (Faux)

Retourne (Vrai)

FinFonctionFinFonction est-premier

Page 114: Cours d’algorithmique

Entrée: Un entier positif m

Sortie: Vrai si m est premier, Faux si non.

Fonction est-premier (m)

Pour i := 2 à ENT(m/2) Faire

Si m mod i = 0 alors // i divise m

Retourne (Faux)

Retourne (Vrai)

Fin est-premier

Entrée: Un entier positif n

Sortie: Le plus petit nb premier m > n

Algorithme premier-plus-grand (n)

m := n+1;

Tant que est-premier(m) est Faux Faire

m := m+1;

Retourne(m)

Fin est-premier

Trace de premier-plus-grand pour n=8:

m = 9

Trace de est-premier pour m=9:

i=2 9 mod 2 = 19 mod 3 = 0i=3

m = 10

Trace de est-premier pour m=10:

10 mod 2 = 0

m = 11

Trace de est-premier pour m=11:

11 mod 2 = 1

i=5 11 mod 5 = 1

Page 115: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 115

Procèdures Dans certains cas, on peut avoir besoin de répéter une tache dans plusieurs

endroits du programme, mais que dans cette tache on ne calcule pas de résultats ou qu'on calcule plusieurs résultats à la fois

Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédureprocédure

Une procédureprocédure est un sous-programme semblable à une fonction mais qui ne retourne rienne retourne rien

Une procédure s'écrit en dehors du programme principal sous la forme :

ProcédureProcédure nom_procédure (paramètres et leurs types)

Instructions constituant le corps de la procédure

FinProcédureFinProcédure Remarque : une procédure peut ne pas avoir de paramètres

Page 116: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 116

Appel d'une procédure L'appel d'une procédure, se fait dans le programme principale ou dans une

autre procédure par une instruction indiquant le nom de la procédure :

ProcédureProcédure exemple_proc (…) …

FinProcédure FinProcédure

Algorithme exepmleAppelProcédureAlgorithme exepmleAppelProcédure

DébutDébut

exemple_proc (…) …

FinFin

Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la procédure appelée ou l'utiliser dans une expression. L'appel d'une procédure est une instruction autonome

Page 117: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 117

Paramètres d'une procédure Les paramètres servent à échanger des données entre le programme

principale (ou la procédure appelante) et la procédure appelée

Comme avec les fonctions :

• Les paramètres placés dans la déclaration d'une procédure sont appelés paramètres formelsparamètres formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement)

• Les paramètres placés dans l'appel d'une procédure sont appelés paramètres paramètres effectifseffectifs. ils contiennent les valeurs pour effectuer le traitement

Le nombre de paramètres effectifs doit être égal au nombre de paramètres formels. L'ordre et le type des paramètres doivent correspondre

Page 118: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 118

Transmission des paramètresIl existe deux modes de transmission de paramètres dans les langages de

programmation :

La transmission par valeur La transmission par valeur : les valeurs des paramètres effectifs sont affectées aux paramètres formels correspondants au moment de l'appel de la procédure. Dans ce mode le paramètre effectif ne subit aucune modification

La transmission par adresse (ou par référence) La transmission par adresse (ou par référence) : les adresses des paramètres effectifs sont transmises à la procédure appelante. Dans ce mode, le paramètre effectif subit les mêmes modifications que le paramètre formel lors de l'exécution de la procédure

• Remarque : Remarque : le paramètre effectif doit être une variable (et non une valeur) lorsqu'il s'agit d'une transmission par adresse

En pseudo-code, on va préciser explicitement le mode de transmission dans la déclaration de la procédure

Page 119: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 119

Transmission des paramètres : exemplesProcédureProcédure incrementer1 (xx : entier par valeur, par valeur, yy : entier par adressepar adresse)

x ← x+1

y ← y+1

FinProcédure FinProcédure

Algorithme Test_incrementerAlgorithme Test_incrementer1

variables n, m : entier

Début Début

n ← 3

m ← 3

incrementer1(n, m) résultat :résultat :

écrire (" n= ", n, " et m= ", m) n=3 et m=4n=3 et m=4

FinFin

Remarque :Remarque : l'instruction l'instruction x ← x+1 n'a pas de sens avec un passage par valeur

Page 120: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 120

Transmission par valeur, par adresse : exemples

Procédure qui calcule la somme et le produit de deux entiers :Procédure qui calcule la somme et le produit de deux entiers :ProcédureProcédure SommeProduit (xx,y: entier par valeur, par valeur, som, prodsom, prod : entier par adressepar adresse)

som ← x+y

prod ← x*y

FinProcédure FinProcédure

Procédure qui échange le contenu de deux variabales :Procédure qui échange le contenu de deux variabales :ProcédureProcédure Echange (xx : réel par adresse, par adresse, yy : réel par adressepar adresse)

variables z : réel

z ← x

x ← y

y ← z

FinProcédureFinProcédure

Page 121: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 121

Variables locales et globales (1) On peut manipuler 2 types de variables dans un module (procédure ou

fonction) : des variables localesvariables locales et des variables globalesvariables globales. Elles se distinguent par ce qu'on appelle leur portée portée (leur "champ de définition", leur "durée de vie")

Une variable localevariable 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

Une variable globalevariable globale est connue par l'ensemble des modules et le programme principale. Elle est définie durant toute l’application et peut être utilisée et modifiée par les différents modules du programme

Page 122: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 122

Variables locales et globales (2) La manière de distinguer la déclaration des variables locales et globales

diffère selon le langage

• En général, les variables déclarées à l'intérieur d'une fonction ou procédure sont considérées comme variables locales

• En pseudo-code, on va adopter cette règle pour les variables locales et on déclarera les variables globales dans le programme principale

• Conseil :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

Page 123: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 123

Fonctions et procédures en Maple (1) En Maple, il n'y a pas de distinction entre les notions de fonction et

procédure. Les deux se déclarent de la même façon comme suit :

identificateur:= proc proc (paramètres)

locallocal ;;

global global ;;

instructions

résultat

end;end;

Identificateur est le nom de la fonction ou de la procédure

En Maple, on précise explicitement si les variables sont locales ou globales par les mots clés locallocal et globalglobal

n1 l ..., ,l

k1 g ..., ,g

Page 124: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 124

Fonctions et procédures en Maple (2) Une variable globale est connue en dehors de la procédure où elle a été

définie dans l'ensemble de la session de calcul

Les paramètres, les variables locales et globales sont facultatifs, ils peuvent ne pas figurer dans la déclaration

Une procédure Maple peut rendre un seul résultat (comme une fonction), plusieurs résultats ou aucun résultat

Pour rendre plusieurs résultats, on peut utiliser une liste, un ensemble, un tableau (on verra ces structures la séance prochaine)

Le résultat de la procédure est donné soit implicitement par la dernière instruction, soit par la commande RETURN

RETURN ( ) arrête le déroulement de la procédure et renvoie les valeurs de sous forme d'une séquencen1 v, ... ,v

n1 v, ... ,v

Page 125: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 125

Procédures Maple : remarques Maple interdit la modification de la valeur d'un paramètre à

l'intérieur d'une procédure (pas de transmission par adresse)

Après end;end; Maple affiche le texte de la procédure. Dans le cas où endend est suivi de :: rien n'est affiché

> carre:=proc(x,y)

> x^2+y^2;

> end; carre:=proc (x, y) x^2+y^2 end proc

En Maple, une procédure peut être appelée sans être affectée. Elle peut aussi être affectée à une variable > carre(1,2); 55

> a:=carre(3,3); a := 18a := 18

Page 126: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 126

Procédures Maple : exemples (1)

> exemple:=proc(a,b)

> local c,d,e;

> c:=a+b; d:=a-b; e:=a*b;

> RETURN(c,d,e);

> d:=c+e;

> end:

> exemple(4,7); 11, -3, 28

Remarque : l'exécution s'arrête après RETURN. L'instruction d:=c+e n'est pas exécutée

Page 127: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 127

Procédures Maple : exemples (2)Exemple : procédure qui calcule la somme des n premiers entiers

> somme:=proc()

> local n,i,som;

> som:=0;

> n:=readstat(`entrez la valeur de n : `);

> for i from 1 to n do

> som:=som+i;

> od;

> print(`somme=`,som);

> end;

> somme(); sur l'écran apparaît le message :entrez la valeur de n : si on entre 3, on obtient somme=,6

Page 128: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 128

Algorithmique

La Récursivité La Récursivité

Page 129: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 129

Récursivité

Définition :Un algorithme est dit récursif lorsqu’il est défini en fonction de lui-même.

Récursivité simpleLa fonction puissance x xn. Cette fonction peut être définie récursivement :

Page 130: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 130

Types de Récursivité

• Récursivité multiple : Une définition récursive peut contenir plus d’un appel récursif. Nous voulons calculer ici les combinaisons Cn

p en se servant de la relation de Pascal

• Récursivité mutuelle : Des définitions sont dites mutuellement récursives si elles dépendent les unes des autres. Ça peut être le cas pour la définition de la parité :

Page 131: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 131

Itération et Récursivité : Exemple

Calcul fact,Variables N,f : entierDebut f 1 tantque (n > 1) f f * (n−1); fintantqueEcrire(f)End;

Calcul de factoriel :

Version itérative

Page 132: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 132

Itération et Récursivité : Exemple

Un module (fonction ou procédure) peut s'appeler lui-même: on dit que c'est un module récursif

Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la récursivité

FonctionFonction fact (n : entier ) : entierSi (n=0) alors

retourneretourne (11)Sinon retourneretourne (n*fact(n-1)n*fact(n-1))Finsi

FinFonctionFinFonction

Version récursive

Page 133: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 133

Liste des appels de la fonction factoriel (cas du n=4)

Version récursive Version itérative

Page 134: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 134

Récursivité : observations

Une fonction est définie récursivement lorsque la valeur de la fonction en un point x est définie par rapport à sa valeur en un point strictement « plus petit »

De ce fait, le calcul se fait de proche en proche, jusqu’à atteindre le plus petit élément pour lequel il faut une valeur immédiate (c’est-à-dire non récursive)

Le corps d’une fonction récursive doit toujours exprimer un choix, soit par une expression conditionnelle, soit par une définition par cas

Au moins un cas terminal rend une valeur qui n’utilise pas la fonction définie

Page 135: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 135

Fonctions récursives : exercice

La version itérative qui calcule la somme des n premier nombres entier :

Écrivez une fonction récursive

Page 136: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 136

Fonctions récursives : exercice

La version récursive

Page 137: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 137

Fonctions récursives : exercice Ecrivez une fonction récursive (puis itérative) qui calcule le terme n

de la suite de Fibonacci définie par : U(0)=U(1)=1

U(n)=U(n-1)+U(n-2)

FonctionFonction Fib (n : entier ) : entier

Variable res : entier

Si (n=1 OU n=0) alors

res ←1

Sinon

res ← Fib(n-1)+Fib(n-2)

Finsi

retourneretourne (res)

FinFonctionFinFonction

Page 138: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 138

Fonctions récursives : exercice (suite) Une fonction itérative pour le calcul de la suite de Fibonacci :

FonctionFonction Fib (n : entier ) : entier

Variables i, AvantDernier, Dernier, Nouveau : entier

Si (n=1 OU n=0) alors retourneretourne (1)

Finsi

AvantDernier ←1, Dernier ←1

Pour i allant de 2 à n

Nouveau← Dernier+ AvantDernier

AvantDernier ←Dernier

Dernier ←Nouveau

FinPour

retourneretourne (Nouveau)

FinFonctionFinFonction Remarque: la solution récursive est plus facile à écrire

Page 139: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 139

Algorithmique

Les tableauxLes tableaux

Page 140: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 140

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

Le seul moyen dont nous disposons actuellement consiste à déclarer 30 variables, par exemple N1, …, N30N1, …, N30. Après 30 instructions lire, on doit écrire 30 instructions Si pour faire le calcul

nbre nbre ← 0← 0

Si (N1 >10) alors Si (N1 >10) alors nbre nbre ←nbre+1 FinSi←nbre+1 FinSi

……..

Si (N30>10) alors Si (N30>10) alors nbre nbre ←nbre+1 FinSi←nbre+1 FinSi

c'est lourd à écrire Heureusement, les langages de programmation offrent la possibilité de

rassembler toutes ces variables dans une seuleune seule structure de donnéestructure de donnée appelée tableautableau

Page 141: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 141

Tableaux Un tableautableau est un ensemble d'éléments de même type désignés par un

identificateur unique

Une variable entière nommée indiceindice permet d'indiquer la position d'un élément donné au sein du tableau et de déterminer sa valeur

La déclarationdéclaration d'un tableau s'effectue en précisant le typetype de ses éléments et sa dimensiondimension (le nombre de ses éléments)

• En pseudo code :

variable tableautableau identificateur[[dimensiondimension] : ] : typetype

• Exemple :

variable tableautableau notes[[3030] : réel] : réel

On peut définir des tableaux de tous types : tableaux d'entiers, de réels, de caractères, de booléens, de chaînes de caractères, …

Page 142: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 142

Tableaux : remarques L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple,

notes[i]notes[i] donne la valeur de l'élément i du tableau notes

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]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.

• Par exemple, quand on déclare un tableau comme paramètre d'une procédure, on peut ne préciser sa dimension qu'au moment de l'appel

• 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

Page 143: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 143

Tableaux : exemples (1) Pour le calcul du nombre d'étudiants ayant une note supérieure à

10 avec les tableaux, on peut écrire :

Variables i ,nbre : entier

tableautableau notes[30] : ] : réel

DébutDébutnbre ← 0

PourPour ii allant de 0 à 29 SiSi (notes[i]notes[i] >10) alors

nbre ←nbre+1

FinSiFinSi

FinPourFinPour

écrire ("le nombre de notes supérieures à 10 est : ", nbre)

FinFin

Page 144: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 144

Tableaux : saisie et affichage Procédures qui permettent de saisir et d'afficher les éléments d'un tableau :

ProcédureProcédure SaisieTab(n : entier par valeur, tableautableau T : réel par référence ) variable i: entier

PourPour i allant de 0 à n-1     écrire ("Saisie de l'élément ", i + 1)

     lire (T[i] )

FinPourFinPour

Fin ProcédureFin Procédure

ProcédureProcédure AfficheTab(n : entier par valeur, tableautableau T : réel par valeur ) variable i: entier

PourPour i allant de 0 à n-1     écrire ("T[",i, "] =", T[i])

FinPourFinPour

Fin ProcédureFin Procédure

Page 145: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 145

Tableaux : exemples d'appel Algorithme principale où on fait l'appel des procédures SaisieTab et

AfficheTab :

Algorithme TableauxAlgorithme Tableaux

variable p : entier

tableautableau A[10] : : réel

DébutDébut

p ← 10

SaisieTab(p, A)

AfficheTab(p,A)

FinFin

Page 146: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 146

Tableaux : fonction longueurLa plus part des langages offrent une fonction longueurlongueur qui donne la dimension

du tableau. Les procédures Saisie et Affiche peuvent être réécrites comme suit :

ProcédureProcédure SaisieTab( tableautableau T : réel par référence ) variable i: entier

PourPour i allant de 0 à longueur(T)-longueur(T)-1     écrire ("Saisie de l'élément ", i + 1)

     lire (T[i] )

FinPourFinPour

Fin ProcédureFin Procédure

ProcédureProcédure AfficheTab(tableautableau T : réel par valeur ) variable i: entier

PourPour i allant de 0 à longueur(T)longueur(T)-1     écrire ("T[",i, "] =", T[i])

FinPourFinPour

Fin ProcédureFin Procédure

Page 147: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 147

Tableaux : syntaxe Maple En Maple, un tableau se définit en utilisant le type arrayarray comme suit :

identificateur:= array (a..b)array (a..b)

• Identificateur est le nom du tableau

• a et b sont les bornes de l'indice du tableau

Il est possible d'entrer directement toutes les valeurs d'un tableau.

Exemple: > A:=array(1..4,[5,8,1,7]);> A:=array(1..4,[5,8,1,7]);

Il est également possible de les entrer un par un comme suit :

Exemple : > T:=array(1..3);> T:=array(1..3);> T[1]:=1: T[2]:=3: T[3]:=5:> T[1]:=1: T[2]:=3: T[3]:=5:

Pour afficher tous les éléments d'un tableau, il suffit d'utiliser la commande print > print(T); > print(T); [1, 3, 5][1, 3, 5]

Page 148: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 148

Tableaux en malpe : exemple Une procédure qui calcule la moyenne des éléments d'un tableau :

> moyenne:=proc(n,T)

> local i,s;

> s:=0;

> for i from 1 to n do

> s:=s+T[i];

> od;

> end;

> A:=array(1..4,[5,8,1,7]);

> moyenne(4,A); résultat : 21/4

Page 149: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 149

Tableaux à deux dimensions Les langages de programmation permettent de déclarer des

tableaux dans lesquels les valeurs sont repérées par deux indicesdeux indices. Ceci est utile par exemple pour représenter des matrices

En pseudo code, un tableau à deux dimensions se déclaredéclare ainsi :

variable tableau tableau identificateur[[dimension1dimension1] [] [dimension2dimension2] : type] : type

• Exemple : une matrice A de 3 lignes et 4 colonnes dont les éléments sont réels

variable tableau tableau A[3][4] : réel[3][4] : réel

A[i][j]A[i][j] permet d'accéder à l’élément de la matrice qui se trouve à l’intersection de la ligne i et de la colonne j

Page 150: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 150

Exemples : lecture d'une matrice Procédure qui permet de saisir les éléments d'une matrice :

ProcédureProcédure SaisieMatrice(n : entier par valeur, m : entier par valeur ,tableautableau A : réel par référence )

DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1écrire ("saisie de la ligne ", i + 1)

PourPour 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])

FinPourFinPour

FinPourFinPour

Fin ProcédureFin Procédure

Page 151: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 151

Exemples : affichage d'une matrice Procédure qui permet d'afficher les éléments d'une matrice :

ProcédureProcédure AfficheMatrice(n : entier par valeur, m : entier par valeur ,tableautableau A : réel

par valeur )DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1PourPour j allant de 0 à m-1

     écrire ("A[",i, "] [",j,"]=", A[i][j])

FinPourFinPour

FinPourFinPour

Fin ProcédureFin Procédure

Page 152: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 152

Exemples : somme de deux matrices Procédure qui calcule la somme de deux matrices :

ProcédureProcédure SommeMatrices(n, m : entier par valeur,

tableautableau A, B : réel par valeur , tableautableau C : réel par référence )DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1PourPour j allant de 0 à m-1

     C[i][j] ← A[i][j]+B[i][j]

FinPourFinPour

FinPourFinPour

Fin ProcédureFin Procédure

Page 153: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 153

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 MatricesAlgorithme Matrices

variables tableautableau M1[3][4],M2 [3][4],M3 [3][4] : : réel

DébutDé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)

FinFin

Page 154: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 154

Matrices : syntaxe Maple Pour définir une matrice en Maple, on peut utiliser le type arrayarray ou le type

matrixmatrix comme suit :

identificateur:= array (a1..b1, a2..b2)array (a1..b1, a2..b2)

identificateur:= matrix(n, m)matrix(n, m)

• a1 et b1 sont les bornes du premier indice du tableau

• a2 et b2 sont les bornes du deuxième indice du tableau

• n est le nombre de lignes et m le nombre de colonnes

Il est possible d'entrer directement toutes les valeurs d'une matrice

Exemple: > A:=matrix(2, 3, [ [7,0,1], [2,4,3]] );> A:=matrix(2, 3, [ [7,0,1], [2,4,3]] );

Le type matrixmatrix est disponible dans le package linalgpackage linalg. Il faut donc charger ce package avec la commande with(linalg) with(linalg) avant d'utiliser ce type

Page 155: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 155

Tableaux : trouver l’erreur

Algorithme 1Essai de tableau 1

Variables

i : entier

Tab(10) : tableau d’entiers

Début

tant que (i <= 10)

lire tab(i)

i ← i+1

Fin de tant que

Fin

Algorithme 2Essai de tableau 2

Variables

i, x : entiers

Tab(10) : tableau d’entiers

Début

pour i variant de 1 à 10

Si Tab(i+1) < Tab(i) alors

permute Tab(i), Tab(i+1)

Fin de Si

Fin de pour

Fin

Page 156: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 156

Tableaux : Exemple d’exercice

Écrire l’algorithme du traitement qui permet de saisir 10 nombres entiers dans un tableau à une dimension, puis qui recherche et affiche la valeur minimale entrée dans un tableau. L’affichage mentionnera également l’indice auquel se trouve ce minimum.

Page 157: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 157

Algorithme recherche MiniRecherche 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

Page 158: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 158

Tableaux : 2 problèmes classiques

Recherche d’un élément dans un tableauRecherche d’un élément dans un tableau

• Recherche séquentielle

• Recherche dichotomique

Tri d'un tableauTri d'un tableau

• Tri par sélection

• Tri rapide

Page 159: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 159

Recherche séquentielle Recherche de la valeur x dans un tableau T de N éléments :

Variables i: entier, Trouvé : booléen…

i←0 , Trouvé ← FauxTantQue (i < N) ET (Trouvé=Faux)  Si (T[i]=x) alors          Trouvé ← Vrai

Sinon

i←i+1

    FinSiFinTantQue

Si Trouvé alors // c'est équivalent à écrire Si Trouvé=Vrai alors

écrire ("x appartient au tableau")Sinon écrire ("x n'appartient pas au tableau")FinSi

Page 160: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 160

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

Fonction Recherche(x : réel, N: entier, tableau T : réel ) : booléen

Variable i: entier

Pour i allant de 0 à N-1  Si (T[i]=x) alors          retourne (Vrai)

FinSiFinPour

retourne (Faux)

FinFonction

Page 161: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 161

Notion de complexité d'un algorithme Pour évaluer l’efficacitéefficacité d'un algorithme, on calcule sa complexitécomplexité

Mesurer la complexitécomplexité revient à quantifier le tempstemps d'exécution et l'espace mémoiremémoire nécessaire

Le temps d'exécution est proportionnel au nombre des opérationsnombre des opérations effectuées. Pour mesurer la complexité en temps, on met en évidence certaines opérations fondamentales, puis on les compte

Le nombre d'opérations dépend généralement du nombre de données nombre de données à traiter. Ainsi, la complexité est une fonction de la taille des données. On s'intéresse souvent à son ordre de grandeurordre de grandeur asymptotique

En général, on s'intéresse à la complexité complexité dans le pire des cas le pire des cas et à la complexité moyenne complexité moyenne

Page 162: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 162

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

Si x n’est pas dans le tableau, on effectue 3N tests : on répète N fois les tests (i < N), (Trouvé=Faux) et (T[i]=x)

La complexitécomplexité dans le pire des cas est d'ordre Nd'ordre N, (on note O(N)O(N))

Pour un ordinateur qui effectue 106 tests par seconde on a :

N 103 106 109

temps 1ms 1s 16mn40s

Page 163: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 163

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

Principe :Principe : diviser par 2 le nombre d'éléments dans lesquels on cherche la valeur x à chaque étape de la recherche. Pour cela on compare x avec T[milieu] :

• Si x < T[milieu], il suffit de chercher x dans la 1ère moitié du tableau entre (T[0] et T[milieu-1])

• Si x > T[milieu], il suffit de chercher x dans la 2ème moitié du tableau entre (T[milieu+1] et T[N-1])

Page 164: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 164

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

    FinSiFinSi

FinTantQue

Si Trouvé alors écrire ("x appartient au tableau")

Sinon écrire ("x n'appartient pas au tableau")

FinSi

Page 165: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 165

Exemple d'exécution Considérons le tableau T :

Si la valeur cherché est 20 alors les indices inf, sup et milieu vont évoluer comme suit :

Si la valeur cherché est 10 alors les indices inf, sup et milieu vont évoluer comme suit :

4 6 10 15 17 18 24 27 30

inf 0 5 5 6

sup 8 8 5 5

milieu 4 6 5

inf 0 0 2

sup 8 3 3

milieu 4 1 2

Page 166: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 166

Recherche dichotomique : complexité La complexité dans le pire des cas est d'ordre

L'écart de performances entre la recherche séquentielle et la recherche

dichotomique est considérable pour les grandes valeurs de N

• Exemple: au lieu de N=1milion ≈220 opérations à effectuer avec une recherche séquentielle il suffit de 20 opérations avec une recherche dichotomique

Nlog 2

Page 167: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 167

Algorithmique

Les méthodes de TrisLes méthodes de Tris

Page 168: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 168

Tris d’un tableau

La méthode de tri

Page 169: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 169

Les algorithmes de Tri

Il existe plusieurs algorithmes connus pour trier les éléments d’un tableau : • Tris élémentaires

• Le tri par sélection

• Le tri par insertion

• Le tri à bulles

• Tris avancées• Tri rapide

• …..

Page 170: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 170

Tri par sélection

Page 171: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 171

Nous avions une certaine situation sur l’intervalle [ 0 .. i-1 ] :

• les éléments jusqu’à i-1 sont triés,

• ceux qui suivent sont plus grands, mais pas triés.

Nous retrouvons la même situation sur l’intervalle [ 0 .. i ] :

• les éléments jusqu’à i sont triés,

• ceux qui suivent sont plus grands, mais pas triés.

Cette propriété est donc invariante avec i, on l’appelle

Tri par sélection : méthodologie

Page 172: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 172

Tri par sélection : algorithme Supposons que le tableau est noté T et sa taille N

PourPour i allant de 0 à N-2

indice ← i      

PourPour j allant de i + 1 à N-1        SiSi T[j] <T[indice] alorsalors              indice ← j        FinsiFinsi  FinPourFinPour 

temp ← T[indice]  T[indice] ← T[i]  T[i] ← temp

FinPourFinPour

Permutation des deux valeurs

Réservation de la case

Recherche de l’élément concerné

Page 173: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 173

Tri par sélection : exemple

Simuler l’algorithme du tri par sélection sur le tableau suivant on montrant les étapes d’exécution.

99 44 11 77 33

Page 174: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 174

Tri par sélection : exemple PrincipePrincipe : à 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 :Exemple :

• É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 :

• É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:

• Étape 3:

99 44 11 77 33

11 44 99 77 33

11 33 99 77 44

11 33 44 77 99

Page 175: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 175

Tri par sélection : complexité

Page 176: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 176

Tri par insertion

Page 177: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 177

Tri par insertion : algorithme

Page 178: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 178

Tri par insertion : exemple

Simuler l’algorithme du tri par insertion sur le tableau suivant on montrant les étapes d’exécution.

22 5656 44 77 00

Page 179: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 179

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

Page 180: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 180

Tri à bulles

Page 181: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 181

Tri à bulles : algorithme

Page 182: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 182

Tri à bulles : exemple

Simuler l’algorithme du tri à bulles sur le tableau suivant on montrant les étapes d’exécution.

44 11 55 33 22

Page 183: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 183

peuvent être éliminés

14

235

4

1235

4

2135

4

2315

4

2351

4

2351

Un balayage

54

123

45

123

45

123

45

123

Suite des balayages

Tri à bulles : exemple

Sens de lecture de tableau

Page 184: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 184

Tri rapide Le tri rapide est un tri récursif basé sur l'approche "diviser pour régner"

(consiste à décomposer un problème d'une taille donnée à des sous problèmes similaires mais de taille inférieure faciles à résoudre)

Description du tri rapide :

• 1) on considère un élément du tableau qu'on appelle pivot

• 2) on partitionne le tableau en 2 sous tableaux : les éléments inférieurs ou égaux à pivot et les éléments supérieurs à pivot. on peut placer ainsi la valeur du pivot à sa place définitive entre les deux sous tableaux

• 3) on répète récursivement ce partitionnement sur chacun des sous tableaux crées jusqu'à ce qu'ils soient réduits à un à un seul élément

Page 185: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 185

Tri Rapide

Page 186: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 186

Procédure Tri rapideProcédureProcédure TriRapide(tableau TT : réel par adresse, p,rp,r: entier par valeur)

variable q: entier

SiSi p <r alorsalors     Partition(T,p,r,q)

TriRapide(T,p,q-1)

TriRapide(T,q+1,r)

FinSiFinSi

Fin ProcédureFin Procédure

A chaque étape de récursivité on partitionne un tableau T[p..r] en deux sous tableaux T[p..q-1] et T[q+1..r] tel que chaque élément de T[p..q-1] soit inférieur ou égal à chaque élément de A[q+1..r] . L'indice q est calculé pendant la procédure de partitionnement

Page 187: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 187

Procédure de partitionProcédureProcédure Partition(tableau TT : réel par adresse, p,rp,r: entier par valeur,

qq: entier par adresse )

Variables i, j: entier

pivot: réel

pivot← T[p], i←p+1, j ← r

TantQue (i<=j)

TantQue (i<=r etet T[i] <=pivot) i ← i+1 FinTantQue

TantQue (j>=p etet T[j] >pivot ) j ← j-1 FinTantQue

SiSi i <j alors alors

Echanger(T[i], T[j]), i ← i+1, j ← j-1

FinSiFinSi

FinTantQue

Echanger(T[j], T[p])

q ← j

Fin ProcédureFin Procédure

Page 188: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 188

Partage avec pivot = 3

32 4 1 7 2 3 6

32 2 1 7 4 3 6

32 2 1 3 4 7 6

31 2 2 3 4 6 7

TRI TRI

< 3 3

Suite du tri

Tri Rapide : Exemple

Page 189: Cours d’algorithmique

2006/2007 Module I2, 1ère année SMI 189

Tri rapide : complexité et remarques

La complexité du tri rapide dans le pire des cas est en O(N²)

La complexité du tri rapide en moyenne est en O(N log N)

Le choix du pivot influence largement les performances du tri rapide

Le pire des cas correspond au cas où le pivot est à chaque choix le plus petit élément du tableau (tableau déjà trié)