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
ax
2+
bx c
+ =
0
, aveca b c
, ,
nombre réels donnés eta ≠
0
. Voici un algorithme qui permet de trouver les solutions d'une telle équation:TRINOME DU SECOND DEGRE:
Ax
2+
Bx
+ =
0
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 valeurSi
∆ >
0
, afficher "deux solution", les calculer, puis afficher leurs valeurs1. 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: 2
6
x
− − =
x
1 0
Discriminant: ... Solutions éventuelles:...
2
16
x
−
8
x
+
13
=
0
Discriminant: ... Solutions éventuelles:...
2
25
2
10
0
2
x
−
x
+
=
Discriminant: ... Solutions éventuelles:...
1.3°) Testez cet algorithme sous Algobox avec les valeurs
a =
0
,b =
2
, etc =
1
.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".
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..."
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
x
2−
(10
16+
1)
x
+
10
16=
0
.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(
x
^ 2 (10 ^16 1)*
−
+
x
+
10 ^16
=
0
,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
ax
2+
bx c
+ =
0
, aveca b c
, ,
nombre réels donnés eta ≠
0
. Voici un algorithme qui permet de trouver les solutions d'une telle équation:TRINOME DU SECOND DEGRE:
Ax
2+
Bx
+ =
0
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 valeurSi
∆ >
0
, afficher "deux solution", les calculer, puis afficher leurs valeurs1.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: 2
6
x
− − =
x
1 0
Discriminant: 25 Solutions éventuelles: - 0.333 et 0.5
2
16
x
−
8
x
+
13
=
0
2
25
2
10
0
2
x
−
x
+
=
Discriminant: 0 Solutions éventuelles: 2.5
1.3°) Testez cet algorithme sous Algobox avec les valeurs
a =
0
,b =
2
, etc =
1
. 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
.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
x
2−
(10
16+
1)
x
+
10
16=
0
.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
:Disp "DELTA=", D Frac :If D<0 :Then :Disp "PAS DE SOLUTION" :Else :If D=0 :Then :Disp "UNE SOLUTION", -B/(2A) :Else :(-B-√(D))/(2A)→E :(-B+√(D))/(2A)→F :Disp "DEUX SOLUTIONS:", E Frac, F Frac :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é x²−(1016+1)x+1016=0 :
(
16)
2 16 32 16 16 32 16(
16)
2² 4 (10 1) 4 1 10 10 2 10 1 4 10 10 2 10 1 10 1
b c
∆ = − = − + − × × = + × + − × = − × + = −
0
∆ > donc cette équation admet deux solutions distinctes :
(
)
2 16 16 10 1 10 1 1016 1 1016 1 1 2 2 2 b x a + − − − − ∆ + − + = = = = ou(
)
2 16 16 10 1 10 1 1016 1 1016 1 16 10 2 2 2 b x a + + − − + ∆ + + − = = = = donc S ={
1;1016}
3.2°) Saisissez dans le logiciel de calcul formel XCAS l'instruction solve(
x
^ 2 (10 ^16 1)*
−
+
x
+
10 ^16
=
0
,x
). Que constatez-vous? l'équation l'inconnueXCAS exhibe bien les deux solutions (séparées par une virgule): 1 et