La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Abder Alikacem Semaine 3 Bâtir un algorithme

Présentations similaires


Présentation au sujet: "Abder Alikacem Semaine 3 Bâtir un algorithme"— Transcription de la présentation:

1 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

2 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

3 É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

4 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}

5 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

6 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

7 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

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

9 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

10 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

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

12 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

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

14 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

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

16 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

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

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

19 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

20 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

21 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

22 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:…}

23 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

24 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

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

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

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

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

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

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

31 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

32 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

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

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

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

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

37 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 ?

38 Exemple 4 L’algorithme ?

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

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

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

42 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

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

44 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}

45 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

46 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! }

47 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

48 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 }

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

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

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

52 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

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

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

55 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!

56 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

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

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

59 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

60 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

61 Tableau à deux dimensions
t : tableau NxM de réels // une matrice Accès aux composants t[i][ j]  // 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

62 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 }

63 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}

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

65 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

66 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

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

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

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

70 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

71 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

72 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 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

73 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

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

75 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 = Voici la liste des nombres parfaits inférieurs à : 6, 28, 496, 8128. Vice-rectorat à la recherche / octobre 2005

76 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

77 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, ). É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

78 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 = = = Décrivez un algorithme qui lit un entier n strictement positif et donne une décomposition de n3. Vice-rectorat à la recherche / octobre 2005

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

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

81 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

82 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

83 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

84 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?

85 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!

86 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!

87 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

88 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

89 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

90 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 ‘!’ }

91 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 }

92 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).

93 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 6 3 6 3 0 3 Le PGCD est le dernier reste non nul. Vice-rectorat à la recherche / octobre 2005

94 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

95 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 = Vice-rectorat à la recherche / octobre 2005

96 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

97 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

98 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

99 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

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

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

102 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

103 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 }

104 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

105 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}

106 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 = ( (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

107 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

108 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 :  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

109 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

110 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

111 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 x x 2 * < + ET Vice-rectorat à la recherche / octobre 2005


Télécharger ppt "Abder Alikacem Semaine 3 Bâtir un algorithme"

Présentations similaires


Annonces Google