Abder Alikacem Semaine 3 Bâtir un algorithme

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Chapitre annexe. Récursivité
Introduction: Concepts de la programmation
Algorithmique (suite)
Fonctions & procédures
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Présentation des programmes de terminale STG Juin 2006.
DECLARATION DE VARIABLES
La logique algorithmique
Algorithmique Résume.
CHAPITRE 2 Nombres entiers, initiation à l’arithmétique- Nombres rationnels.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Exercices Algorithmiques
INTRODUCTION.
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
5. Les structures répétitives
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Les bases de l’Algorithmique
Principes de programmation (suite)
Initiation à la programmation et algorithmique
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Partie 1 Etude de l'existant
Récursivité.
Chapitre IV LES STRUCTURES SIMPLES. Plan I- Les entrées II- Laffectation III- Les sorties.
Algorithmique et Programmation
Correction du reste des exercices
Les éléments de base de l’algorithmique
Création d’un programme :
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Nombres entiers. Ensembles de nombres
Chapitre 1 PGCD de deux nombres.
Algorithmique et Programmation
FICHIERS : Définition : Algorithme général:
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Abder Alikacem Semaine 13 La récursivité
Structures de données IFT-10541
Introduction à l’algorithmique
Semaine #1 INF135 par Frédérick Henri.
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
LA LOGIQUE ALGORITHMIQUE
Suites numériques Définitions.
INTRODUCTION.
Université de Sherbrooke
ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.
Décomposition et paramétrage des algorithmes
Un survol du language C.
 Syntaxe du langage PHP
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Introduction et Généralités sur l’Algorithmique
Les algorithmes recursifs
Chapitre 1 Nombres relatifs.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
Module algorithmique et programmation
Scripts et fonctions Instructions de contrôle
Algorithmique Tableaux de données
Abder Alikacem Semaine 4 Synthèse
Objets et Actions Élémentaires.
Algorithmique Boucles et Itérations
Programme de baccalauréat en informatique Algorithmique et programmation IFT Abder Alikacem Abder Alikacem Semaine 3 Bâtir un algorithme Département.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

Abder Alikacem Semaine 3 Bâtir un algorithme Programme de baccalauréat en informatique Algorithmique et programmation IFT-17582 Abder Alikacem Semaine 3 Bâtir un algorithme Département d’informatique et de génie logiciel

Lecture: chapitre 3 des notes de cours 01/04/2017 Plan Retour sur les outils algorithmiques Conception des algorithmes La documentation dans les algorithmes Les types de données Lecture: chapitre 3 des notes de cours Vice-rectorat à la recherche / octobre 2005

Étapes de la construction d’un programme Programmation impérative Définition Propriétés Le paradigme Variable Constante Notion d’état Algorithme Problème Description formelle Programme Analyse et définition des besoins Spécification du programme Conception Programmation Tests et validation Maintenance Documentation du programme Ordinateur Solution

La validation de données Retour sur les assertions (1) La validation de données Répéter début DEMANDER n fin Tant Que (???) DEMANDER n {A: n est un entier compris entre 0 et 10} Répéter début DEMANDER n fin Tant Que (????) DEMANDER n {A: n vaut 1 ou 2}

Retour sur les structures d’alternatives SI condition est vrai alors DÉBUT Instructions v FIN SINON Instruction f Début Si n = 0 Alors fact  1 Fin Sinon Si n = 1 Alors Répéter  i  [2, n] fact  fact * i

Structures d’alternatives Cas V de v1 : b1 v2 : b2 . vn : bn Autrement c FinCas Début Cas n de 0 : Début fact  1 Fin 1 : Début Autrement : Répéter  i  [2, n] fact  fact * i FinCas

Structures de répétitions Répéter début Bloc i  i + 1 fin Tant Que i <= n Répéter  i  [1, n] début Bloc fin i  1 Répéter n fois début Bloc i  i + 1 fin i  1 Tant Que i <= n début Bloc i  i + 1 fin

Algorithme : Calculer n! pour un entier n  0 début Remarque On doit faire précéder la structure de contrôle de la boucle Tant Que par des instructions de démarrage (initialisation). Algorithme : Calculer n! pour un entier n  0 début { Assertion : n est un entier  0  } i  0 fact  1 Tant que i < n i  i + 1 fact  fact * i fin Il est impératif que dans tout schéma de répétition conditionnelle la valeur de la condition puisse changer, sinon nous serions dans une boucle sans fin (boucle infinie); Pour s’assurer qu’un algorithme structuré se termine il est suffisant de vérifier que chaque boucle se termine. Une première condition nécessaire est qu’au moins une des variables de la condition c soit modifiée dans la portée de la boucle.

Technique de la sentinelle Dans le cas du mode conversationnel, la fin d’une suite d’informations saisie à l ’aide d’un processus itératif est indiquée au moyen de la technique de la sentinelle. Début total  0 n  0 Demander note { A: .. } Tant Que note  -1 total  total + note n  n + 1 {A: .. } Fin moyenne  total / n Afficher moyenne

Conception d’algorithmes Instance d'un problème = Ensemble de données pour calculer une solution d’un problème. Idée de base Abstraire Décomposer Combiner Structuration des actions Séquentielle Conditionnelle Itérative Tout ce qu’on peut faire sur ordinateur peut être exprimé au moyen de l’affectation, d’alternatives et des répétitions. Problème Algorithme Ensemble de résultats

Les commentaires dans les algorithmes Vous aurez à considérer 4 types de commentaires Les commentaires généraux. Identifier les grandes étapes de l’algorithme Expliquer certaines séquences d’opérations qui peuvent sembler plus ou moins claires à première vue - Les assertions. - Les commentaires de spécification formelle; - Les commentaires de spécification d’un bloc;

Les pré-conditions Les post-conditions Les assertions (2) Les pré-conditions Début Demander n { Assertion : n est un entier  0 } Si n = 1 ou n = 0 alors fact  1 Fin Sinon Répéter  i  [1, n] : fact  fact * i { Assertion : n est un entier  0 inchangé et fact contient n!} Si Alors Les post-conditions

L’approche descendante Elle consiste à considérer un problème dans son ensemble, préciser les données nécessaires et les résultats attendus décomposer le problème en plusieurs sous-problèmes plus simples qui seront traités séparément et éventuellement décomposés eux-mêmes de manière encore plus fine (raffinement)

L’approche descendante Exemple p.32 dans les notes de cours Imaginons un robot domestique à qui nous devons fournir un algorithme lui permettant de préparer une tasse de café soluble. Une première version de l'algorithme pourrait être: (1) faire bouillir de l'eau (2) mettre le café dans la tasse (3) ajouter l'eau dans la tasse

L’approche descendante (1) faire bouillir l'eau peut être affinée en (1.1) remplir la bouilloire d'eau (1.2) brancher la bouilloire sur le secteur (1.3) attendre l'ébullition (1.4) débrancher la bouilloire (2) mettre le café dans la tasse pourrait être affiné en (2.1) ouvrir le pot à café (2.2) prendre une cuillère à café (2.3) plonger la cuillère dans le pot (2.4) verser le contenu de la cuillère dans la tasse (2.5) fermer le pot à café

L’approche descendante (3) ajouter de l'eau dans la tasse pourrait être raffinée en (3.1) verser de l'eau dans la tasse jusqu'à ce que celle-ci soit pleine Certaines étapes sont encore trop complexes pour notre robot, il faut les raffiner davantage. (1.1) remplir la bouilloire d'eau peut être raffiné comme suit: (1.1.1) mettre la bouilloire sous le robinet (1.1.2) ouvrir le robinet (1.1.3) attendre que la bouilloire soit pleine (1.1.4) fermer le robinet

L’approche descendante Quand doit-on arrêter le raffinement? Chaque décomposition sera encapsulée dans un bloc d ’instructions (bloc algorithmique). La décomposition fonctionnelle permet de rapides construction de programmes (travail d’équipe), la possibilité de leur réutilisation, une rapide et efficace maintenance. Blocs algorithmiques Utilisés afin de découper un algorithme en plusieurs sous-tâches. Cette façon de procéder s’inscrit très bien dans l’approche descendante et la décomposition fonctionnelle. Chaque tâche à accomplir est alors détaillée au sein d’un bloc algorithmique.

Exemple (2) Un algorithme qui ajoute une journée à une date donnée.

DEBUT DEMANDER j,m,a {A: a représente une année dans le calendrier grégorien, m un mois dans l’année et j un jour du mois} max  30 SI m=1 OU m=3 OU m=5 OU m=7 OU m=8 OU m=10 OU m=12 ALORS début max  31 fin SI m=2 ALORS début max  28 SI (a % 4 = 0) ET NON (a % 100 =0) ALORS début max  29 SI (a % 400=0) ALORS début j  j+1 SI j>max ALORS début j  1 m  m+1 SI m>12 ALORS début m  1 a  a+1 AFFICHER j,m,a {A: j, m et a représentent la date du lendemain} FIN

Les blocs algorithmiques On peut ré-écrire l’algorithme lendemain de la façon suivante: Bloc B1 – la date du lendemain DEBUT Déterminer une date (Bloc B2) Déterminer le dernier jour du mois m (Bloc B3) Déterminer la date du jour suivant (Bloc B4) AFFICHER « La journée suivante est: », j, m, a {A:….} FIN

Les blocs algorithmiques Bloc B2 – Déterminer une date DEBUT DEMANDER j, m, a {A: j est un entier compris entre 1 et 31} {A: m est un entier compris entre 1 et 12} {A: a est un entier représentant une année dans le calendrier} {A:…} FIN

Les blocs algorithmiques Bloc B3 – Déterminer le dernier jour du mois DEBUT max  30; SI m=1 OU m=3 OU m=5 OU m=7 OU m=8 OU m=10 OU m=12 ALORS max  31; FIN SI m=2 ALORS début max  28; SI a est une année bissextile (voir B5) ALORS début max  29; fin {A:…}

Les blocs algorithmiques Bloc B4 – Déterminer la date du jour suivant DÉBUT j  j+1; SI j > max ALORS début j  1; m  m+1; SI m>12 ALORS début m  1; a  a+1; fin {A:…} FIN

Les blocs algorithmiques Bloc B5 Vérification si une année donnée est une année bissextile DEBUT bis  FAUX SI (a % 4 = 0) ET NON (a % 100 = 0) ALORS début bis VRAI; fin SI (a % 400=0) ALORS début bis  VRAI; {A:…} FIN

Les commentaires de spécification dans les algorithmes Vous aurez à considérer 4 types de commentaires des commentaires explicatifs; des commentaires du type assertions; les commentaires de spécification formelle d’un bloc; les commentaires de spécification internes à un bloc;

Les commentaires de spécification Les (4) commentaires de spécification formelle nous aideront à spécifier l’interface de chaque bloc issu d’une décomposition. Les (8) commentaires internes à un bloc nous aideront à construire les instructions du bloc tout en assurant sa rapide maintenance.

Les commentaires d’interface d’un bloc L’en-tête : du bloc d ’instruction implantant une tâche Pré-conditions :conditions devant être vraies au départ pour assurer le bon fonctionnement du bloc d ’instructions Post-conditions :conditions étant vraies (observables) après exécution (correcte, i.e. les pré-conditions sont respectées) des instructions du bloc. Sinon, indiquer la ou les actions à entreprendre dans l ’exécution du bloc. Valeur(s) retournée(s) : en output de l ’exécution des instructions du bloc si les pré- conditions sont respectées, sinon indiquer ce que fournira le bloc.

Les commentaires de spécification internes Les commentaires de spécification servent à spécifier un bloc d’un algorithme: Ce qu’il fait La façon dont il procède pour atteindre son but Les données nécessaires Les résultats qu’il fournit Ces commentaires sont internes aux blocs. Ils aideront au développement rapide des blocs, ainsi qu’à leur validation de façon plus efficace.

Les (8) commentaires de spécification d’un bloc Définitions Objectifs: ce commentaire sert à décrire le but visé par le bloc. Méthode: la façon dont on procède pour atteindre le but décrit au commentaire précédent Besoins: toutes les données dont le bloc aura besoin pour atteindre son but. Connus: les données que l’on connaît d’avance, que l’on n’aura pas besoin de demander au bloc appelant ni à l’usager.

Les (8) commentaires de spécification d’un bloc Entrées: les données qui parviennent du bloc appelant. Sorties: les données que le bloc renvoie au bloc appelant Résultats: toute conséquence du bloc qui n’est pas visible par les autres blocs, exemple: les affichages. Hypothèses: Les conditions nécessaires au bon fonctionnement du bloc. Ces hypothèses concernent: les données en entrée du bloc; les données lues (saisies) dans le bloc.

Validation des hypothèses Les assertions (3) DEMANDER nbEtudiants {Assertion: nbEtudiants  0} Bloc B2… {.. Besoin : n , le nombre entier dont il faut calculer le factoriel Entrée : n  .. Hypothèses : n  0 } Début {début du bloc} {A: n  0 } ….. Validation des hypothèses

Les assertions (4) Bloc B3.. Les post-conditions { les 8 commentaires de spécification internes } début {début du bloc} … {A: post-condition de B3} fin {fin du bloc} Bloc B1… début{début du bloc} Calcul de la moyenne d'une série de notes (voir B3) {A: la variable moy contient la moyenne des notes} …. {A: post-condition de B1} Les post-conditions

Exemple 3 (très simple) Bloc B1: Calculer la somme de deux entiers positifs { Objectif: Calculer et afficher la somme de deux entiers positifs Méthode: usage de l’opérateur d’addition Besoin: a et b : les deux entiers Connu: - Entrée: - Sortie: - Résultat: la somme des deux entiers Hypothèses : a et b > 0 } Début Saisie des données ( Voir Bloc B 2 ) {A : a et b sont deux entiers positifs} Calcul de la somme de a et b ( Voir Bloc B3 ) {A : somme contient la somme des deux entiers} Affichage de la somme (Voir bloc B4 ) {A : La somme est affichée à l’usager}  {A : La somme de deux entiers positifs est calculée} fin.

Bloc B2: Saisie des données { Objectif : Saisie de données Méthode : Sollicitation de l’usager Besoin: entier1 et entier2 : deux entiers Connu: - Entrée: - Sortie: entier1, entier2 Résultat: - Hypothèses : entier1 et entier2  sont deux entiers positifs } Début Demander entier1, entier2 {A : entier1 et entier2 sont deux entiers positifs}   {A : La saisie de données est effectuée} Fin.

Bloc B3: Calculer la somme de deux nombres { Objectif: Calculer la somme de deux nombres Méthode: usage de l’opérateur d’addition Besoin: x et y : les deux nombres Connu: - Entrée: x, y Sortie: la somme de x et y Résultat: - hypothèses : x et y sont deux nombres} Début {A : x et y sont deux nombres}   z  x + y {A : z contient la somme de x et y} Fin.

Bloc B4: Affichage d’un nombre entier { Objectif: afficher un nombre entier Méthode: sollicitation du périphérique de sortie Besoin: w : le nombre Connu: - Entrée: w Sortie: - Résultat: affichage de w Hypothèses : w est un nombre entier} Début {A : w est un nombre entier}   Afficher w {A : un nombre entier est affiché} Fin.

Exemple 4 Écrire un algorithme qui calcule une approximation de ex, le nombre népérien. Les données en entrée ? Les données en sortie ?

Exemple 4 L’algorithme ?

Exemple 4 Le critère d’arrêt ?

Exemple 4 Le critère d’arrêt ? Fixer un n.

Bloc B1 : Calculer et afficher ex Objectif : Calculer ex Méthode : Approximation par le développement en série Besoins : x : L’exposant N : Le nombre d’itérations Connu : N (entier > 0) Entrée : Aucune Sortie : Aucune Résultat : Afficher l’approximation de ex Hypothèse : x est un réel.

Bloc B1 : Calculer et afficher ex DÉBUT DEMANDER x {A : x est un nombre réel} Approximer ex {voir le bloc B2} {A : résultat contient l’approximation de ex} AFFICHER résultat {A : Le résultat est affiché à l’utilisateur} FIN

Bloc B2 : Calculer ex Objectif : Calculer ex Méthode : Approximation par le développement en série Besoins : x : l’exposant N : Le nombre d’itération Connu : N (entier > 0) Entrée : x Sortie : L’approximation de ex Résultat : Aucun Hypothèse : x est un réel.

début Bloc B2 : Calculer ex DÉBUT {A : x est un réel} résultat  1 Si x≠0 Alors début i  1 TANT QUE i < N Calculer la factoriel de i ( voir le bloc B3) {A : fact contient le factoriel de i} Calculer x exposant i (voir le bloc B4) {A : xi contient x exposant i } résultat  résultat + (xi/fact) i  i+1 FIN fin {A : résultat contient l’approximation de ex}

Bloc B3 : Calculer la factoriel de n Objectif : Calculer la factoriel de n Méthode : 1 * 2 * 3 * … * (n-1) * n Besoins : n : un entier. Connu : Aucun Entrée : n Sortie : La factorielle de n Résultat : Aucun Hypothèse : n est un entier positif ou nul

Bloc B3 : Calculer la factoriel de n DÉBUT {A : n est un entier positif ou nul} x  1 k  1 {Si n = 0, x vaut 1 et on n’entre pas dans la boucle} TANT QUE k < n x  x * k k  k + 1 FIN {A : x contient n! }

Bloc B4 : Calculer x exposant i Objectif : Calculer x à la i Méthode : multiplier x par lui-même i fois Besoins : i : l’exposant x : un réel Connu : Aucun Entrée : i, x Sortie : x exposant i Résultat : Aucun Hypothèse : i est un entier positif ou nul

Bloc B4 : Calculer x exposant i DÉBUT {A : i est un entier positif ou nul} y  1 RÉPÉTER i FOIS y  y * x FIN {A : y contient xi }

Exemple 4 Le critère d’arrêt ? Fixer un n.

Exemple 4 Le critère d’arrêt ? Un degré de précision P.

PRISE II Bloc B2 : Calculer ex Objectif : Calculer ex Méthode : Approximation par le développement en série Besoins : x : l’exposant P : La précision Connu : P(réel > 0) Entrée : x Sortie : L’approximation de ex Résultat : Aucun Hypothèse : x est un réel.

PRISE II Bloc B2 : Calculer ex DÉBUT {A : x est un réel} résultat  1 {(x0/0!) = 1} SI x  0 ALORS DEBUT résultat2  1 résultat  1 + x {resultat + (x1/1!) =1+x} i  2 TANT QUE résultat – résultat2 > P Calculer la factoriel de i (voir bloc B3) {A : fact contient i!} Calculer x exposant i {B4} {A : xi contient x exposant i} résultat2  résultat résultat  résultat + (xi / fact) i  i+1 FIN {A : résultat contient l’approximation de ex avec une précision égale à P} PRISE II

Conception d’un bloc algorithmique Bx Réutilisation Primitives Conception d’un bloc algorithmique Bx

Conception d’un autre bloc algorithmique (Bn) Réutilisation Primitives Conception d’un autre bloc algorithmique (Bn) Bx

Passage de paramètres Algorithme Bloc B3 Paramètre formel Bloc B2 DEBUT … … B3( i ) FIN n Algorithme Bloc B3 Paramètre effectif i n!

Lecture: RepresentationDeDonnées.htm, semainier/Semaine3 01/04/2017 Les types de données Les types prédéfinis Les types composites Notion de tableau Algorithmique des tableaux Lecture: RepresentationDeDonnées.htm, semainier/Semaine3 Vice-rectorat à la recherche / octobre 2005

Les types de données Justification du concept de type Classer les objets selon : L'ensemble des valeurs que peut prendre l'objet L'ensemble des opérations permises sur ces valeurs Les types élémentaires Les types composites Tableaux Structures Fichiers Etc.. Opérations Sur le composé Sur les composants du composé

définis explicitement Classification types prédéfinis définis explicitement Types prédéfinis Booléen, Caractère, Entier, Réel, Chaîne

Notion de tableau 1 indices N Caractéristiques Taille fixe Collection indicée d'éléments de même type Taille fixe Accès aux composants Accès direct Opérations de base Accès à un élément par son indice Algorithmes classiques Recherche d'un élément Tri de tableau selon une relation d'ordre (>, <) Fusion

Tableau à une dimension 1 N i -3 5 7 2 -4 10 Définition t: tableau d’entiers de taille N //vecteur Accès au i-ème élément x  t [i] // i  1..N t [i]  10 // i  1..N Algorithme de base Répéter  i  [1,N] début traiter l’élément t[i] fin

Tableau à deux dimensions t : tableau NxM de réels // une matrice Accès aux composants t[i][ j]  5.67 // i  1..N; j  1..M x  t[i][ j] // i  1..N; j  1..M Algorithme de base Répéter  i  [1,N] // première dimension début Répéter  j [1,M] // seconde dimension Traiter l’élément t[i][ j] fin

Exemple. Algorithme avec un tableau Bloc B3: trier un tableau { Objectif: trier un tableau en ordre croissant Connu: - Entrées: tab: le tableau et nbValeurs: son nombre d’éléments Sorties: le tableau trié en ordre croissant Résultats: - Hypothèse: nbValeurs > 0 }

Début {A: nbValeurs > 0} Répéter i[1,nbValeurs-1] plusPetit  i Répéter candidat[i+1,nbValeurs] si(tab[candidat] < tab[plusPetit]) alors plusPetit  candidat Fin …….. tampon  tab[i] tab[i]  tab[plusPetit] tab[plusPetit]  tampon {A: tab est trié en ordre croissant}

Retour au laboratoire #1 Syntaxe et sémantique La syntaxe décrit les formes correctes que peuvent prendre les éléments (expressions) d'un programme. La sémantique correspond à la signification des formes syntaxiques (c'est à dire aux constructions) d'un langage.

Un programme doit être syntaxiquement correct Retour au laboratoire #1 Syntaxe = l’ordre des éléments pour former une séquence correcte Compilateur Détecte les erreurs de syntaxe Indique approximativement le lieu Est incapable de les corriger Un programme doit être syntaxiquement correct

Retour au laboratoire #1 Sémantique = Quel est le sens de ce qu’on écrit? Erreurs sémantiques Pas vues par le compilateur Découvertes lors de l’exécution du programme Il « plante » Il ne fait pas ce qui est demandé Il ne s’arrête plus …

Laboratoire #2 Les erreurs de type sémantique dans un programme sont dues généralement à une mauvaise construction de l’algorithme correspondant (résolution du problème erronée). Un manière de contrer ce problème est de tester tout algorithme conçu (trace à la main : simulation à la main de l’exécution d’un algorithme) en choisissant adéquatement le jeu de données pour cette fin (il faut toujours penser aux cas limites ou d’exception). Attention : rien ne prouve qu’un algorithme est correct s’il passe correctement tous les tests que l’on peut imaginer! Il existe d’autres méthodes plus formelles pour démontrer l’exactitude d’un algorithme donné. On en reparlera sûrement.

Laboratoire #2 Voici ce que vous êtes supposés de connaître: L'architecture de Von Neuman: les périphériques d’entrée, de sortie: assurent la "conversation" avec un ordinateur via le clavier, l'écran, lecteur quelconque etc… L’unité de commande et de contrôle: le chef d'orchestre capable d'interpréter les instructions d'un programme et lancer des "ordres" aux autres composantes afin qu'elles soient exécutées. L’unité arithmétique et logique: la calculatrice. La mémoire principale (rôle important dans la programmation impérative):la partie déclarative de variables, réservation de la mémoire pour y entreposer les données utiles à l’exécution de la mémoire. Cette mémoire est comme un espace de rangement avec des « tiroirs » de différentes tailles : dans la réservation, on doit indiquer le type du tiroir.

Laboratoire #3 Construction d’algorithmes simples Il n’est pas nécessaire qu’ils décomposent leur solution en plusieurs blocs. Si certains zélés s’essayent, il faudrait que leur décomposition soit naturelle : la décomposition modulaire doit venir de la manière qu’ils ont résolu le problème en suivant une démarche descendante, les grandes lignes de la solution , chaque grande ligne doit être raffinée dans un bloc à part, le raffinement doit se terminer lorsque chaque instruction est décrite à l’aide d’une instructions de base.

Algorithme, programme et ordinateur 01/04/2017 Exercices Algorithme Problème Transcription Description formelle Programme Langage de programmation Compilation Exécution Ordinateur Solution Langage machine Vice-rectorat à la recherche / octobre 2005

Un algorithme naïf 01/04/2017 Premier algorithme non trivial connu (295 avant J.C.): Algorithme d'Euclide pour calculer le plus grand commun diviseur de deux nombres entiers. Algorithme PGCD(m,n) i  min(n,m)+1 répéter i  i-1 Tant que i ne divise pas m et n Afficher i Vice-rectorat à la recherche / octobre 2005

Exercice. Algorithme d'Euclide 01/04/2017 Exercice. Algorithme d'Euclide Si n et m sont deux entiers > 0 avec par exemple n>=m, si r est le reste de la division de n par m, alors le PGCD de n et m vaut le PGCD de m et r. t m n 15 21 15 6 15 6 3 6 3 0 3 Le PGCD est le dernier reste non nul. Écrivez l’algorithme en pseudocode. Vice-rectorat à la recherche / octobre 2005

Exercice. La division entière 01/04/2017 Exercice. La division entière Écrire un algorithme, Division, qui effectue la division de deux entiers positifs (notés x et y) donnés en utilisant uniquement la soustraction et l’addition. L’algorithme doit afficher le résultat de la division ainsi que le reste. Vice-rectorat à la recherche / octobre 2005

Algorithme. Miroir d’un nombre entier 01/04/2017 Algorithme. Miroir d’un nombre entier Vice-rectorat à la recherche / octobre 2005

Exercice. Les nombres parfaits 01/04/2017 Exercice. Les nombres parfaits Écrire un algorithme qui affiche la suite de tous les nombres parfaits inférieurs ou égaux à un nombre, entier positif donné noté n. Un nombre est dit parfait s’il est égal à la somme de ses diviseurs stricts. Exemple : 28 est un nombre parfait car 28 = 1 + 2 + 4 + 7 + 14 Voici la liste des nombres parfaits inférieurs à 10000 : 6, 28, 496, 8128. Vice-rectorat à la recherche / octobre 2005

Exercice. Rosalie dans le labyrinthe 01/04/2017 Exercice. Rosalie dans le labyrinthe Sortie Entrée Faire un pas devant elle. Tourner d'un quart de tour à gauche ou à droite. Détecter un mur placé devant elle. Détecter l'entrée du labyrinthe. Détecter la sortie du labyrinthe. Les primitives Vice-rectorat à la recherche / octobre 2005

Exercice. Le nombre d’or 01/04/2017 Exercice. Le nombre d’or Si l'on considère deux suites numériques (U) et (V) telles que: U1=U2=1 Un = Un-1 +Un-2, pour tout n, un entier > 2 Et V= Un/Un-1 On montre que, si n est suffisamment grand, V tend vers une limite appelée nombre d'or (1,61803398874989484820458683436564). Écrivez un algorithme qui calcule et affiche une approximation du nombre d'or tel que décrit précédemment. Vous devez réfléchir à la condition d’arrêt dans l’approximation du calcul de V. Vice-rectorat à la recherche / octobre 2005

Exercice. Propriété de nombres particuliers 01/04/2017 Exercice. Propriété de nombres particuliers 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. Vice-rectorat à la recherche / octobre 2005

Exercice. Trace d’un algorithme 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)

Exercice…suite Proposez une décomposition fonctionnelle de l’algorithme précédent. Complétez chaque bloc par: les assertions aux endroits requis; les 8 commentaires de spécification internes.

Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL

J’ai besoin de quoi? Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin J’ai besoin de quoi? Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL

Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin On quitte B1 Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL

J ’ai besoin de quoi? Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin On a quitté... Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL J ’ai besoin de quoi?

CP et CL! Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin On a quitté... Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL CP et CL!

CP et CL! Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin Flux de données entre B1 et B2 Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL CP et CL!

CP CP CP…CL Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin CP Une entrée Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL CP CP…CL Une sortie

Le point d ’appel Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin Le point d ’appel Bloc B2: le traitement début Demander CL SI CL = CP ALORS début Afficher le caractère de soulignement '_ ’ fin Afficher CL CP  CL On revient au point d’appel

Paramètres formels de B2 Bloc B1: un traitement bien spécial début Demander CP Afficher CP TANT QUE CP  ‘!’ faire le traitement (voir détails Bloc B2) fin Paramètre formel deB1 mais effectif pour B2 Bloc B2: le traitement début Demander CL SI CL = X ALORS début Afficher '_ ’ fin Afficher CL X  CL Paramètres formels de B2

Bloc B1: un traitement bien spécial {Objectif: intercaler le caractère de soulignement entre chaque suite de 2 caractères identiques dans une phrase fournie par l'usager Méthode: lecture séquentielle d'une suite de caractères, test sur 2 caractères successives Besoin: la phrase à traiter Entrée: - Connu: - Sortie: - Résultat: ré-affichage de la phrase avec éventuellement le caractère '_' séparant deux caractères successifs identiques. Hypothèse: la phrase se termine par le caractère ‘!’ }

Bloc B2: le traitement {Objectif: ajout du caractère de soulignement entre 2 caractères successifs identiques Méthode: comparaison de 2 caractères successifs Besoin: CP : le caractère précédent, CL: le caractère suivant Entrée: CP Connu: - Sortie: le caractère suivant Résultat: affichage éventuel du caractère '_', CL Hypothèse: CP et CL sont deux caractères }

Exercice Question Est ce que c’est le même espace mémoire qui est associé à CP dans B1 et B2? En d’autres termes, est ce que c’est la même variable? Attention, ne confondez pas valeur assignée à une variable et variable (l’abstraction d’une cellule mémoire).

Algorithme d'Euclide (version moderne) 01/04/2017 Algorithme d'Euclide (version moderne) Si n et m sont deux entiers positifs avec par exemple n>=m, si r est le reste de n par m, alors le PGCD de n et m vaut le PGCD de m et r. Demander m, n {A:……………..} Tant que m>0 début t  m m  n % m n  t fin Afficher n t m n 15 21 15 6 15 6 3 6 3 0 3 Le PGCD est le dernier reste non nul. Vice-rectorat à la recherche / octobre 2005

Solution #1 Demander nombreMax nombreCourant  1 01/04/2017 Demander nombreMax nombreCourant  1 Tant que ( nombreCourant <= nombreMax ) debut sommeDiviseur  0 diviseurCourant  1 Tant que ( diviseurCourant < nombreCourant ) Si ( nombreCourant % diviseurCourant = 0 ) Alors début sommeDiviseur  sommeDiviseur + diviseurCourant fin diviseurCourant  diviseurCourant + 1 Si ( sommeDiviseur = nombreCourant ) Afficher nombreCourant nombreCourant  nombreCourant + 1 Vice-rectorat à la recherche / octobre 2005

Demander nombreMax nombreCourant  2 Tant que( nombreCourant <= nombreMax )  debut    diviseurMax  nombreCourant    diviseurCourant  2    sommeDiviseur  1    Tant que( diviseurCourant < diviseurMax )    debut       Si ( nombreCourant % diviseurCourant = 0 )          Alors début sommeDiviseur  sommeDiviseur + diviseurCourant                diviseurMax  nombreCourant / diviseurCourant                sommeDiviseur  sommeDiviseur + diviseurMax fin       diviseurCourant  diviseurCourant + 1    fin    Si ( sommeDiviseur = nombreCourant )       Alors début Afficher nombreCourant fin    nombreCourant  nombreCourant + 1 fin Solution #2 (?) 01/04/2017 28 = 1 + 2 + 4 + 7 + 14 Vice-rectorat à la recherche / octobre 2005

Une solution pour Rosalie! 01/04/2017 Une solution pour Rosalie! 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 sorti Tant que mur en face Faire un quart de tour à droite Fin Fin. Vice-rectorat à la recherche / octobre 2005

Rosalie dans le labyrinthe 01/04/2017 Rosalie dans le labyrinthe Algorithme: Sortir du labyrinthe en longeant le mur de gauche Début {A: Rosalie est en face de la porte d'entrée du labyrinthe } 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 {A: Rosalie est sortie du labyrinthe} Fin. Est ce utile de placer plus d’assertions? Vice-rectorat à la recherche / octobre 2005

La solution avec des assertions 01/04/2017 La solution avec des assertions Algorithme: Sortir du labyrinthe en longeant le mur de gauche Début {A: Rosalie est en face de la porte d'entrée du labyrinthe } Avancer d'un pas {A: Rosalie a le dos face de la porte d’entrée barrée} Faire un quart de tour à gauche {A: le mur à longer est à gauche} Tant que Rosalie n'est pas sorti Tant que mur en face Faire un quart de tour à droite Fin {A: il n'y a pas de mur en face} {A: Rosalie est dans la bonne direction} {A: Rosalie est sortie du labyrinthe} Fin. Quel est l’avantage? Vice-rectorat à la recherche / octobre 2005

Rosalie dans le labyrinthe 01/04/2017 Rosalie dans le labyrinthe Algorithme: Sortir du labyrinthe en longeant le mur de gauche Début {A: Rosalie est en face de la porte d'entrée du labyrinthe } {A: Rosalie a le dos face de la porte d’entrée barrée} {A: le mur à longer est à gauche} Tant que Rosalie n'est pas sortie Tant que mur en face Fin {A: il n'y a pas de mur en face} {A: Rosalie est dans la bonne direction} {A: Rosalie est sortie du labyrinthe} Fin. Vice-rectorat à la recherche / octobre 2005

Rosalie dans le labyrinthe Le problème de Rosalie revu avec la décomposition fonctionnelle

Bloc B1: Sortir du labyrinthe en longeant le mur de gauche { objectif: faire sortir le Rosalie du labyrinthe méthode: en longeant le mur de gauche besoin: - connu: - entrée: sortie: - résultat: Rosalie est sortie du labyrinthe hypothèses : Rosalie est en face de la porte d'entrée}  Début   {A: Rosalie est en face de la porte d'entrée du labyrinthe } avancer d'un pas {A: Rosalie a le dos face de la porte d’entrée barrée} Repérer le mur de gauche (voir bloc B2) {A: le mur à longer est à gauche} Longer le mur de gauche jusqu'à la sortie (voir bloc B3) {A: Rosalie est sortie du labyrinthe} Fin.

Bloc B2: Repérer le mur de gauche { objectif: repérer le mur de gauche méthode: pivoter une fois vers la gauche besoin: connu: - entrée: sortie: - résultat: Rosalie a fait un quart de tour à gauche hypothèses : - } Début   Faire un quart de tour à gauche {A: le mur à longer est à gauche} Fin

Bloc B3: Longer le mur de gauche jusqu'à la sortie { objectif: longer le mur de gauche jusqu'à la sortie méthode: avancer d'un pas et longer le mur de gauche besoin: connu: - entrée: sortie: - résultat: Rosalie est sortie du labyrinthe par la porte de sortie hypothèses : - } Début Tant que Rosalie n'est pas sortie avancer d'un pas en longeant le mur de gauche (voir bloc B4) {A: Rosalie avance d'un pas en longeant le mur de gauche} Fin {A: Rosalie est sorti du labyrinthe }

Bloc B4: Avancer d'un pas en longeant le mur de gauche { objectif: avancer d'un pas en longeant le mur de gauche méthode: se mettre dans la bonne direction et avancer d'un pas besoin: connu: - entrée: sortie: - résultat: Rosalie avance d'un pas en longeant le mur de gauche hypothèses : -} Début   se mettre dans la bonne direction (voir bloc B5) {A: Rosalie est dans la bonne direction} avancer d'un pas {A: Rosalie avance d'un pas en longeant le mur de gauche} Fin

Bloc B5: Se mettre dans la bonne direction { objectif: se mettre dans la bonne direction méthode: faire des quarts de tour besoin: connu: - entrée: sortie: - résultat: Rosalie est dans la bonne direction hypothèses : -} Début faire un quart de tour à gauche Tant que mur en face faire un quart de tour à droite Fin {A: il n'y a pas de mur en face} {A: Rosalie est dans la bonne direction}

Solution. Propriété de nombres particuliers 01/04/2017 Solution. Propriété de nombres particuliers On peut chercher à décomposer un cube à partir de 1 : S = (1 + 3 + ... + (2p-1) + (2p+1)) en incrémentant p jusqu'à ce que S ≥ n3. En cas de dépassement (S > n3), il faut alors éliminer les nombres impairs les plus faibles à gauche : S = ((2q-1) + (2q+1) + ... + (2p-1) + (2p+1)) jusqu'à ce que S = n3 (en incrémentant successivement q et p on finit par atteindre n3 exactement). Vice-rectorat à la recherche / octobre 2005

Solution. Propriété de nombres particuliers 01/04/2017 Solution. Propriété de nombres particuliers Algorithme: développement d’un cube en une série de nombres impairs consécutifs. Début Demander n {A: n est un nombre entier > 0} cube  n*n*n s  0 p  1 k  1 Tant que (s  cube) début si (s>cube) alors s  s - (2*k-1) k  k + 1 fin si ( s<cube) alors s  s + (2*p -1) p  p + 1 premier  2*k -1 {le premier terme de la série} dernier  2* (p-1) -1 {le dernier terme} Afficher cube " = " k  premier Tant que (k < dernier) début Afficher k " + " k  k+2 fin Afficher dernier {A: n3 est développé en une série de nombres impairs consécutifs} Vice-rectorat à la recherche / octobre 2005

Solution. Le nombre d’or 01/04/2017 Algorithme: Calcul du nombre d’or Début Demander précision {A : précision est un nombre réel compris entre 0 et 1 exclusivement {précision est l’écart minimum qui sera toléré entre 2 calculs successifs pour arrêter les itérations. Par exemple : 0.0001 u11 u21 Répéter u3 u2+u1 v1 u2/u1 {v1 est une approximation du nombre d’or v2  u3/u2 {v2 est l’approximation suivante u1 u2 u2 u3 diff  v2-v1 {on détermine l’écart entre 2 calculs successifs Si ( diff < 0) Alors {simulation de la valeur absolue début diff  -diff fin Tant Que ( diff > précision) {on répète tant qu’on a pas atteint la précision souhaitée Afficher v2 {A : v2 contient une approximation du nombre d’or Fin Vice-rectorat à la recherche / octobre 2005

Algorithme. Miroir d’un nombre entier Début Demander n {A: n est un entier ≥ 0} a0 Tant que (n  0) début a  a*10 + n%10 n  n÷10 fin Afficher a {A: a contient la valeur miroir de n} Fin

x * x ³ 0 ET ( x + 1 ) * ( x + 1 ) < 16 2 3 4 9 V V 01/04/2017 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 Vice-rectorat à la recherche / octobre 2005

x x 0 x 1 x 1 16 2 * ³ < + L’unité arithmétique et logique 01/04/2017 L’unité arithmétique et logique Un exemple d’évaluation d’expression: x x 0 x 1 x 1 16 2 * ³ < + ET Vice-rectorat à la recherche / octobre 2005