Feuille 1 Exercice 1 Exercice 2 Exercice 3 Exercice 4
Transcription
Feuille 1 Exercice 1 Exercice 2 Exercice 3 Exercice 4
Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 1 Exercice 1 On considère les expressions arithmétiques définies dans le cours. Soit a ∈ Aexp et σ et σ ′ deux états. Soit X l’ensemble des variables qui apparaissent dans a. 1. Montrer que A[a](σ[y 7→ n]) = A[a]σ si y n’apparait pas dans a. 2. Montrer que si σ(x) = σ ′ (x), pour tout x ∈ X, alors A[a]σ = A[a]σ ′ . 3. Soit a′ ∈ Aexp. Montrer que A[a[a′ /x]]σ = A[a]σ[x 7→ A[a′ ]σ] Exercice 2 Dérouler les règles de sémantique naturelle pour les programmes suivants, avec σ = {x 7→ 2, y 7→ 1} : • while ¬(x = 1) do (y := y ∗ x; x := x − 1) od • while 1 ≤ x do (y := y ∗ x; x := x − 1) od • while true do skip od Exercice 3 Démontrer que les commandes suivantes sont sémantiquement équivalentes pour tous S1 , S2 , S3 : 1. S1 ; (S2 ; S3 ) 2. (S1 ; S2 ); S3 Montrer que S1 ; S2 n’est pas en général sémantiquement équivalent à S2 ; S1 . Exercice 4 On veut ajouter la commande : repeat S until b au langage While. 1. Donner des règles sémantique pour définir repeat S until b sans utiliser la construction While. 2. Montrer que (a) repeat S until b et (b) S; if b then skip else (repeat S until b). sont sémantiquement équivalentes. 1 On veut montrer que la commande repeat S until b n’augmente pas son pouvoir expressif. Pour ce faire, donner une fonction qui transforme tout programme avec la commande repeat S until b en un programme dans le langage While. La transformation donnée est-elle calculable? Comparez la taille d’un programme et son image par la transformation. Exercice 5 Donner une sémantique naturelle et une sémantique opérationnelle pour les expressions arithmétiques. Exercice 6 On considère les programmes de l’exercice 2. Cette fois, σ est considéré quelconque. Pour chacune des commandes, déterminer si : 1. Son exécution boucle dans tous les états 2. Elle s’arrête dans tous les états Démontrez vos réponses. Exercice 7 Supposons qu’on a (S1 ; S2 , σ) ⇒∗ (S2 , σ ′ ). Montrer qu’on n’a pas nécessairement (S1 , σ) ⇒∗ σ ′ . Exercice 8 Montrer les affirmations suivantes: • Si (S1 , σ) ⇒k σ ′ alors (S1 ; S2 , σ) ⇒k (S2 ; σ ′ ). • Si (S, σ) → σ ′ alors (S, σ) ⇒∗ σ ′ . • Si (S1 ; S2 , σ) ⇒k σ ′′ alors il existe σ ′ et k1 avec : (S1 , σ) ⇒k1 σ ′ et (S2 , σ ′ ) ⇒k−k1 σ ′′ . • Si (S, σ) ⇒k σ ′ alors (S, σ) → σ ′ . Exercice 9 Montrer que la sémantique opérationnelle structurelle du langage While est déterministe. 2 Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 2 Exercice 10 Soit S le programme suivant : x := 0; z := 1 While z ≤ y Do x := x + z; z := z + 1; od; Utiliser la logique de Hoare pour montrer qu’on a {y = n ∧ n > 0}S{x = n × (n + 1) }. 2 Exercice 11 Soit S le programme suivant : u := 0; While x > 1 Do if pair(x) then x := x2 ; y := y ∗ 2 else x := x − 1; u := u + y fi od; y := y + u; Utiliser la logique de Hoare pour montrer qu’on a {x = x0 ∧ y = y0 ∧ x0 > 0}S{y = x0 ∗ y0 .} Exercice 12 Soit S le programme suivant : u := 0; While x ≥ 1 Do While pair(x) Do y := y ∗ 2; x := x2 od; x := x − 1; u := u + y od; Utiliser la logique de Hoare pour montrer qu’on a {x = x0 ∧ y = y0 ∧ x0 > 0}S{u = x0 ∗ y0 .} Exercice 13 3 Donner un programme S qui satisfait la spécification suivante et qui n’utilise que l’addition et la soustraction : {x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}S{z = n ∗ m} Démontrer à l’aide de la logique de Hoare que votre programme satisfait la spécification. Exercice 14 Donner un programme S qui satisfait la spécification suivante et qui n’utilise que l’addition et la soustraction : {x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}S{z = nm } Démontrer à l’aide de la logique de Hoare que votre programme satisfait la spécification. Exercice 15 On considère la commande For i = 1 to n do S od N où n est une constante dans et S est une commande dans laquelle i n’est pas modifé. Donner une règle sémantique et une règle de Hoare pour cette commande. Exercice 16 On ajoute la commande: repeat S until b au langage While. Donner une règle d’inférence pour repeat S until b. Montrer que votre règle est correcte. Exercice 17 Soit S le programme suivant : i := 0; While (i < length(t)) Do if (t[i] > t[i + 1]) then {aux := t[i]; t[i] := t[i + 1]; t[i + 1] := aux; } else {skip} i := i + 1; od; Utiliser la logique de Hoare pour montrer qu’on a 1. 2. {true}S{∀j (0 ≤ j ∧ j < length(t)) ⇒ t[j] ≤ t[length(t) − 1] }. {t = t0 }S{∃j (0 ≤ j ∧ j < length(t)) ∧ t[length(t) − 1] = t0 [j] }. 4 Exercice 18 Soit S le programme suivant : i := 0; index := −1; While (i < length(t)) Do if (t[i] = 0) then {index := index + 1; t[i] := t[index]; t[index] := 0; } else {skip} i := i + 1; od; def Soit ZeroOuU n(t) = ∀j (0 ≤ j ∧ j < length(t) − 1) ⇒ (t[j] = 0 ∨ t[j] = 1) et soit def Plength(t)−1 Somme(t) = t[i]. i=0 Utiliser la logique de Hoare pour montrer 1. {ZeroOuU n(t)}S{∀j (0 ≤ j ∧ j < length(t) − 1) ⇒ t[j] ≤ t[j + 1] }. 2. {t = t0 }S{somme(t) = somme(t0 )}. 5 Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 3 Exercice 19 Soit S1 le programme suivant : read(x); read(y); p:=x*y; while ((p>x) && (p>y)) do if ((p%x=0) && (p%y=0)) then {ppcm:=p;} p:=p-1; od write(ppcm); 1. Donner le graphe de contrôle du programme. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les noeuds. 4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les arcs. 5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-chemins-indépendants. Exercice 20 Manifestement, le code ne fonctionne pas lorsque les valeurs données en entrée sont égales. On propose de corriger l’erreur et on obtient le programme suivant S2 : read(x); read(y); p:=x*y; if (x=y) then ppcm:=x; else while ((p>x) && (p>y)) do if ((p%x=0) && (p%y=0)) then {ppcm:=p;} p:=p-1; od write(ppcm); 1. Donner le graphe de contrôle du programme. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les noeuds. 4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les arcs. 6 5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-chemins-indépendants. Exercice 21 Il existe toujours un problème avec le code du programme S2 , qui apparait lorsque le ppcm est égal à l’une des entrées. Proposez une correction du bug. Soit S3 le programme obtenu. 1. Donner le graphe de contrôle du programme. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les noeuds. 4. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les arcs. 5. Proposer un jeu de testes qui couvre le programme suivant le critère ture de condition-décision multiple. 6. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous-les-chemins-indépendants. de couverde couverde couverde couver- Exercice 22 L’UE “Validation d’alg” de L3Miage cherche un moyen qui permettrait de motiver ses étudiants. Les éxperts décident qu’il faut un programme qui demande à chaque étudiant d’entrer ses notes (de Contrôle Continue) n1 et n2 sur 20, qui calcule et affiche la moyenne des deux notes et qui affiche les appréciations suivantes selon les cas. Appréciations Conditions Mettez vous au travail ! pour une moyenne comprise entre 0 et 5 (exclu) Travaillez plus ! pour une moyenne entre 5 et 10 (exclu) Résultats encourageants si la moyenne vaut 10 et que les notes n1, n2 sont égales ou croissantes Résultats trop justes si la moyenne vaut 10 et que les notes n1, n2 sont décroissantes Vous pouvez encore progresser si la moyenne est inférieure à 15 Continuez ainsi si la moyenne est supérieure ou égale à 15 Résultats stables si n1 est égale à n2 et strictement supérieur à 7 Résultats désespérement stables si n1 est égale à n2 et inférieur à 7 Ne vous relchez pas si n2 est moins bonne que n1 En légère progression si la note n2 est meilleure que n1 mais que l’écart est d’un point seulement En nette progression si la note n2 est meilleure que n1 avec un écart de plus d’un point Le programme doit afficher plusieurs appréciations lorsque plusieurs conditions sont satsifaites. Soit S4 le programme suivant : 7 read(n1) ; read(n2) ; moy = (n1+n2)/2 ; printf("Moyenne : %2.2f/20", moy) ; if (0<= moy && moy < 5) then { write("\nMettez vous au travail !") ; } if (5<= moy && moy <10) then { write("\nTravaillez plus !") ; } if (10 = moy) then { if (n1>=n2) { write("\nResultats encourageants.") ; } else { write("\nResultats trop justes.") ; } } if (n1=n2) then { write("\nResultats ") ; if (n1<=7) then { write("desesperement ") ; } write("stables") ; } else { if (n2<n1) then { write("\nNe vous relachez pas.") ; } else { if (n2<n1+1) then { write("\nEn legere progression.") ; } else { write("\nEn nette progression.") ; } } } if (moy < 15) then { write("\nVous pouvez encore progresser.") ; } if (moy >= 15) then { write("\nContinuez ainsi.") ; } 1. Donner le graphe de contrôle des programmes. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre les programmes suivant le critère verture de tous les noeuds. 4. Proposer un jeu de testes qui couvre les programmes suivant le critère verture de tous les arcs. 5. Proposer un jeu de testes qui couvre les programmes suivant le critère verture de condition-décision multiple. 6. Proposer un jeu de testes qui couvre les programmes suivant le critère verture de tous-les-chemins-indépendants. 7. Donner votre avis sur la correction du programme. Exercice 23 Soit S5 le programme suivant : scanf("%i",&a) ; i=1; primes[0] = 2; 8 de coude coude coude cou- n = 3; count = 0; while (count!=a) do { i = 0; found = 1; if (n<=a) while ( primes[i] && primes[i]*primes[i]<=n) { if ( (n % primes[i]) == 0 ) { found = 0; break; } i:=i+1; } if ( found ) { primes[i] = n; count:=count+1; } n := n+2; } 1. Donner le graphe de contrôle du programme. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les noeuds. 4. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les arcs. 5. Proposer un jeu de testes qui couvre le programme suivant le critère ture de condition-décision multiple. 6. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous-les-chemins-indépendants. de couverde couverde couverde couver- Exercice 24 Spécification: Un programme complet qui demande à l’utilisateur deux entiers a et b. On suppose que l’utilisateur donne des valeurs a b. Le programme doit afficher les valeurs de i(i-1)-1 pour i compris entre a et b seulement si le nombre i(i-1)-1 est un nombre premier. Exemple d’exécution a=? 8 b=? 20 Nombres premiers de la forme i(i-1)-1 pour i dans [8,20] : 71 89 109 131 181 239 271 379 Soit S5 le programme suivant : scanf("%i",&a) ; scanf("%i",&b) ; printf("Nombres premiers de la forme i(i-1)-1 pour i dans [%i,%i] : ",a,b) ; i=a; while (i<=b){ q = i * (i-1) - 1 ; d = 3; while(q%d!=0 && d*d<=q){ d=d+2; 9 } if ((q%d!=0)||(q%2!=0)) { printf("%i ",q) ; } i:=i+1; } 1. Donner le graphe de contrôle du programme. 2. Donner l’expression des chemins de contrôle sous forme algébrique. 3. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les noeuds. 4. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous les arcs. 5. Proposer un jeu de testes qui couvre le programme suivant le critère ture de condition-décision multiple. 6. Proposer un jeu de testes qui couvre le programme suivant le critère ture de tous-les-chemins-indépendants. 7. Donner votre avis sur la correction du programmee S5 . 10 de couverde couverde couverde couver- . 11 Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 4 Exercice 25 Soit S1 le programme suivant : read(n); answer=1; counter=1; while (counter<=n) do { answer:=answer*counter; counter:= counter+1; } write(answer); 1. Donner le graphe de contrôle du programme. 2. Proposer un jeu de testes qui couvre le programme suivant ture de toutes-les-définitions. 3. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-utilisateurs. 4. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-p-utilisateurs/quelques-c-utilisateurs. 5. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-c-utilisateurs/quelques-p-utilisateurs. 6. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-du-chemins. le critère de couverle critère de couverle critère de couverle critère de couverle critère de couver- Exercice 26 Soit S2 le programme suivant : read(x); if (x>0) {a:=x+1;} if (x<=0){ while (x<1) do {x:=x+1;} a:=x+1; } write(a); 1. Donner le graphe de contrôle du programme. 2. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de toutes-les-définitions. 3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-utilisateurs. 4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-p-utilisateurs/quelques-c-utilisateurs. 12 5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-c-utilisateurs/quelques-p-utilisateurs. 6. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-du-chemins. Exercice 27 Soit S3 le programme suivant : scanf("%i",&a) ; scanf("%i",&b) ; printf("Nombres premiers de la forme i(i-1)-1 pour i dans [%i,%i] : ",a,b) ; i=a; while (i<=b){ q = i * (i-1) - 1 ; d = 3; while(q%d!=0 && d*d<=q){ d=d+2; } if ((q%d!=0)||(q%2!=0)) { printf("%i ",q) ; } i:=i+1; } 1. Donner le graphe de contrôle du programme. 2. Proposer un jeu de testes qui couvre le programme suivant ture de toutes-les-définitions. 3. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-utilisateurs. 4. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-p-utilisateurs/quelques-c-utilisateurs. 5. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-c-utilisateurs/quelques-p-utilisateurs. 6. Proposer un jeu de testes qui couvre le programme suivant ture de tous-les-du-chemins. 13 le critère de couverle critère de couverle critère de couverle critère de couverle critère de couver- Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 5 Exercice 28 Spécification : Si un élève a tous ces modules avec au moins 10/20 à chaque module et au moins 12/20 de moyenne générale, il obtient son diplôme. Sinon, il peut passer des rattrapages s’il a au moins 8/20 de moyenne générale, sinon il redouble. De plus, certains modules sont prioritaires, et moins de 8/20 de moyenne á ces modules empêche de passer les rattrapages et fait redoubler. Un éléve qui réussit ses rattrapages passe. 1. 2. 3. 4. 5. Déterminer les causes et les effets. Quelles contraintes entre causes peut-on ajouter ? Quelles contraintes entre effets peut-on ajouter ? Construire le graphes cause-effets. Donner la table de décision et déterminer les CTs (les choix de testes). Exercice 29 Soit A1 l’automate suivant : t1: a/0 s1 t2: a/0 t6: b/0 s2 t5: a/1 s3 t3: b/1 t4: b/1 1. 2. 3. 4. Trouver une suite discriminante (si possible). Trouver un ensemble discriminant. Trouver pour chaque état une suite UIO (si possible). Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante). 5. Génerer une suite de test en utilisant la méthode W. 6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO pour chaque état). Exercice 30 14 t1: a/0 s1 t6: b/1 t3: b/0 s2 t5: a/1 t2: a/0 s3 t4: b/1 Soit A2 l’automate suivant : 1. 2. 3. 4. Trouver une suite discriminante (si possible). Trouver un ensemble discriminant. Trouver pour chaque état une suite UIO (si possible). Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante). 5. Génerer une suite de test en utilisant la méthode W. 6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO pour chaque état). Exercice 31 Soit A3 l’automate suivant : t1: a/0 s1 t2: a/0 t3: b/1 s2 t5: a/1 t6: b/1 s3 t4: b/1 1. 2. 3. 4. Trouver une suite discriminante (si possible). Trouver un ensemble discriminant. Trouver pour chaque état une suite UIO (si possible). Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante). 5. Génerer une suite de test en utilisant la méthode W. 6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO pour chaque état). 15 Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 6 Machines de Turing Exercice 32 Soit M la machine de Turing donnée par (Q, Σ, Γ, ∆, q0 , ✷, F ) o : • Q = {q0 , q1 , q2 , q3 , q4 }. • Σ = {a, b}. • Γ = {a, b, X, Y, ✷}. ∆ = {(q0 , a, D, X, q1 ), (q0 , Y, D, Y, q3 ), (q1 , a, D, a, q1 ), (q1 , b, G, Y, q2 ), (q1 , Y, D, Y, q1 ), (q2 , a, G, a, q2 ), • (q2 , X, D, X, q0 ), (q2 , Y, G, Y, q2 ), (q3 , Y, D, Y, q3 ), (q3 , ✷, D, ✷, q4 )} • q0 est l’état initial. • F = {q4 } 1. 2. 3. 4. Le mot a2 b2 est-il accepté par M ? Le mot a2 b3 est-il accepté par M ? Le mot a3 b2 est-il accepté par M ? Quel langage est reconnu par cette machine? Exercice 33 Soit Σ = {a, b, c} et L = {an bm cn+m | n, m ∈ Montrer que L est récursif. N}. Exercice 34 Soit Σ = {a, b}. Par n|m, on dénote que n divise m, pour n, m ∈ Soit L = {an bm | n|m}. Montrer que L est récursif. Exercice 35 Soit Σ = {a, b}. 2 Montrer que L = {an | n ∈ N} est récursif. 16 N. Travaux Dirigés Modèles de calcul et Validation d’algorithmes 2016/2017 L3 Miage Université Grenoble Alpes Feuille 7 Exercice 36 Par la suite et comme en cours hM i représente le mot qui code la machine de Turing M. Soient: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Lǫ = {hM i | ǫ ∈ L(M )}. Lu = {hM i | u ∈ L(M )}. Lne = {hM i | L(M ) 6= ∅}. Le = {hM i | L(M ) = ∅}. Lk = {hM i | |L(M )| ≥ k}. LΣ∗ = {hM i | L(M ) = Σ∗ }. Lf = {hM i | L(M ) est fini}. Lreg = {hM i | L(M ) est régulier}. Lhc = {hM i | L(M ) est hors contexte}. Lr = {hM i | L(M ) ∈ R}. Lnr = {hM i | L(M ) 6∈ R}. Montrer les assertions suivantes: 1. 2. 3. 4. 5. 6. 7. 8. Aucun des langages ci-dessus n’est récursif. Lǫ ∈ RE. Lu ∈ RE. Lne ∈ RE. Le 6∈ RE. Lk ∈ RE. Lr 6∈ RE. Lnr 6∈ RE. 17