Algorithmique et Programmation A. Alikacem
Semaine 2 Les outils algorithmiques Lecture: chapitre 2 des notes de cours Étapes de la construction d'un programme Composantes de base d'un ordinateur Structures de base d'un algorithme
Étapes de la construction d’un programme Algorithme Problème Transcription Description formelle Programme Compilation Langage de programmation Ordinateur Exécution Solution Langage machine
Vous avez dit algorithme ?
Expression des algorithmes Le pseudo-code (pseudo-langage) Dérivé du langage Pascal. Permet d’être précis, sans syntaxe lourde lisible sans effort Peut être traduit facilement dans un langage de programmation Il nous évite de rattacher la résolution d’un problème à un langage de programmation particulier Il nous prépare à l’acquisition de bonnes habitudes de programmation: il conduit à la programmation structurée il favorise la conception des algorithmes car il est compatible avec la démarche descendante.
Pseudo-Code #include <stdio.h> int main () { int n, i; Faire la différence entre les contraintes propres à un langage et les difficultés inhérentes à un problème donné Demander n Répéter i [0,n] début si (i % 2) 0 alors Afficher i fin #include <stdio.h> int main () { int n, i; scanf ("%d", &n); for (i=0; i<=n; i++) { if (i%2) { printf ("%d\n", i); } return 0; Plus abstrait, plus lisible, plus concis... Met en avant l'essence de l'algorithme
Expression des algorithmes Le pseudo-code (pseudo-langage) Cette représentation a un intérêt pédagogique, elle facilite l’apprentissage. Introduit les caractéristiques de la machine théorique : Un algorithme va être représenté comme une suite d’actions pouvant être exécutées par une machine idéale. Notion d’action
Les actions élémentaires (primitives) Définition Une instruction qui peut être comprise directement par le système que l'on désire programmer. Exemple : une tortue radio-commandée Les primitives
Les actions élémentaires (primitives)
Les actions élémentaires (primitives)
Les actions élémentaires (primitives)
Les actions élémentaires (primitives)
Les actions élémentaires (primitives) ?
Les actions élémentaires (primitives)
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case » ? Une primitive !!!
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « reculer d’une case » ? + + =
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ?
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? +
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + +
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + + +
Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + + + =
Architecture de Von Neuman Un ordinateur devrait être composé de: - unité de commande et contrôle (ucc) - unité arithmétique et logique (ual) - mémoire principale (mp) - périphériques d’entrée/sortie (pe/ps) ps ual ucc mp pe
Les composantes d’un ordinateur Les périphériques d’entrée De l’usager à l’ordinateur Stockées dans la mémoire principale de l’ordinateur afin d’être manipulées. Dans un algorithme DEMANDER information action élémentaire
Les composantes d’un ordinateur Les périphériques de sortie De l’ordinateur à l’utilisateur On les utilisera donc pour montrer les résultats du travail d’un programme. Dans un algorithme AFFICHER information IMPRIMER information actions élémentaires
Les composantes d’un ordinateur La mémoire principale Conserver les données entrées par l’usager et de stocker les résultats intermédiaires et finaux. Pour traiter de l’information par un ordinateur, il faut que cette dernière se retrouve en mémoire principale.
La mémoire principale 01000000 01100111 00111111 … 0x0109 0x010a Plusieurs cellules (cases, mots) … 0x0109 01000000 0x010a 01100111 0x010b 00111111 Chaque cellule a sa propre adresse contient toujours une suite de bits
La mémoire principale 01000000 01100111 00111111 … a lettre temp Plusieurs cellules (cases, mots) Nous pouvons leur associer un nom Notion d’identificateur
La mémoire principale ‘@’ ‘e’ ‘?’ … a lettre temp Notion de type Plusieurs cellules (cases, mots) Nous pouvons interpréter la signification du contenu différemment (associer un type) Notion de type
La mémoire principale ‘@’ ‘e’ 4 a lettre temp Notion de variable Plusieurs cellules (cases, mots) nom + type = variable une abstraction d’un emplacement mémoire. Notion de variable Comment l’utiliser ? temp 4 temp temp + 1 Le symbole “ ” est appelé opérateur d’affectation ou d’assignation.
Un exemple ??? x y ??? DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple ??? x y ??? 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple x y ??? 5 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple x y 5 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y 5 y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple x y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple x y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Un exemple x y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y x x 0 AFFICHER x AFFICHER y FIN
Les composantes d’un ordinateur L’unité arithmétique et logique (UAL) Composante d’un ordinateur en charge de toutes les opérations de calcul, de comparaison et de logique. Primitives pour le calcul arithmétique
L’unité arithmétique et logique Opérateurs arithmétiques Opérateur Exemple x=9 & y=4 + x + y 13 - x – y 5 * x * y 36 / x / y 2,25 x y 2 % x % y 1
L’unité arithmétique et logique Opérateurs relationnels Opérateur Exemple x=9 & y=4 = x = y FAUX x y VRAI > x > y x y < x < y x y
L’unité arithmétique et logique Opérateurs logiques NON Conditions NON conditions VRAI FAUX Il fait soleil Il ne fait pas soleil
L’unité arithmétique et logique Opérateurs logiques ET x y x ET y FAUX VRAI
L’unité arithmétique et logique Opérateurs logiques OU x y x OU y FAUX VRAI
L’unité arithmétique et logique Évaluation des expressions Les parenthèses et : NON , + , - (monadiques) + élevée * , / , , % . +,- (dyadiques) > , , < , = , ET OU + faible
L’unité arithmétique et logique Un exemple d’évaluation d’expression: x * x ³ 0 ET ( x + 1 ) * ( x + 1 ) < 16 2 9 4 V 3 V
Les composantes d’un ordinateur L’unité de commande et de contrôle (UCC) En charge de contrôler le déroulement d’un programme. Elle dirige le fonctionnement de toutes les autres unités (UAL, mémoire, entrée/sortie) Normalement, un programme s’exécute instruction par instruction, dans l’ordre (de haut en bas) ou elles sont écrites. Cependant, et très souvent, on aura besoin de briser la séquentialité: en utilisant des structures de contrôle d’alternatives; en utilisant des structures de contrôle de répétitions; en faisant des appels de sous-programmes, caractérisés par une référence (appel) à un bloc à l’intérieur d’un autre bloc Primitives de structures de contrôle
Unité de commande et contrôle Structures alternatives Condition Instructions VRAI FAUX SI condition est vrai alors DÉBUT Instructions FIN
Unité de commande et contrôle Structures alternatives SI x < 100 alors DÉBUT x x + 1 y 25 FIN VRAI X < 100 x x + 1 y 25 FAUX
Unité de commande et contrôle Structures alternatives SI condition est vrai alors DÉBUT Instructions v FIN SINON Instructions f VRAI Condition Instructions v FAUX Instructions f
Unité de commande et contrôle Structures alternatives SI x = 0 alors DÉBUT x 100 FIN SINON x x - 1 VRAI x = 0 X 100 FAUX x x - 1
Unité de commande et contrôle Structures itératives n fois? Instructions FAUX VRAI Compteur implicite RÉPÉTER n FOIS DÉBUT Instructions FIN
Exemple Le factoriel n Début Si n = 1 ou n = 0 alors Début fact 1 Fin ³ 0. Début Si n = 1 ou n = 0 alors Début fact 1 Fin Sinon Début fact 1 i 2 Répéter n-1 fois Début fact fact * i i i + 1 Fin Fin Fin
Unité de commande et contrôle Structures itératives n fois? Instructions FAUX VRAI Compteur explicite RÉPÉTER i [1,n] DÉBUT Instructions FIN
Exemple Le factoriel n Début Si n = 1 ou n = 0 alors Début fact 1 Fin ³ 0. Début Si n = 1 ou n = 0 alors Début fact 1 Fin Sinon Début fact 1 Répéter i [2, n] Début fact fact * i Fin Fin Fin
Unité de commande et contrôle Condition FAUX VRAI Instructions Structures itératives RÉPÉTER DÉBUT Instructions FIN TANT QUE condition
Exemple Le factoriel n Début Si n = 1 ou n = 0 alors fact 1 Fin Sinon fact 1 i 1 Répéter fact fact * i i i + 1 Tant Que i < n+1
Unité de commande et contrôle Structures itératives condition Instructions VRAI FAUX TANT QUE condition DÉBUT Instructions FIN
Exemple Le factoriel n Début Si n = 1 ou n = 0 alors fact 1 Fin Sinon fact 1 i 2 Tant Que i < n+1 fact fact * i i i + 1
L’algorithmique impérative Propriétés : Un nombre fini d’étapes Un nombre fini d’opérations par étape Une suite d’opérations primitives Fournit un résultat (décidabilité) Chaque opération est non ambiguë Effective calculabilité
L’algorithmique impérative Propriétés : Un algorithme doit être indépendant du langage de programmation utilisé. Un programme est un algorithme exprimé dans un langage de programmation capable d’être exécuté par un ordinateur. Peut être exprimé de manière formelle : - en pseudo-code - par un algorigramme - dans un arbre algorithmique - dans un diagrammes structurés
Algorithme, programme et ordinateur Lab#2 Algorithme Problème Transcription (?) Description formelle (?) Programme Compilation Langage de programmation Exécution (?) Ordinateur Solution Langage machine (?)
{A: CL est un caractère} Algorithme: un traitement de texte! début Demander CP {A: CP est un caractère} Afficher CP TANT QUE CP ‘!’ Demander CL {A: CL est un caractère} SI CL = CP ALORS Afficher le caractère de soulignement '_ ' fin Afficher CL CP CL Qu’affiche cet algorithme si les données lues sont: " Etes vous efficace? ... Bonne chance!! " (Les guillemets ne font pas partie des données)
Rosalie dans le labyrinthe Sortie Entrée Les primitives Faire un pas devant elle (se rendre au centre du carré situé immédiatement devant elle). Tourner d'un quart de tour à gauche ou à droite. Détecter un mur placé devant lui (c'est à dire répondre à la question "y a-t-il un mur en face?"; la réponse est oui ou non. Détecter l'entrée du labyrinthe (en l'absence de ce test, Rosalie pourrait sortir par là où elle est entrée!). Détecter la sortie du labyrinthe (en l'absence de ce test, Rosalie ne s'arrêterait pas et continuerait à longer le mur à l'extérieur!).
Algorithme: Sortir du labyrinthe en longeant le mur de gauche Début Avancer d'un pas Faire un quart de tour à gauche Tant que Rosalie n'est pas sortie Tant que mur en face Faire un quart de tour à droite Fin Fin.
Il a été démontré que tout cube est égal à la somme de nombres impairs consécutifs. Par exemple : 1 = 1 8 = 3 + 5 27 = 7 + 9 + 11 64= 13 + 15 + 17 + 19 Décrivez un algorithme qui lit un entier n strictement positif et donne une décomposition de n3.
Détermination des nombres de début et de fin de la série n3 n*n*n s 0 p 1 k 1 Tant que (s n3) début si (s>n3) alors s s - (2*k-1) k k + 1 fin si ( s<n3) alors s s + (2*p -1) p p + 1 x 2*k -1 y 2* (p-1) -1
Affichage du développement du cube de n début n3 n*n*n Afficher n3 " = " k premier Tant que (k < dernier) Afficher k " + " k k+2 fin Afficher dernier