Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Qualité en Développement Laurent Henocque Enseignant Chercheur ESIL/INFO France
Chapitre annexe. Récursivité
Tests et Validation du logiciel
Dans cette partie Graphes Eulériens.
Initiation à la programmation et algorithmique cours 2
Spécification et qualité du logiciel

Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
CHAPITRE 5 Divisions et Problèmes
LA RECIPROQUE DE THALES
Puissance d’un nombre relatif (21)
II- Les structures de contrôle à condition d’arrêt
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Page 1 Déboguer un programme Java Jacques Lonchamp.
Exercice Notre programme s'exécute en 10 secondes sur A, qui dispose d'une horloge à 100Mhz. Nous tentons d'aider un concepteur à construire une machine.
Jean-Jacques Lévy INRIA Preuves de programmes et méthodes formelles Microsoft TechDays - 9 février 2010.
VBA / Excel TP 6 La boucle FOR.
ACTIVITES MENTALES Collège Jean Monnet Préparez-vous !
Section VI Structures répétitives (suite)
PHOTOGRAPHIE OUVERTURE /VITESSE
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Conception et analyse des algorithmes
XT-SOFT SQL-TUNE. 2 Menu dAccueil 3 Sélection des Statistiques Maintenant allons sur Statistics : PF4 04 par PF4 ou en entrant dans Enter option : la.
TP math-G-101.
Récursivité.
Algorithmique et Programmation
Les éléments de base de l’algorithmique
Structures de contrôle de l’exécution
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Sémantique axiomatique
Programmation logique Démonstrateur automatique
Algorithmique et Programmation
Les itérations (boucle) Les routines Les Fonctions
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
CSI3525: Concepts des Languages de Programmation
Comment calculer le grossissement d’un objet

Partie II Sémantique.
Sémantique dénotationnelle
SOMME cours 4.
Répéter dans un programme avec une Instruction itérative
Les boucles imbriquées
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Paradigmes des Langages de Programmation
La Boucle Repeat Cours LCS N°1 Présenté par Mr: LALLALI.
Amélioration de la simulation stochastique
Les structures répétitives en PHP Réfs : manuel p 317.
1 Algorithmique et programmation en Itérations (boucles) Types numériques simples (suite)
TD0 - Rappels. Acquis du programme 1 ère année Analyser et modéliser : un problème, une situation ; Imaginer et concevoir : une solution algorithmique.
Programmation procédurale preuves D. Preuves Preuves sur les R-algorithmes. Règle de l'appel (Hoare). Exemple Preuves sur les B-algorithmes (Floyd) Automatisation.
Licence Informatique Algorithmique des graphes
Les tests.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
- Chap 7 - Fractions.
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
Activité mentale Indiquer vos nom et prénom sur votre feuille
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours d’Algorithmique Logique de Hoare (fin) : Les boucles et les invariants.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Pour les boucles FOR on a fait intervenir la boucles TANT QUE équivalentes dont on connaît calculer le temps d’exécution. Toutes le procédures de comptage.
Scripts et fonctions Instructions de contrôle
programmation linéaire
Algorithmique Boucles et Itérations
1 Spécifications de Problèmes. 2 Plan Définition Motivation Qualités attendues Types de formalismes Rappels du cours de programmation Spécifications structurées.
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
PhP 2. Tableaux et structures de contrôle. Les tableaux Définition –Rassemblement d’un ensemble de valeurs portant le même nom de variable –Types de tableaux.
Transcription de la présentation:

Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition de terminaison J = M N assertion de corretion Exécution réelle : p.ex.: M=3 et N=5 Exécution symbolique : M=m et N=n

Correction de Programmes H. Wertz2 Comment trouver une Invariante Nombre de fois lexécution traverse 2 Valeur de IValeur de J N 32 2 N ……… ……… M+1M M N J = I N Boucle M-fois exécutée

Correction de Programmes H. Wertz3 La preuve de correction (partielle) Démontrons par induction sur le nombre dexécution du point 2 que J = I N 1.Si ==1 alors I=0 et J=0 donc: J=I N=0 N 2.Supposons J n =I n N pas : I n+1 =I n +1 et J n+1 =J n +N alors : J n+1 =I n N + N (par hypothèse) =(I n +1) N =I n+1 N

Correction de Programmes H. Wertz4 La preuve de terminaison Il faut démontrer que si M 0 alors I=M après un nombre fini de pas Induction vers le haut sur I=m : faut démontrer que si M 0 avec 0 m M alors exécution arrive à 2 avec I=M 1) base : si m=0 alors I=0 et M=0 implique I=M 2) pas : I=m, 0 m M au point 2 montrons que lexécution arrive à 2 avec I=m+1 : si I=m, 0 m M non(I=M) une exécution de la boucle I=m+1 Fin de la preuve de J=I N et de la terminaison du programme

Correction de Programmes H. Wertz5 Calcul du Quotient et Reste 0<=J1, 1<=J2 (assertion dentrée) J1=IQ J2 + IR et 0<=IR<J2 (terminaison) J1=IQ*J2 + IR (invariante)

Correction de Programmes H. Wertz6 linvariante du programme 2 donc: IR = J1-IQ J2 donc : J1 = IQ J2 + IR nombre de fois lexécution traverse 2 Valeur de IQValeur de IR 10J1 21J1 – J2 32 J1 – 2 J2 43 J1 – 3 J2 ……… M+1M J1 – M J2

Correction de Programmes H. Wertz7 Preuve de correction du programme 2 Pour démontrer que J1=IQ J2+IR (au point 2) 1)base: IQ=0, IR=J1 2)Après 1 exécution de la boucle : IQ n+1 J2+IR n+1 =(IQ n +1) J2+IR n -J2 = J1 Puisquil ny a pas de modification sur le chmein 2 – 6 la correction est démontrée

Correction de Programmes H. Wertz8 Preuve de terminaison Condition de Terminaison : 0<=IR<J2 1)Démontrer 0<=IR a)IR=J1 et 0<=J1 b)0 = J2 alors IR n+1 =IR n -J2 0<=IR n – J2 = IR n+1 2) Démontrer IR<J2 puisque 1<=J2 et IR n+1 :=IR n -J2 alors IR n+1 <IR n

Correction de Programmes H. Wertz9 Sur la Terminaison (1) F(I) I + 1 soit I 0 >M et prog termine à n=1 Sinon, supposons quaprès n 0 exéc. le prog. termine, on a alors: 1)I>M et I I 0 +n 0 -1 (puisque F(I)- 1 I) Donc : M M-I )Et: n 0 M-I 0 +2 ( puisque dernière exec ) 1)&2) I I 0 +(M-I 0 +2)-1= M+1 Par induction : M< I 0 +n 0 -1 et I I 0 +n 0 -1 Après une exécution on a : I I 0 +n = I+n 0 > I 0 +n 0 -1

Correction de Programmes H. Wertz10 Sur la Terminaison (2) I-1 G(I) Soit I 0 < M alors à n=1 le prog. Termine Sinon, supposons quaprès n 0 exéc. le prog. termine, on a alors: Puisque G(I) I -1 I I 0 – (n 0 – 1) = I 0 – n I<M I 0 – n < M n 0 > I 0 –M+1 pour n 0 = I 0 –M+2 on a : I I 0 I 0 + M = M 1

Correction de Programmes H. Wertz11 3 ième programme exemple N, M 0 J = M N J=(M I)N nIJ 0M0 1M-1N 2M-2N+N=2N 3M-32N+N=3N 4M-43N+N=4N ……… mM-mmNmN J = (M – I) N

Correction de Programmes H. Wertz12 Preuve de la correction du 3 ième programme Preuve par induction sur le nombre de passages en point 2 Base : n=1 I=M (M-M) N = 0 = J = 0 M Pas : I n+1 = I n – 1 J n+1 = J n + N = (M – I n ) N + N( fertilisation ) = (M – I n + 1) N = (M – (I n – 1)) N = (M I n+1 ) N

Correction de Programmes H. Wertz13 Preuve de la terminaison du 3 ième programme Procédons par induction décroissante : M = 0 I = 0 arrêt du programme Soit I = m, 0 < m M Faut démontrer quaprès 1 exécution I = m – 1 Si I n = m non(I n = 0), donc une exécution de la boucle I n+1 := I n – 1 = m – 1 (puisque m > 0 m – 1 0)

Correction de Programmes H. Wertz14 3 ième programme exemple (avec erreur 1) Base : n=1 I=M (M-M) N = 0 = J = 0 M Pas : marche aussi prévu : I n = 1 J n = (M – I n ) N (en 5) J n = M N mais : (en 5) J n = (M – I n ) N = (M – 1) N M N

Correction de Programmes H. Wertz15 3 ième programme exemple (avec erreur 2) nIJ 0M1 1M-1N+1 2M-22N+1 3M-33N+1 4M-44N+1 ……… mM-mmN+1 Autre invariante : J=(M-I)N+1 et : J n = (M – I n ) N+1 = MN+1 MN

Correction de Programmes H. Wertz16 3 ième programme exemple (avec erreur 3) invariante : J=(M I+1)N Base : n=1 I=M (M-M+1)*N = N = J Pas : marche aussi I n = 1 J n = (M – I n +1) N J n = M N = (M – 1 + 1) N = MN = J Maintenant : M = 0 I 0 = 0 J 0 = N I 0 1 donc I 1 = 1, I 2 = 2, etc boucle infinie marche pour tout M > 0 et boucle pour M=0

Correction de Programmes H. Wertz17 un dernier exemple linvariante : nIJ 1I0I0 J0J0 2 I 0 1 J0+2J0+2 3 I 0 2 J0+4J0+4 4 I 0 3 J0+6J0+6 J = J 0 +2 ( I 0 I) u lassertion de sortie : J = J I 0

Correction de Programmes H. Wertz18 preuve de la correction base : n = 1: I = I 0, J = J 0 = J (I 0 I 0 ) hypothèse : J n = J 0 +2 (I 0 I n ) pas : J n+1 = J n + 2 I n+1 = I n 1 = J (I 0 I n ) + 2 = J I 0 I n + 2 = J (I 0 I n + 1) = J (I 0 I n 1)) = J (I 0 I n+1 ) I n = 0 J n = J (I 0 I n ) = J 0 + 2I 0

Correction de Programmes H. Wertz19 Exercices trouvez linvariante, démontrez la correction et la terminaison Sortie: J = M N Entrée: M,N 1 Entrée: M 1 Sortie: J=M!

Correction de Programmes H. Wertz20 et maintenant ? 2 1

Correction de Programmes H. Wertz21 Exemple de boucles imbriquées Entrée: X[1:M,1:N] Sortie: P = max(X) 1 I M P=X[1,1]si I=1 sinon max(X[1:I 1,1:N]) 1 I M 1 J N si I=1et J=1 alors P=X[1,1] sinon P=max(X[1:I 1,1:N] X[I,1:J 1])

Correction de Programmes H. Wertz22 Exemple de boucles imbriquées (suite) Pour démontrer la correction partielle du programme il faut démontrer chacun des chemins ci-dessous : 1.1 – – 4 – 6 – – – 7 – – 4 – – 8