Liens utiles sur l'alternative :
Répondre ci-dessous aux différents QCM concernant les définitions du cours.
Le résultat d'une comparaison est une valeur
Un opérateur booléen s'applique à des valeurs
La fonction principale d'une instruction d'alternative est
QCM | Radio | Checkbox | Total |
---|---|---|---|
Nombre de questions | |||
Réponses non enregistrées | |||
Réponses enregistrées | |||
Taux d'enregistrement | |||
Réponses enregistrées non validées | |||
Réponses enregistrées validées | |||
Taux de réussite partiel | |||
Taux de réussite total |
Les réponses sont ici directement fournies par le QCM lui-même.
Répondre ci-dessous aux différents QCM concernant les opérateurs booléens.
Seule une des équivalences ci-dessous est valide. Laquelle ?
Seule une des équivalences ci-dessous est valide. Laquelle ?
Seule une des équivalences ci-dessous est valide. Laquelle ?
QCM | Radio | Checkbox | Total |
---|---|---|---|
Nombre de questions | |||
Réponses non enregistrées | |||
Réponses enregistrées | |||
Taux d'enregistrement | |||
Réponses enregistrées non validées | |||
Réponses enregistrées validées | |||
Taux de réussite partiel | |||
Taux de réussite total |
Les réponses sont ici directement fournies par le QCM lui-même.
Répondre ci-dessous aux différents QCM concernant les séquences d'alternatives.
Après la séquence:
x = -3
if x < -4 : y = 0
elif x < -3 : y = 4 - x
elif x < -1 : y = x*x + 6*x + 10
elif x < 3 : y = 2 - x
else : y = -2
la variable y
est telle que
y == 1
.y == 5
.y == 7
.y == -2
.Après la séquence:
x = -2
if not (x > 0 and x < 5) : x = -x
else : x = 2*x
la variable x
est telle que
x = 2
.x = 4
.x = -4
.x = -2
.Après la séquence:
x = -2
if not ((x > 0) and (x < 5)) : x = -x
if (x > 0) and (x < 5) : x = -2*x
la variable x
est telle que
x = -4
.x = 4
.x = -2
.x = 2
.Après la séquence:
if not (x > y) : z = x
else : z = y
la variable z
représente
x
et de y
.x
et de y
.x
.y
.QCM | Radio | Checkbox | Total |
---|---|---|---|
Nombre de questions | |||
Réponses non enregistrées | |||
Réponses enregistrées | |||
Taux d'enregistrement | |||
Réponses enregistrées non validées | |||
Réponses enregistrées validées | |||
Taux de réussite partiel | |||
Taux de réussite total |
Les réponses sont ici directement fournies par le QCM lui-même.
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
Méthode
Nom de la méthode
?
Application de la méthode
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
Vérification
Nom de la technique de vérification
?
Application de la technique de vérification
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 |
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
).
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
Choisir et appliquer une technique de vérification
On s'appuie sur la définition de l'alternative simple :
dans le cas des 2 tests successifs,
si le blocIf
modifie les valeurs des variables
discrimantes de la condition, alors condition
peut
passer de True
à False
avant de tester le
not condition
du deuxième test et le blocElse
sera alors
exécuté.
Ce qui n'est pas le cas dans l'alternative simple.
On peut également utiliser la représentation graphique des flux d'instructions.
Les deux diagrammes de flux sont différents.
Le diagramme correspondant aux 2 tests simples peut
autoriser le passage par les blocIf
et blocElse
successivement; ce que n'autorise pas l'alternative simple.
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
Méthode
Nom de la méthode
?
Application de la méthode
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
Vérification
Nom de la technique de vérification
?
Application de la technique de vérification
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 |
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
).
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.
Choisir et appliquer une technique de vérification
On s'appuie sur la définition de l'alternative multiple :
quand on passe dans une branche elif
, c'est que toutes
les conditions des branches elif
précédentes sont fausses.
Avant permutation, la condition
condition3
est
équivalente à
not condition1 and not condition2 and condition3
tandis qu'après permutation, elle devient équivalente à
not condition1 and condition3
, ce qui est évidemment
moins contraignant et donc à priori différent.
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.
Méthode
Nom de la 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 |
Résultat
Utiliser l'interpréteur Python ci-dessous pour répondre et vérifier.
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)
|
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
Choisir et appliquer une technique de vérification
On compare les résultats obtenus entre Javascript et Python
sur un jeu de tests pour les cas x = 1
, x = 2
,
x = 3
, x = 4
, tous les autres cas donnant fin
.
On obtient bien les mêmes résultats pour la chaîne text
en Python et en Javascript.
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
Méthode
Nom de la 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 |
Résultat
A la fin de l'algorithme, l'instruction print k
affiche
?
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
Répondre explicitement à la question posée
A la fin de l'algorithme, l'instruction
print k
affiche 3
:
>>> print k
3
Choisir et appliquer une technique de vérification
On choisit d'exécuter en Python le code proposé pour vérifier les résultats précédents.
L'exécution par Python des séquences précédentes donne bien les mêmes résultats que ceux obtenus « à la main ».
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
Méthode
Nom de la 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 |
Résultat
A la fin de l'algorithme, l'instruction print y
affiche
?
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
Répondre explicitement à la question posée
A la fin de l'algorithme, l'instruction
print y
affiche 5
:
>>> print y
5
Choisir et appliquer une technique de vérification
On choisit d'exécuter en Python le code proposé pour vérifier les résultats précédents.
L'exécution par Python des séquences précédentes donne bien les mêmes résultats que ceux obtenus « à la main ».