Cours d’algorithmique

Slides:



Advertisements
Présentations similaires
Le micro-ordinateur.
Advertisements

Cours n° 1 Introduction à la programmation
Les présentateurs doivent souvent transmettre des informations techniques à des auditeurs qui connaissent moins bien le sujet et le vocabulaire spécifique.
Premier programme en C :
Tris.
Chapitre annexe. Récursivité
TECHNOLOGIE DES ORDINATEURS
Introduction: Concepts de la programmation
Algorithmique et Programmation DEUG 2 Sciences Economiques 2004/2005
Algorithmique et Programmation
Informatique Deug2 Sciences Eco S. Maabout 2004/2005.
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Introduction à la programmation ICS 3M: M.Legros.
Algorithmique Résume.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Chapitre 3: Système d’exploitation
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
Le Concept du programme enregistré
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
FLSI602 Génie Informatique et Réseaux
TRANSMISSION DES DONNEES INFORMATIQUES
Architecture de machines Principes généraux
Cours d’initiation en Informatique
Systèmes d’exploitation
Informatique Quelques notions de base Guy Kerckhoven.
Qu’est-ce qu’un ordinateur ?
Les bases de l’Algorithmique
Environnement matériel d’un système informatique
Conception et analyse des algorithmes
Cours algorithme 2 S. Tabbone.
Initiation à la programmation et algorithmique
Introduction : Compilation et Traduction
Partie 1 Etude de l'existant
Démarche de résolution de problèmes
Les Systèmes d’Exploitation
Les éléments de base de l’algorithmique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Programme et Langage C++
Logiciels.
TRANSMISSION DES DONNEES.
Algorithmique et Programmation
Introduction à la programmation (Java)
IFT 6800 Atelier en Technologies d’information
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Les différents langages de programmation
Logique programmée & Microprocesseurs
Programmer en langage c
Paradigmes des Langages de Programmation
Algorithmes et Programmation
1 INFOR 101 Chapitres 5 et 6 Marianne Morris. 2 Discussion du devoir # 2 La solution du devoir No. 2 est à la page Web du cours!
Module I3 algorithmique et programmation
La programmation.
1 IFT 099 Introduction à la programmation. 2 Plan du cours (sem. 1) 1.Introduction - les ordinateurs 2.La programmation procédurale 3.La programmation.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Algorithmique : Introduction
Architecture matérielle Qu’est ce qu’un ordinateur ?
Introduction et Généralités sur l’Algorithmique
Initiation à l’Algorithmique
INTRODUCTION à LA PROGRAMMATION
Patricia Renault UPMC 2005/2006
Applications Internet Cours 3 21 janvier 2010 Cours 3 21 janvier 2010.
Codage de l’information
1.1: notions de bases de l’informatique
Un ordinateur est une machine électronique qui fonctionne par la lecture séquentielle d'un ensemble d'instructions, organisées en programmes, qui lui.
Unité N°1: Système Informatique
Architecture d’un ordinateur
Initiation à l'informatique
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

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] 2006/2007 Module I2, 1ère année SMI

Objectif et plan du cours 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) 2006/2007 Module I2, 1ère année SMI

Système Informatique? Éléments d’un système informatique Techniques du traitement automatique de l’information au moyen des ordinateurs Système informatique = ordinateur + périphériques Éléments d’un système informatique Langages (Java,C/C++, Fortran,etc.) Système d’exploitation (DOS,Windows, Unix, etc.) Matériel (PC, Macintosh, station SUN, etc.) Applications (Word, Excel, Jeux, Maple, etc.) 2006/2007 Module I2, 1ère année SMI

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, … 2006/2007 Module I2, 1ère année SMI

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 programme Ordinateur = 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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Actions d’un ordinateur : Exemple 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 2006/2007 Module I2, 1ère année SMI

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ériques (affichage à l'écran, lecture du clavier, pilotage d’une imprimante, …) Gestion des utilisateurs et de leurs données (comptes, partage des ressources, gestion des fichiers et répertoires, …) Interface avec l’utilisateur (textuelle ou graphique): Interprétation des commandes Contrôle des programmes (découpage en taches, partage du temps processeur, …) 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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 Assembleur (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 portable) -: 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 2006/2007 Module I2, 1ère année SMI

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 source en langage évolué Compilateur ou Langage machine interpréteur 2006/2007 Module I2, 1ère année SMI

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 fichier source exemple fichier exécutable exécution exemple.bas fichier source Interprétation+exécution 2006/2007 Module I2, 1ère année SMI

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? 2006/2007 Module I2, 1ère année SMI

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. 2006/2007 Module I2, 1ère année SMI

Etapes de réalisation d’un programme Spécification Analyse Traduction en langage Compilation Tests et modifications Enoncé du problème Cahier des charges Algorithme Programme source Programme exécutable Version finale et résultats La réalisation de programmes passe par l’écriture d’algorithmes D’où l’intérêt de l’Algorithmique 2006/2007 Module I2, 1ère année SMI

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… 2006/2007 Module I2, 1ère année SMI

Représentation d’un algorithme Historiquement, deux façons pour représenter un algorithme: L’Organigramme: représentation graphique avec des symboles (carrés, losanges, etc.) offre une vue d’ensemble de l’algorithme représentation quasiment abandonnée aujourd’hui 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 2006/2007 Module I2, 1ère année SMI

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) 2006/2007 Module I2, 1ère année SMI

Notions et instructions de base Algorithmique Notions et instructions de base 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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? 2006/2007 Module I2, 1ère année SMI

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} 2006/2007 Module I2, 1ère année SMI

Notion de variable Dans les langages de programmation une 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ées avant d’être utilisées, elle doivent être caractérisées par : un nom (Identificateur) un type (entier, réel, caractère, chaîne de caractères, …) 2006/2007 Module I2, 1ère année SMI

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: A1 exemple 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_2007 invalides: SMI 2007, SMI-2007, SMI;2007 doit être différent des mots réservés du langage (par exemple en Java: int, 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é 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Types des variables Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre, les types offerts par la plus part des langages sont: Type numérique (entier ou réel) Byte (codé sur 1octet): de 0 à 255 Entier court (codé sur 2 octets) : -32 768 à 32 767 Entier long (codé sur 4 ou 8 octets) Réel simple précision (codé sur 4 octets) Réel double précision (codé sur 8 octets) Type logique ou booléen: deux valeurs VRAI ou FAUX Type caractère: lettres majuscules, minuscules, chiffres, symboles, … exemples: ’A’, ’a’, ’1’, ’?’, … Type chaîne de caractère: toute suite de caractères, exemples: " Nom, Prénom", "code postale: 1000", … 2006/2007 Module I2, 1ère année SMI

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 : 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 2006/2007 Module I2, 1ère année SMI

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 : 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 OK ←FAUX ch1 ←"SMI" ch2 ←ch1 x ←4 x ←j (voir la déclaration des variables dans le transparent précédent) non valides: i ←10.3 OK ←"SMI" j ←x 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Exercices simples sur l'affectation (1) Donnez les valeurs des variables A, B et C après exécution des instructions suivantes ? Variables A, B, C: Entier Début A ← 3 B ← 7 A ← B B ← A+5 C ← A + B C ← B – A Fin 2006/2007 Module I2, 1ère année SMI

Exercices simples sur l'affectation (2) Donnez les valeurs des variables A et B après exécution des instructions suivantes ? Variables A, B : Entier Début A ← 1 B ← 2 A ← B B ← A Fin Les deux dernières instructions permettent-elles d’échanger les valeurs de A et B ? 2006/2007 Module I2, 1ère année SMI

Exercices simples sur l'affectation (3) Ecrire un algorithme permettant d’échanger les valeurs de deux variables A et B 2006/2007 Module I2, 1ère année SMI

Expressions et opérateurs Une expression peut être une valeur, une variable ou une opération constituée de variables reliées par des opérateurs exemples: 1, b, a*2, a+ 3*b-c, … L'é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 2006/2007 Module I2, 1ère année SMI

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: 2 + 3 * 7 vaut 23 En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer les opérations à effectuer en priorité exemple: (2 + 3) * 7 vaut 35 2006/2007 Module I2, 1ère année SMI

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) la 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 2006/2007 Module I2, 1ère année SMI

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) 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  2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Exercice (respect des règles) Chacun de ces quatre algorithmes contient une erreur. Laquelle? Algorithme1 Variables Quantité : entier Prix_unit : réel Début Lire (Quantité, Prix_unit) Prix_total := Quantité * Prix_unit Écrire (Prix_total) Fin Algorithme2 X, Y, Z : réel Lire (X, Y, Z) Z :=X-Y Écrire (Z) Algorithme3 A1, A2: entier A3 : réel Lire (A1, A2) A2 := A1 * A3 Écrire (A2) Algorithme4 X : réel Lire (X) X := X-1 X :=Pi * X Écrire (X) 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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) 2006/2007 Module I2, 1ère année SMI

Méthode de construction d’un algorithme simple (3/4) Calcul_Aire Constantes Pi = 3,14159 Variables Rayon, Surface : réels Début lire (Rayon) Surface := Pi * (Rayon)2 écrire (Surface) Fin 2006/2007 Module I2, 1ère année SMI

Méthode de construction d’un algorithme simple (3/4) Programme Pascal Programme C Program 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; } 2006/2007 Module I2, 1ère année SMI

Les structures Conditionnelles et les boucles Algorithmique Les structures Conditionnelles et les boucles 2006/2007 Module I2, 1ère année SMI

Besoin a des concepts de ruptures de séquence Algorithme Calcul_Aire Constantes Pi = 3,14159 Variables Rayon, Surface : réels Début lire (Rayon) Surface := Pi * (Rayon)2 écrire (Surface) Fin 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 2006/2007 Module I2, 1ère année SMI

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). 2006/2007 Module I2, 1ère année SMI

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 condition alors instruction ou suite d'instructions1 Sinon instruction ou suite d'instructions2 Finsi 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 2006/2007 Module I2, 1ère année SMI

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 condition alors instruction ou suite d'instructions1 Finsi 2006/2007 Module I2, 1ère année SMI

Exemple (Si…Alors…Sinon) Algorithme AffichageValeurAbsolue (version1) Variable x : réel Début Ecrire " Entrez un réel : " Lire (x) Si x < 0 alors     Ecrire ("la valeur absolue de ", x, "est:",-x) Sinon     Ecrire ("la valeur absolue de ", x, "est:",x) Finsi Fin 2006/2007 Module I2, 1ère année SMI

Exemple (Si…Alors) Algorithme AffichageValeurAbsolue (version2) Variable x,y : réel Début Ecrire " Entrez un réel : " Lire (x) y← x Si x < 0 alors     y ← -x Finsi Ecrire ("la valeur absolue de ", x, "est:",y) Fin 2006/2007 Module I2, 1ère année SMI

Exercice (tests) Algorithme Divsible_par3 Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui teste et affiche s'il est divisible par 3 Algorithme Divsible_par3 Variable n : entier Début Ecrire " Entrez un entier : " Lire (n) Si (n%3=0) alors     Ecrire (n," est divisible par 3") Sinon     Ecrire (n," n'est pas divisible par 3") Finsi Fin 2006/2007 Module I2, 1ère année SMI

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é 2006/2007 Module I2, 1ère année SMI

Tables de vérité C1 C2 C1 ET C2 VRAI FAUX C1 C2 C1 OU C2 VRAI FAUX C1 C1 XOR C2 VRAI FAUX C1 NON C1 VRAI FAUX 2006/2007 Module I2, 1ère année SMI

Tests imbriqués Les tests peuvent avoir un degré quelconque d'imbrications Si condition1 alors Si condition2 alors instructionsA Sinon instructionsB Finsi Si condition3 alors instructionsC 2006/2007 Module I2, 1ère année SMI

Tests imbriqués: exemple (version 1) Variable n : entier Début Ecrire ("entrez un nombre : ") Lire (n) Si n < 0 alors     Ecrire ("Ce nombre est négatif") Sinon Si n = 0 alors     Ecrire ("Ce nombre est nul") Sinon      Ecrire ("Ce nombre est positif") Finsi Finsi Fin 2006/2007 Module I2, 1ère année SMI

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é) 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Tests imbriqués: corrigé de l'exercice Variables copies : entier prix : réel Début Ecrire ("Nombre de photocopies : ") Lire (copies) Si copies < 10 Alors      prix ← copies*0.5 Sinon Si copies < 20      prix ← copies*0.4 Sinon      prix ← copies*0.3 Finsi Finsi Ecrire (“Le prix à payer est : ”, prix) Fin 2006/2007 Module I2, 1ère année SMI

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. 2006/2007 Module I2, 1ère année SMI

Tests imbriqués: corrigé de l'exercice 2 Variables A, B, C, Delta, X1, X2 : réels Début Lire (A, B, C) Delta ← B2 – 4 AC Si (Delta < 0) Alors      Ecrire (« le trinome n’a pas de racine réelle ») Sinon Si (Delta > 0 Alors X1 ← (-B + racine(delta)) / 2A X2 ← (-B - racine(delta)) / 2A Ecrire (« le trinome possède deux racines réelles : », X1, X2)      Sinon X1 ← (-B ) / 2A Ecrire (« le trinome possède une racine réelle : », X1)      Finsi Finsi Fin 2006/2007 Module I2, 1ère année SMI

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

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 2006/2007 Module I2, 1ère année SMI

Les boucles Tant que FinTantQue instructions Vrai condition TantQue (condition) instructions FinTantQue condition instructions Faux Vrai 2006/2007 Module I2, 1ère année SMI

Boucle Tant que : exemple simple Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100 Variables som, i : entier Debut i ← 0 som← 0 TantQue (som <=100)      i ← i+1 som ← som+i FinTantQue Ecrire (" La valeur cherchée est N= ", i) Fin 2006/2007 Module I2, 1ère année SMI

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

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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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, alors pgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1 2006/2007 Module I2, 1ère année SMI

Algorithme d’Euclide Entré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 a 504 396 108 1 b 396 108 a 72 3 b a 108 72 36 1 72 36 a b 2 b

Les boucles Pour FinPour instructions i n'a pas atteint finale Pour compteur allant de initiale à finale par pas valeur du pas instructions FinPour i n'a pas atteint finale instructions Faux Vrai i ←initiale i ← i + pas 2006/2007 Module I2, 1ère année SMI

Les boucles Pour Remarques : Compteur est une variable de type entier (ou caractère). Elle doit être déclarée Pas est un entier qui peut être positif ou négatif. Pas peut ne pas être mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le nombre d'itérations est égal à finale - initiale+ 1 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 compteur 2006/2007 Module I2, 1ère année SMI

Déroulement des boucles Pour La valeur initiale est affectée à la variable compteur On compare la valeur du compteur et la valeur de finale : 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 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 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) On recommence l'étape 2 : La comparaison entre compteur et finale est de nouveau effectuée, et ainsi de suite … 2006/2007 Module I2, 1ère année SMI

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; 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Lien entre Pour et TantQue La boucle Pour est un cas particulier de Tant Que (cas où le nombre d'itérations est connu et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé avec TantQue (la réciproque est fausse) Pour compteur allant de initiale à finale par pas valeur du pas instructions FinPour peut être remplacé par : compteur ← initiale (cas d'un pas positif) TantQue compteur <= finale compteur ← compteur+pas FinTantQue 2006/2007 Module I2, 1ère année SMI

Lien entre Pour et TantQue: exemple Calcul de x à la puissance n avec la boucle Pour et la boucle TantQue x : un réel non nul n : entier positif ou nul 2006/2007 Module I2, 1ère année SMI

Solution avec la boucle Pour Variables x, puiss : réel n, i : entier Debut Ecrire (" 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 2006/2007 Module I2, 1ère année SMI

Solution avec la boucle Tant Que Variables x, puiss : réel n, i : entier Debut Ecrire (" 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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Algorithme de la fonction factorielle Algorithme / tantque Calcul 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 / Pour Calcul 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 2006/2007 Module I2, 1ère année SMI

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) 2006/2007 Module I2, 1ère année SMI

La boucle tantque en langage de programmation Langage Pascal While condition Do Begin Bloc d’instructions; End; test corps_boucle Langage C et Java while (condition) { Bloc d’instructions; } 2006/2007 Module I2, 1ère année SMI

La boucle Pour en langage de programmation Langage Pascal For variable := valeur initiale To valeur finale Do Begin Bloc d’instructions End; corps_boucle incr test init Langage C et Java for (i=valeur initiale; i<= valeur finale; i++) { Bloc d’instructions; } 2006/2007 Module I2, 1ère année SMI

Détecter l’erreur dans les deux essaie tant que et pour Algorithme Essai de tant que Variables n : entier Début n ← 15 tant que (n<>0) écrire (n) n ← n - 2 Fin de tant que Fin Algorithme Essai pour Variables K, N : entier Début n ← 200 pour K variant de 1 à n écrire (K) K ← n – 100 Fin pour Fin 2006/2007 Module I2, 1ère année SMI

Boucles imbriquées Les instructions d'une boucle peuvent être des instructions itératives. Dans ce cas, on aboutit à des boucles imbriquées Exemple: Exécution Pour i allant de 1 à 5 OX     Pour j allant de 1 à i OOX écrire("O") OOOX FinPour OOOOX écrire("X") OOOOOX FinPour 2006/2007 Module I2, 1ère année SMI

La boucle Faire…Tant Que condition Instruction(s) de la boucle Vraie Fausse Faire Instruction(s) Tant que (condition) do Instruction; while (condition) { f :=n; n--; } while (n>1); La 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 2006/2007 Module I2, 1ère année SMI

Les boucles Répéter … jusqu’à … instructions 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 2006/2007 Module I2, 1ère année SMI

Boucle Répéter jusqu’à : exemple Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100 (version avec répéter jusqu'à) Variables som, i : entier Debut som ← 0 i ← 0 Répéter      i ← i+1 som ← som+i Jusqu'à ( som > 100) Ecrire (" La valeur cherchée est N= ", i) Fin 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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) 2006/2007 Module I2, 1ère année SMI

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

Présentation générale et syntaxe des instructions de base MAPLE Présentation générale et syntaxe des instructions de base 2006/2007 Module I2, 1ère année SMI

Maple > int(1-x+x^3,x); Maple est un logiciel de calcul formel et numérique 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 sur des valeurs (avec une grande précision) > 30!; 265252859812191058636308480000000 > evalf(sqrt(2),50); 1.414213562373095048801688 7242096980785696718753769 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Maple : les packages Maple dispose d'un certain nombre de packages (librairies). Chacun de ces packages est spécialisé dans un traitement particulier. Comme exemples de ces packages, on a : linalg : pour l'algèbre linéaire plots : pour le tracé des courbes geometry : pour la géométrie 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 (NomLibrairie) : charge le package NomLibrairie with (NomLib, NomCmd) : charge la commande NomCmd du package NomLib 2006/2007 Module I2, 1ère année SMI

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 commentaire, 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) 2006/2007 Module I2, 1ère année SMI

Maple : nom et type des variables Le nom 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 variable est attribué automatiquement par Maple selon le contexte (exemple : si A prend la valeur 2, A sera de type integer, si A prend la valeur , A sera de type float) Les principaux types prédéfinis en Maple sont : integer (entier), float (réel), fraction (rationnel), complex (complexe), string (chaîne de caractères), boolean (booléen), array (tableau), matrix (matrice) Maple offre quelques commandes relatifs aux types : ex : whattype(var) donne le type de la variable var 2006/2007 Module I2, 1ère année SMI

Maple : l'affectation Le symbole d'affectation ← se note en Maple avec := exemple : i:= 1; j:= i+1; Attention : en Maple a=b n'est pas une instruction d'affectation, mais une expression de type logique (boolean) 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 evalb exemple : a:= 1; b:= 2; > a=b; 1=2 > evalb (a=b); false 2006/2007 Module I2, 1ère année SMI

Maple : instructions d'entrées-sorties print(var) permet d'afficher la valeur de la variable var (c'est l'équivalent de écrire en pseudo code). Si var n'a pas de valeur, Maple affiche le nom de la variable 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 readstat permet de saisir des données à partir du clavier (c'est l'équivalent de lire en pseudo code) Syntaxe: var:=readstat(`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 2006/2007 Module I2, 1ère année SMI

Maple : syntaxe des tests Écriture en pseudo code Traduction en Maple Si condition alors if condition then instructions instructions Finsi fi; Si condition alors if condition then instructions 1 instructions1 Sinon else instructions2 instructions2 Finsi fi; 2006/2007 Module I2, 1ère année SMI

Maple : syntaxe des boucles Écriture en pseudo code Traduction en Maple TantQue condition while condition do instructions instructions FinTantQue od; Pour i allant de v1 à v2 par pas p for i from v1 to v2 by p do instructions instructions FinPour od; 2006/2007 Module I2, 1ère année SMI

Fonctions et procédures Algorithmique Fonctions et procédures 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Notion de bloc dans un programme 2006/2007 Module I2, 1ère année SMI

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

Forme d’une Fonction Une fonction s'écrit en dehors du programme principal sous la forme Fonction identificateur (paramètres et leurs types) : type_fonction Instructions constituant le corps de la fonction retourne … FinFonction 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 fonctions Remarque : 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 2006/2007 Module I2, 1ère année SMI

Exemple de programme / fonction 2006/2007 Module I2, 1ère année SMI

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

Fonctions : exemples Paramètres formels La fonction SommeCarre suivante calcule la somme des carrées de deux réels x et y : Fonction SommeCarre (x : réel, y: réel ) : réel variable z : réel z ←x^2+y^2 retourne (z) FinFonction La fonction Pair suivante détermine si un nombre est pair : Fonction Pair (n : entier ) : booléen retourne (n%2=0) Paramètres formels 2006/2007 Module I2, 1ère année SMI

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 : Algorithme exepmleAppelFonction variables z : réel, b : booléen Début b ←Pair(3) z ←5*SommeCarre(7,2)+1 écrire("SommeCarre(3,5)= ", SommeCarre(3,5)) Fin Lors de l'appel Pair(3) le paramètre formel n est remplacé par le paramètre effectif 3 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

La fonction de recherche des nombres premiers Fonction estPremier Fonction 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) FinFonction est-premier 2006/2007 Module I2, 1ère année SMI

Fonction est-premier (m) Algorithme premier-plus-grand (n) 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: Trace de est-premier pour m=11: Trace de est-premier pour m=9: Trace de est-premier pour m=10: i=2 11 mod 2 = 1 10 mod 2 = 0 9 mod 2 = 1 m = 9 i=3 9 mod 3 = 0 i=5 11 mod 5 = 1 m = 10 m = 11

Procèdures Procédure nom_procédure (paramètres et leurs types) 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édure Une procédure est un sous-programme semblable à une fonction mais qui ne retourne rien Une procédure s'écrit en dehors du programme principal sous la forme : Procédure nom_procédure (paramètres et leurs types) Instructions constituant le corps de la procédure FinProcédure Remarque : une procédure peut ne pas avoir de paramètres 2006/2007 Module I2, 1ère année SMI

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édure exemple_proc (…) … FinProcédure Algorithme exepmleAppelProcédure Début exemple_proc (…) Fin 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 2006/2007 Module I2, 1ère année SMI

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 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 effectifs. 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 2006/2007 Module I2, 1ère année SMI

Transmission des paramètres Il existe deux modes de transmission de paramètres dans les langages de programmation : 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) : 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 : 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 2006/2007 Module I2, 1ère année SMI

Transmission des paramètres : exemples Procédure incrementer1 (x : entier par valeur, y : entier par adresse) x ← x+1 y ← y+1 FinProcédure Algorithme Test_incrementer1 variables n, m : entier Début n ← 3 m ← 3 incrementer1(n, m) résultat : écrire (" n= ", n, " et m= ", m) n=3 et m=4 Fin Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur 2006/2007 Module I2, 1ère année SMI

Transmission par valeur, par adresse : exemples Procédure qui calcule la somme et le produit de deux entiers : Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse) som ← x+y prod ← x*y FinProcédure Procédure qui échange le contenu de deux variabales : Procédure Echange (x : réel par adresse, y : réel par adresse) variables z : réel z ← x x ← y y ← z 2006/2007 Module I2, 1ère année SMI

Variables locales et globales (1) On peut manipuler 2 types de variables dans un module (procédure ou fonction) : des variables locales et des variables globales. Elles se distinguent par ce qu'on appelle leur portée (leur "champ de définition", leur "durée de vie") Une variable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle est créée à l'appel du module et détruite à la fin de son exécution Une variable 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 2006/2007 Module I2, 1ère année SMI

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 : 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 2006/2007 Module I2, 1ère année SMI

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 (paramètres) local ; global ; instructions résultat 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 local et global 2006/2007 Module I2, 1ère année SMI

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équence 2006/2007 Module I2, 1ère année SMI

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; Maple affiche le texte de la procédure. Dans le cas où end 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); 5 > a:=carre(3,3); a := 18 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Algorithmique La Récursivité 2006/2007 Module I2, 1ère année SMI

Récursivité 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 : 2006/2007 Module I2, 1ère année SMI

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 Cnp 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é :

Itération et Récursivité : Exemple Calcul de factoriel : Calcul fact, Variables N,f : entier Debut f 1 tantque (n > 1) f  f * (n−1); fintantque Ecrire(f) End; Version itérative 2006/2007 Module I2, 1ère année SMI

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é Fonction fact (n : entier ) : entier Si (n=0) alors retourne (1) Sinon retourne (n*fact(n-1)) Finsi FinFonction Version récursive 2006/2007 Module I2, 1ère année SMI

Liste des appels de la fonction factoriel (cas du n=4) Version récursive Version itérative 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Fonctions récursives : exercice La version itérative qui calcule la somme des n premier nombres entier : Écrivez une fonction récursive 2006/2007 Module I2, 1ère année SMI

Fonctions récursives : exercice La version récursive 2006/2007 Module I2, 1ère année SMI

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) Fonction 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 retourne (res) FinFonction 2006/2007 Module I2, 1ère année SMI

Fonctions récursives : exercice (suite) Une fonction itérative pour le calcul de la suite de Fibonacci : Fonction Fib (n : entier ) : entier Variables i, AvantDernier, Dernier, Nouveau : entier Si (n=1 OU n=0) alors retourne (1) Finsi AvantDernier ←1, Dernier ←1 Pour i allant de 2 à n Nouveau← Dernier+ AvantDernier AvantDernier ←Dernier Dernier ←Nouveau FinPour retourne (Nouveau) FinFonction Remarque: la solution récursive est plus facile à écrire 2006/2007 Module I2, 1ère année SMI

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

Exemple introductif nbre ← 0 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, …, N30. Après 30 instructions lire, on doit écrire 30 instructions Si pour faire le calcul nbre ← 0 Si (N1 >10) alors nbre ←nbre+1 FinSi …. Si (N30>10) alors nbre ←nbre+1 FinSi c'est lourd à écrire Heureusement, les langages de programmation offrent la possibilité de rassembler toutes ces variables dans une seule structure de donnée appelée tableau 2006/2007 Module I2, 1ère année SMI

Tableaux variable tableau notes[30] : réel Un tableau est un ensemble d'éléments de même type désignés par un identificateur unique Une variable entière nommée indice permet d'indiquer la position d'un élément donné au sein du tableau et de déterminer sa valeur La déclaration d'un tableau s'effectue en précisant le type de ses éléments et sa dimension (le nombre de ses éléments) En pseudo code : variable tableau identificateur[dimension] : type Exemple : variable tableau notes[30] : 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, … 2006/2007 Module I2, 1ère année SMI

Tableaux : remarques L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple, 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] 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 2006/2007 Module I2, 1ère année SMI

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 tableau notes[30] : réel Début nbre ← 0 Pour i allant de 0 à 29 Si (notes[i] >10) alors nbre ←nbre+1 FinSi FinPour écrire ("le nombre de notes supérieures à 10 est : ", nbre) Fin 2006/2007 Module I2, 1ère année SMI

Tableaux : saisie et affichage Procédures qui permettent de saisir et d'afficher les éléments d'un tableau : Procédure SaisieTab(n : entier par valeur, tableau T : réel par référence ) variable i: entier Pour i allant de 0 à n-1      écrire ("Saisie de l'élément ", i + 1)      lire (T[i] ) FinPour Fin Procédure Procédure AfficheTab(n : entier par valeur, tableau T : réel par valeur ) variable i: entier Pour i allant de 0 à n-1      écrire ("T[",i, "] =", T[i]) 2006/2007 Module I2, 1ère année SMI

Tableaux : exemples d'appel Algorithme principale où on fait l'appel des procédures SaisieTab et AfficheTab : Algorithme Tableaux variable p : entier tableau A[10] : réel Début p ← 10 SaisieTab(p, A) AfficheTab(p,A) Fin 2006/2007 Module I2, 1ère année SMI

Tableaux : fonction longueur La plus part des langages offrent une fonction longueur qui donne la dimension du tableau. Les procédures Saisie et Affiche peuvent être réécrites comme suit : Procédure SaisieTab( tableau T : réel par référence ) variable i: entier Pour i allant de 0 à longueur(T)-1      écrire ("Saisie de l'élément ", i + 1)      lire (T[i] ) FinPour Fin Procédure Procédure AfficheTab(tableau T : réel par valeur ) variable i: entier Pour i allant de 0 à longueur(T)-1      écrire ("T[",i, "] =", T[i]) 2006/2007 Module I2, 1ère année SMI

Tableaux : syntaxe Maple En Maple, un tableau se définit en utilisant le type array comme suit : identificateur:= 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]); Il est également possible de les entrer un par un comme suit : Exemple : > T:=array(1..3); > 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); [1, 3, 5] 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Tableaux à deux dimensions Les langages de programmation permettent de déclarer des tableaux dans lesquels les valeurs sont repérées par deux indices. Ceci est utile par exemple pour représenter des matrices En pseudo code, un tableau à deux dimensions se déclare ainsi : variable tableau identificateur[dimension1] [dimension2] : type Exemple : une matrice A de 3 lignes et 4 colonnes dont les éléments sont réels variable tableau A[3][4] : réel 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 2006/2007 Module I2, 1ère année SMI

Exemples : lecture d'une matrice Procédure qui permet de saisir les éléments d'une matrice : Procédure SaisieMatrice(n : entier par valeur, m : entier par valeur , tableau A : réel par référence ) Début variables i,j : entier Pour i allant de 0 à n-1 écrire ("saisie de la ligne ", i + 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]) FinPour Fin Procédure 2006/2007 Module I2, 1ère année SMI

Exemples : affichage d'une matrice Procédure qui permet d'afficher les éléments d'une matrice : Procédure AfficheMatrice(n : entier par valeur, m : entier par valeur ,tableau A : réel par valeur ) Début variables i,j : entier Pour i allant de 0 à n-1 Pour j allant de 0 à m-1      écrire ("A[",i, "] [",j,"]=", A[i][j]) FinPour Fin Procédure 2006/2007 Module I2, 1ère année SMI

Exemples : somme de deux matrices Procédure qui calcule la somme de deux matrices : Procédure SommeMatrices(n, m : entier par valeur, tableau A, B : réel par valeur , tableau C : réel par référence ) Début variables i,j : entier Pour i allant de 0 à n-1 Pour j allant de 0 à m-1      C[i][j] ← A[i][j]+B[i][j] FinPour Fin Procédure 2006/2007 Module I2, 1ère année SMI

Appel des procédures définies sur les matrices Exemple d'algorithme principale où on fait l'appel des procédures définies précédemment pour la saisie, l'affichage et la somme des matrices : Algorithme Matrices variables tableau M1[3][4],M2 [3][4],M3 [3][4] : réel Début SaisieMatrice(3, 4, M1) SaisieMatrice(3, 4, M2) AfficheMatrice(3,4, M1) AfficheMatrice(3,4, M2) SommeMatrice(3, 4, M1,M2,M3) AfficheMatrice(3,4, M3) Fin 2006/2007 Module I2, 1ère année SMI

Matrices : syntaxe Maple Pour définir une matrice en Maple, on peut utiliser le type array ou le type matrix comme suit : identificateur:= array (a1..b1, a2..b2) identificateur:= 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]] ); Le type matrix est disponible dans le package linalg. Il faut donc charger ce package avec la commande with(linalg) avant d'utiliser ce type 2006/2007 Module I2, 1ère année SMI

Tableaux : trouver l’erreur Algorithme 1 Essai 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 2 Essai 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 2006/2007 Module I2, 1ère année SMI

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. 2006/2007 Module I2, 1ère année SMI

Algorithme recherche Mini Variables i, Indice_Mini, Mini : entiers Tab(10) : tableau d’entiers Début pour i variant de 1 à 10 Lire Tab(i) Fin de pour Mini Tab(1) Indice_Mini  1 pour i variant de 2 à 10 Si Tab(i) < Mini alors Mini Tab(i) Indice_Mini  i Fin de Si ecrire (Mini, Indice_Mini) Fin

Tableaux : 2 problèmes classiques Recherche d’un élément dans un tableau Recherche séquentielle Recherche dichotomique Tri d'un tableau Tri par sélection Tri rapide 2006/2007 Module I2, 1ère année SMI

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é ← Faux TantQue (i < N) ET (Trouvé=Faux)   Si (T[i]=x) alors           Trouvé ← Vrai Sinon i←i+1     FinSi FinTantQue 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 2006/2007 Module I2, 1ère année SMI

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) FinSi FinPour retourne (Faux) FinFonction 2006/2007 Module I2, 1ère année SMI

Notion de complexité d'un algorithme Pour évaluer l’efficacité d'un algorithme, on calcule sa complexité Mesurer la complexité revient à quantifier le temps d'exécution et l'espace mémoire nécessaire Le temps d'exécution est proportionnel au nombre 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 à traiter. Ainsi, la complexité est une fonction de la taille des données. On s'intéresse souvent à son ordre de grandeur asymptotique En général, on s'intéresse à la complexité dans le pire des cas et à la complexité moyenne 2006/2007 Module I2, 1ère année SMI

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é dans le pire des cas est d'ordre N, (on note O(N)) Pour un ordinateur qui effectue 106 tests par seconde on a : N 103 106 109 temps 1ms 1s 16mn40s 2006/2007 Module I2, 1ère année SMI

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 : 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]) 2006/2007 Module I2, 1ère année SMI

Recherche dichotomique : algorithme inf←0 , sup←N-1, Trouvé ← Faux TantQue (inf <=sup) ET (Trouvé=Faux) milieu←(inf+sup)div2 Si (x=T[milieu]) alors Trouvé ← Vrai  SinonSi (x>T[milieu]) alors           inf←milieu+1 Sinon sup←milieu-1     FinSi FinSi FinTantQue Si Trouvé alors écrire ("x appartient au tableau") Sinon écrire ("x n'appartient pas au tableau") FinSi 2006/2007 Module I2, 1ère année SMI

Exemple d'exécution 4 6 10 15 17 18 24 27 30 inf 5 6 sup 8 milieu 4 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 5 6 sup 8 milieu 4 inf 2 sup 8 3 milieu 4 1 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

Algorithmique Les méthodes de Tris 2006/2007 Module I2, 1ère année SMI

Tris d’un tableau La méthode de tri 2006/2007 Module I2, 1ère année SMI

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 ….. 2006/2007 Module I2, 1ère année SMI

Tri par sélection 2006/2007 Module I2, 1ère année SMI

Tri par sélection : méthodologie 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, Cette propriété est donc invariante avec i, on l’appelle un invariant 2006/2007 Module I2, 1ère année SMI

Tri par sélection : algorithme Supposons que le tableau est noté T et sa taille N Pour i allant de 0 à N-2 indice ← i       Pour j allant de i + 1 à N-1         Si T[j] <T[indice] alors               indice ← j         Finsi   FinPour  temp ← T[indice]   T[indice] ← T[i]   T[i] ← temp FinPour Réservation de la case Recherche de l’élément concerné Permutation des deux valeurs 2006/2007 Module I2, 1ère année SMI

Tri par sélection : exemple Simuler l’algorithme du tri par sélection sur le tableau suivant on montrant les étapes d’exécution. 9 4 1 7 3 2006/2007 Module I2, 1ère année SMI

Tri par sélection : exemple Principe : à l'étape i, on sélectionne le plus petit élément parmi les (n - i +1) éléments du tableau les plus à droite. On l'échange ensuite avec l'élément i du tableau Exemple : É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: 9 4 1 7 3 1 4 9 7 3 1 3 9 7 4 1 3 4 7 9 2006/2007 Module I2, 1ère année SMI

Tri par sélection : complexité 2006/2007 Module I2, 1ère année SMI

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

Tri par insertion : algorithme 2006/2007 Module I2, 1ère année SMI

Tri par insertion : exemple Simuler l’algorithme du tri par insertion sur le tableau suivant on montrant les étapes d’exécution. 2 56 4 7 2006/2007 Module I2, 1ère année SMI

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, 4, 56, 7, 0 2, 4, 7, 56, 0 0, 2, 4, 7, 56 2006/2007 Module I2, 1ère année SMI

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

Tri à bulles : algorithme 2006/2007 Module I2, 1ère année SMI

Tri à bulles : exemple Simuler l’algorithme du tri à bulles sur le tableau suivant on montrant les étapes d’exécution. 4 1 5 3 2 2006/2007 Module I2, 1ère année SMI

Tri à bulles : exemple 2 3 5 1 4 Un balayage Suite des balayages Sens de lecture de tableau peuvent être éliminés 2006/2007 Module I2, 1ère année SMI

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 2006/2007 Module I2, 1ère année SMI

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

Procédure Tri rapide Procédure TriRapide(tableau T : réel par adresse, p,r: entier par valeur) variable q: entier Si p <r alors      Partition(T,p,r,q) TriRapide(T,p,q-1) TriRapide(T,q+1,r) FinSi Fin Procédure 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 2006/2007 Module I2, 1ère année SMI

Procédure de partition Procédure Partition(tableau T : réel par adresse, p,r: entier par valeur, q: entier par adresse ) Variables i, j: entier pivot: réel pivot← T[p], i←p+1, j ← r TantQue (i<=j) TantQue (i<=r et T[i] <=pivot) i ← i+1 FinTantQue TantQue (j>=p et T[j] >pivot ) j ← j-1 FinTantQue Si i <j alors Echanger(T[i], T[j]), i ← i+1, j ← j-1 FinSi FinTantQue Echanger(T[j], T[p]) q ← j Fin Procédure 2006/2007 Module I2, 1ère année SMI

Tri Rapide : Exemple Partage avec pivot = 3 3 2 4 1 7 6 TRI < 3 ³ 3 Suite du tri 2006/2007 Module I2, 1ère année SMI

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é) 2006/2007 Module I2, 1ère année SMI