Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAlfonse Guibert Modifié depuis plus de 10 années
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 : u11 u21 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} a0 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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.