1ères - tp02: algorithmique résolution d'une...
TRANSCRIPT
1èreS - TP02: ALGORITHMIQUE
Résolution d'une équation du second degré - Instruction conditionnelle
1. Présentation du problème
Nous allons construire un programme permettant de résoudre une équation du second degré de manière approchée,
en utilisant une structure conditionnelle du type "Si...alors...sinon".
Considérons l'équation 2 0ax bx c+ + = , avec , ,a b c nombre réels donnés et 0a ≠ .
Voici un algorithme qui permet de trouver les solutions d'une telle équation:
TRINOME DU SECOND DEGRE: 2 0Ax Bx+ + =
Demander à l'utilisateur les valeurs de A, B, C
Calculer le discriminant ∆ , que l'on notera D
Afficher la valeur de ∆
Si 0∆ < , afficher "pas de solution"
Si 0∆ = , afficher "une solution", et sa valeur
Si 0∆ > , afficher "deux solution", les calculer, puis afficher leurs valeurs
1. Algorithme avec Algobox
1.1°) Ouvrir le logiciel Algobox, et traduire cet algorithme sur Algobox. Vous pouvez prendre des notes ci-dessous:
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
1.2°) Testez cet algorithme sous Algobox avec les équations suivantes:
26 1 0x x− − =
Discriminant: ...................................... Solutions éventuelles:...........................................................................................
216 8 13 0x x− + =
Discriminant: ...................................... Solutions éventuelles:...........................................................................................
2 252 10 0
2x x− + =
Discriminant: ...................................... Solutions éventuelles:...........................................................................................
1.3°) Testez cet algorithme sous Algobox avec les valeurs 0a = , 2b = , et 1c = .
Que constate-t-on?.............................................................................................................................................................
Modifier le programme sur Algobox de manière à envisager cette situation (on pourra, par exemple, faire afficher un
message d'avertissement et stopper le programme avec l'instruction "pause").
Modifications proposées (écrire seulement les lignes modifiées):
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
1.4°) Proposez une amélioration de l'algorithme utilisant des conditions imbriquées ( If... then... else... : bouton
"si...alors").
Modifications proposées (écrire seulement les lignes modifiées):
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
............................................................................................................................................................................................
2. Traduction en Python
2.1°) Lancez le logiciel EduPython en cliquant sur l'icône qui se trouve soit sur votre bureau, soit dans le
dossier "Maths".
Voici un exemple d'instruction conditionnelle "Si ... alors ..." en langage Python:
Explication du code (attention, certains éléments ont été détaillés dans le TP01):
if :
print ( "Le plus grand des deux nombres est y" )
suite du code...
x y<
En Python, le début et la fin du bloc "if" sont marqués par une indentation (texte en retrait par rapport à la marge);
lorsque l'on veut "sortir" du bloc "if", il suffit de revenir à la "marge normale".
Attention, la syntaxe de "if" est la suivante: on écrit "if", puis la condition, puis "deux points" (à ne pas oublier).
N.B: Pour arrêter le programme, dans le cas a=0, on utilisera l'instruction: exit (0)
Pour pouvoir utiliser cette instruction, nous aurons besoin, comme nous l'avons fait au TP01 pour la racine
carrée, de l'importer depuis le module "sys".
Pour cela, on tapera au début du programme la ligne: from sys import exit
Application à notre algorithme:
Traduire l'algorithme de la question 1.1 en Python.
Testez cet algorithme avec les valeurs de la question 1.2.
Votre programme donne-t-il des réponses cohérentes avec celles obtenues sous Algobox ? ..........................
2.2°) Lancez le logiciel EduPython en cliquant sur l'icône qui se trouve soit sur votre bureau, soit dans le dossier
"Maths".
Voici un exemple d'instruction conditionnelle "Si ... alors ... sinon,si ....sinon ...." en langage Python:
Explication du code:
if :
print ( "Le plus grand des deux nombres est y" )
elif x = = y :
print ( "Les deux nombres sont égaux" )
else:
print ( "Le plus grand des
x y<
deux nombres est x" )
premier cas:
si
deuxième cas:
sinon, si
troisième cas
sinon (cas )
x y
x y
x y
<
=
>
Lorsqu'il y a deux cas, on utilise les instructions "si...alors...sinon...", c'est-à-dire "if...else..."
Mais lorsqu'il y a davantage de cas, on dispose de l'instruction "elif ", contraction de "else if", c'est-à-dire "sinon, si..."
Comme pour l'instruction "if", le début et la fin de chacun des blocs sont marqués par une indentation (texte en retrait
par rapport à la marge); lorsque l'on veut "sortir" du bloc, il suffit de revenir à la "marge normale".
Attention également à ne pas oublier les "deux points".
Application à notre algorithme:
Traduire l'algorithme de la question 1.3 en Python.
Testez cet algorithme avec les valeurs de la question 1.3.
Votre programme donne-t-il des réponses cohérentes avec celles obtenues sous Algobox? ...........................
3. Avec votre calculatrice, avec Xcas
3.1°) Saisissez le programme correspondant à l'algorithme amélioré sur votre calculatrice TI, et testez-le pour
résoudre l'équation 2 16 16(10 1) 10 0x x− + + = .
Les solutions proposées par la calculatrices sont-elles correctes?....................................................................................
Si non, trouver algébriquement les solutions de l'équation et expliquer le phénomène observé.
............................................................................................................................................................................................
3.2°) Saisissez dans le logiciel de calcul formel XCAS l'instruction solve( ^ 2 (10 ^16 1)* 10 ^16 0x x− + + = , x ).
Que constatez-vous?..........................................................................................................................................................
1èreS - TP02: ALGORITHMIQUE - CORRIGE
Résolution d'une équation du second degré - Instruction conditionnelle
1. Présentation du problème
Nous allons construire un programme permettant de résoudre une équation du second degré de manière approchée,
en utilisant une structure conditionnelle du type "Si...alors...sinon".
Considérons l'équation 2 0ax bx c+ + = , avec , ,a b c nombre réels donnés et 0a ≠ .
Voici un algorithme qui permet de trouver les solutions d'une telle équation:
TRINOME DU SECOND DEGRE: 2 0Ax Bx+ + =
Demander à l'utilisateur les valeurs de A, B, C
Calculer le discriminant ∆ , que l'on notera D
Afficher la valeur de ∆
Si 0∆ < , afficher "pas de solution"
Si 0∆ = , afficher "une solution", et sa valeur
Si 0∆ > , afficher "deux solution", les calculer, puis afficher leurs valeurs
1.1°) Ouvrir le logiciel Algobox, et traduire ce programme sur Algobox. Noter ci-dessous votre algorithme
Algobox:
1.2°) Testez cet algorithme sous Algobox avec les équations suivantes:
26 1 0x x− − =
Discriminant: 25 Solutions éventuelles: - 0.333 et 0.5
216 8 13 0x x− + =
Discriminant: -768 Solutions éventuelles: pas de solution
2 252 10 0
2x x− + =
Discriminant: 0 Solutions éventuelles: 2.5
1.3°) Testez cet algorithme sous Algobox avec les valeurs 0a = , 2b = , et 1c = .
Que constate-t-on? Algobox renvoie une erreur.
Modifier le programme sur Algobox de manière à envisager cette situation (on pourra, par exemple, faire afficher un
message d'avertissement et stopper le programme).
Modifications proposées (écrire seulement les lignes modifiées):
Ces lignes ont été ajoutées
1.4°) Proposez une modification de l'algorithme utilisant des conditions imbriquées ( If... then... else... ) pour
rassembler les cas 0∆ = et 0∆ > .
Modifications proposées (écrire seulement les lignes modifiées):
2. Traduction en Python
2.1°) Lancez le logiciel EduPython en cliquant sur l'icône qui se trouve soit sur votre bureau, soit dans le
dossier "Maths".
Application à notre algorithme:
Traduire l'algorithme de la question 1.3 en Python.
Testez cet algorithme avec les valeurs des questions 1.3 et 1.2.
Votre programme donne-t-il des réponses cohérentes avec celles obtenues sous Algobox ? Oui.
2.2°) Avec EduPython.
Application à notre algorithme:
Traduire l'algorithme de la question 1.4 en Python.
Testez cet algorithme avec les valeurs de la question 1.2.
Votre programme donne-t-il des réponses cohérentes avec celles obtenues sous Algobox ? Oui.
3. Avec votre calculatrice, avec Xcas
3.1°) Saisissez le programme correspondant à l'algorithme amélioré sur votre calculatrice TI, et testez-le pour
résoudre l'équation 2 16 16(10 1) 10 0x x− + + = .
Listing du programme pour une calculatrice T.I.:
PROGRAM: TRINOME
:Input "A=", A
:Input "B=", B
:Input "C=", C
:If A=0
:Then
:Disp "A DOIT ETRE NON NUL"
:Else
:B2 - 4AC →D
:Disp"DELTA=",DFrac:IfD<0:Then:Disp"PASDESOLUTION":Else:IfD=0:Then:Disp"UNESOLUTION",-B/(2A):Else:(-B-√(D))/(2A)→E:(-B+√(D))/(2A)→F:Disp"DEUXSOLUTIONS:",EFrac,FFrac:End:End:End
Votre calculatrice n’arrive pas à gérer les calculs correctement car b et c sont très grands.
A la main, on peut cependant résoudre l’ équation du second degré 16 16² (10 1) 10x x− + + =0 :
( ) ( )2 2
16 16 32 16 16 32 16 16² 4 (10 1) 4 1 10 10 2 10 1 4 10 10 2 10 1 10 1b c∆ = − = − + − × × = + × + − × = − × + = −
0∆ > donc cette équation admet deux solutions distinctes :
( )2
16 1610 1 10 1 16 1610 1 10 11
2 2 2
bx
a
+ − −− − ∆ + − +
= = = = ou ( )
216 1610 1 10 1 16 1610 1 10 1 16
102 2 2
bx
a
+ + −− + ∆ + + −
= = = =
donc { }161;10S =
3.2°) Saisissez dans le logiciel de calcul formel XCAS l'instruction solve( ^ 2 (10 ^16 1)* 10 ^16 0x x− + + = , x ).
Que constatez-vous? l'équation l'inconnue
XCAS exhibe bien les deux solutions (séparées par une virgule): 1 et 1610 10000000000000000= , séparées par
une virgule (c'est une notation anglo-saxonne).
Remarquons qu'Algobox trouve ces deux solutions également.