A l'aide d'un exemple, démontrer que l'alternative simple ci-dessous:
if condition :
blocIf
else :
blocElse
n'est pas équivalente à la séquence de tests simples suivante:
if condition :
blocIf
if not condition :
blocElse
AAV1_ALT: Méthode
Application de la méthode
AAV1_ALT: Résultat
La réponse est dans la question : ... donc l'alternative simple ci-dessous:
if condition :
blocIf
else :
blocElse
n'est pas équivalente à la séquence de tests simples suivante:
if condition :
blocIf
if not condition :
blocElse
AAV1_ALT: Choisir et appliquer une méthode générique
Comme précisé dans l'énoncé, on utilise la méthode du contre-exemple.
Pour prouver qu'un énoncé commençant par « Pour tout ... » (\(\forall x\)) est faux, il suffit de trouver un élément (« Il existe ... » : \(\exists y\)) qui réalise les conditions imposées dans l'hypothèse sans que ne soit vérifiée la conclusion.
On considère l'exemple suivant ou on change le signe de la
variable testée (x = -x
) quelle que soit la condition :
Méthode des discriminants | alternative simple |
variables discriminantes | \(x\) |
domaine de définition | \(\mathbb{Z}\) |
nombres de sous-ensembles disjoints | 2 |
définition des sous-ensembles | \(]-\infty,0[\) et \([0,+\infty[\) |
squelette de l'alternative | if x < 0 :
x = -x
else :
x = -x
|
On inialise la variable discriminante de telle manière
que la condition soit vraie (exemple : x = -1
).
AAV1_ALT: Répondre explicitement à la question posée
Un contre-exemple est donné ci-dessous:
x = -1
print 'Deux tests simples'
if x < 0 :
x = -x
print 'if',
if not (x < 0) :
x = -x
print 'else',
print x
x1 = x
x = -1
print 'Une alternative simple'
if x < 0 :
x = -x
print 'if',
else :
x = -x
print 'else',
print x
x2 = x
verif = x1 == x2
print verif,x,x1,x2
A l'aide d'un exemple, démontrer que l'alternative multiple ci-dessous:
if condition1 : bloc1
elif condition2 : bloc2
elif condition3 : bloc3
else : bloc4
n'est pas équivalente à l'alternative multiple suivante:
if condition1 : bloc1
elif condition3 : bloc3
elif condition2 : bloc2
else : bloc4
AAV1_ALT: Méthode
Application de la méthode
AAV1_ALT: Résultat
La réponse est dans la question : ... donc l'alternative multiple ci-dessous:
if condition1 : bloc1
elif condition2 : bloc2
elif condition3 : bloc3
else : bloc4
n'est pas équivalente à l'alternative multiple suivante:
if condition1 : bloc1
elif condition3 : bloc3
elif condition2 : bloc2
else : bloc4
AAV1_ALT: Choisir et appliquer une méthode générique
Comme précisé dans l'énoncé, on utilise la méthode du contre-exemple.
Pour prouver qu'un énoncé commençant par « Pour tout ... » (\(\forall x\)) est faux, il suffit de trouver un élément (« Il existe ... » : \(\exists y\)) qui réalise les conditions imposées dans l'hypothèse sans que ne soit vérifiée la conclusion.
On considère l'exemple suivant où les instructions liées
à chaque sous-ensemble effectuent un traitement différent
selon la valeur de x
.
Méthode des discriminants | permutation des elif |
variables discriminantes | \(x\) |
domaine de définition | \(\mathbb{Z}\) |
nombres de sous-ensembles disjoints | 4 |
définition des sous-ensembles | \(]-\infty,10[\) et \([10,20[\) et \([20,30[\) et \([30,+\infty[\) |
squelette de l'alternative | if x < 10 :
# sous-ensemble (x < 10)
elif x < 20 :
# sous-ensemble (10 <= x < 20)
elif x < 30 :
# sous-ensemble (20 <= x < 30)
else :
# sous-ensemble (30 <= x)
|
On initialise la variable de telle manière que la condition
du premier elif
soit vraie (exemple : x = 11
).
AAV1_ALT: Répondre explicitement à la question posée
Un contre-exemple est donné ci-dessous:
# exemple 1
print u'avant permutation des lignes elif'
x = 11
if x < 10 :
y = x/1
print 'x < 10 :',x,y
elif x < 20 :
y = x/2
print 'x < 20 :',x,y
elif x < 30 :
y = x/3
print 'x < 30 :',x,y
else :
y = 0
print 'x > 30 :',x,y
# exemple 2
print u'après permutation des lignes elif'
x = 11
if x < 10 :
y = x/1
print 'x < 10 :',x,y
elif x < 30 :
y = x/3
print 'x < 30 :',x,y
elif x < 20 :
y = x/2
print 'x < 20 :',x,y
else :
y = 0
print 'x > 30 :',x,y
Le code précédent donne des résultats différents selon
l'ordre des lignes elif
:
avant permutation des lignes elif
x < 20 : 11 5
après permutation des lignes elif
x < 30 : 11 3
Il n'y a donc pas équivalence entre les 2 versions avant et après permutation.
Certains langages, comme Javascript ou C, définissent une instruction
conditionnelle switch ... case
:
switch (expression) {
case valeur1:
// Instructions à exécuter lorsque l'évaluation
// de l'expression correspond à valeur1
instructions1;
[break;]
case valeur2:
// Instructions à exécuter lorsque l'évaluation
// de l'expression correspond à valeur2
instructions2;
[break;]
...
case valeurN:
// Instructions à exécuter lorsque l'évaluation
// de l'expression à valeurN
instructionsN;
[break;]
default:
// Instructions à exécuter lorsqu'aucune des valeurs
// ne correspond
instructions_def;
[break;]
}
Une instruction switch
commence par évaluer l'expression fournie
(switch (expression)
).
Si une correspondance est trouvée entre la valeur de l'expression est l'un
des cas proposés (valeur1
, valeur2
, ... , valeurN
),
le programme exécute les instructions associées.
Si plusieurs cas de figure correspondent, le premier cas rencontré sera sélectionné.
Le programme recherche tout d'abord une clause case
dont l'expression
est évaluée avec la même valeur que l'expression d'entrée.
Si une telle clause est trouvée, les instructions associées sont exécutées.
Si aucune clause case
n'est trouvée, le programme recherche la
clause optionnelle default
et si elle existe, les instructions
correspondantes sont exécutées.
Si cette clause optionnelle n'est pas utilisée,
le programme continue son exécution après l'instruction switch
.
L'instruction break
peut optionnellement être utilisée pour chaque cas
et permet de s'assurer que seules les instructions associées à ce cas
seront exécutées (et le programme continue son exécution après
l'instruction switch
). Si break
n'est pas utilisé,
le programme continuera
son exécution avec les instructions suivantes
(des autres cas de l'instruction switch
).
L'exemple ci-dessous est programmé en Javascript :
Le langage Python ne dispose pas d'une telle structure switch
.
Proposer une séquence d'alternatives équivalente à la structure switch
du programme Javascript précédent.
AAV1_ALT: Méthode
Application de la méthode
Clavier | Action |
---|---|
F1 | Afficher une aide technique |
F2 | Afficher une aide pédagogique |
Ctrl-A | Tout sélectionner |
Ctrl-C | Copier la sélection dans le presse-papier |
Ctrl-V | Copier le presse-papier dans la sélection |
Ctrl-X | Couper la sélection et la copier dans le presse-papier |
Ctrl-Z | Annuler la modification |
Maj-Ctrl-Z | Rétablir la modification |
Menu | Action |
---|---|
Ré-initialiser les sorties | |
Faire apparaître le menu d'aide | |
Valider la zone de saisie | |
Initialiser la zone de saisie | |
Charger le contenu d'un fichier dans la zone de saisie | |
Sauvegarder le contenu de la zone de saisie dans un fichier | |
Imprimer le contenu de la zone de saisie |
AAV1_ALT: Résultat
Utiliser l'interpréteur Python ci-dessous pour répondre et vérifier.
AAV1_ALT: Choisir et appliquer une méthode générique
On utilise la méthode des discriminants
où switch (x) ... case val:
se lit if x == val :
et switch (x) ... default:
se lit else :
.
Méthode des discriminants | switch ... case |
variables discriminantes | \(x\) |
domaine de définition | \(\mathbb{Z}\) |
nombres de sous-ensembles disjoints | 5 |
définition des sous-ensembles | \(]-\infty,0] \cup [5,+\infty[\) et \(\{1\}\) et \(\{2\}\) et \(\{3\}\) et \(\{4\}\) |
squelette de l'alternative | if x == 1 :
# sous-ensemble (x == 1)
elif x == 2 :
# sous-ensemble (x == 2)
elif x == 3 :
# sous-ensemble (x == 3)
elif x == 4 :
# sous-ensemble (x == 4)
else :
# sous-ensemble (x <= 0 or x >= 5)
|
AAV1_ALT: Répondre explicitement à la question posée
L'exemple Python ci-dessous illustre le
fonctionnement équivalent au programme switch
de Javascript:
# initialisation
import random
x = random.randint(0,9)
# switch
if x == 1 :
text = "1"
elif x == 2 :
text = "234"
elif x == 3 :
text = "34"
elif x == 4 :
text = "4"
else :
text = "fin"
# résultat
print x, text
Déterminer « à la main » la valeur de la variable k
après la séquence d'instructions suivante :
1 2 3 4 5 6 7 8 9 x, y = 2, 3 d, c = 5, 4 if x > 0 and x < d : if y > 0 and y < c : k = y else : k = x else : k = 1
AAV1_ALT: Méthode
Application de la méthode
Clavier | Action |
---|---|
F1 | Afficher une aide technique |
F2 | Afficher une aide pédagogique |
Ctrl-A | Tout sélectionner |
Ctrl-C | Copier la sélection dans le presse-papier |
Ctrl-V | Copier le presse-papier dans la sélection |
Ctrl-X | Couper la sélection et la copier dans le presse-papier |
Ctrl-Z | Annuler la modification |
Maj-Ctrl-Z | Rétablir la modification |
Menu | Action |
---|---|
Ré-initialiser les sorties | |
Faire apparaître le menu d'aide | |
Valider la zone de saisie | |
Initialiser la zone de saisie | |
Charger le contenu d'un fichier dans la zone de saisie | |
Sauvegarder le contenu de la zone de saisie dans un fichier | |
Imprimer le contenu de la zone de saisie |
AAV1_ALT: Résultat
A la fin de l'algorithme, l'instruction print k
affiche
?
AAV1_ALT: Choisir et appliquer une méthode générique
On utilise la méthode de l'empathie numérique.
On dresse la tableau des valeurs des variables instruction après instruction:
line cond x y c d k
1 - 2 3 ? ? ?
2 - 2 3 4 5 ?
3 1 2 3 4 5 ?
4 1 2 3 4 5 ?
5 - 2 3 4 5 3
AAV1_ALT: Répondre explicitement à la question posée
A la fin de l'algorithme, l'instruction
print k
affiche 3
:
>>> print k
3
Déterminer « à la main » la valeur de la variable y
après la séquence d'instructions suivante :
1 2 3 4 5 6 7 x, y = 3, -2 if x < y : y = y - x elif x == y : y = 0 else : y = x - y
AAV1_ALT: Méthode
Application de la méthode
Clavier | Action |
---|---|
F1 | Afficher une aide technique |
F2 | Afficher une aide pédagogique |
Ctrl-A | Tout sélectionner |
Ctrl-C | Copier la sélection dans le presse-papier |
Ctrl-V | Copier le presse-papier dans la sélection |
Ctrl-X | Couper la sélection et la copier dans le presse-papier |
Ctrl-Z | Annuler la modification |
Maj-Ctrl-Z | Rétablir la modification |
Menu | Action |
---|---|
Ré-initialiser les sorties | |
Faire apparaître le menu d'aide | |
Valider la zone de saisie | |
Initialiser la zone de saisie | |
Charger le contenu d'un fichier dans la zone de saisie | |
Sauvegarder le contenu de la zone de saisie dans un fichier | |
Imprimer le contenu de la zone de saisie |
AAV1_ALT: Résultat
A la fin de l'algorithme, l'instruction print y
affiche
?
AAV1_ALT: Choisir et appliquer une méthode générique
On utilise la méthode de l'empathie numérique.
On dresse la tableau des valeurs des variables instruction après instruction.
line cond x y 1 - 3 -2 2 0 3 -2 4 0 3 -2 6 - 3 5
AAV1_ALT: Répondre explicitement à la question posée
A la fin de l'algorithme, l'instruction
print y
affiche 5
:
>>> print y
5