#1 Le 13/04/2008, à 17:23
- mansonboy
[resolu] Resolution d'une equation du second degré
Salut, etant en ce moment en plein dans la programmation en bash script j'essaye de faire quelques script histoire de bien m'entrainer. Depuis quelques jours je cherche a faire un script qui resoudrer une equation du seconde degré :
exemple : 9x² - 4x = 0
Mais etant donné que je me rapel deja plus de la façon de les resoudres...j'ai enormement de mal. Quelqu'un pourrait un peu m'aider?
Dernière modification par mansonboy (Le 16/04/2008, à 03:23)
Hors ligne
#2 Le 13/04/2008, à 17:37
- mikedafunk
Re : [resolu] Resolution d'une equation du second degré
Que de souvenirs...
9x² - 4x = 0 <> (9x-4)x=0 <> 9x-4=0 ou x=0 <> 9x=4 ou x=0 <>x=4/9 ou x=0
voilà...
Lubuntu 22.04 sur Lenovo AX81 et pas mal d'Amiga
Mon blog : http://mikedafunk.over-blog.org
Hors ligne
#3 Le 13/04/2008, à 17:43
- anaxagold
Re : [resolu] Resolution d'une equation du second degré
Soit l'équation :
a.x^2 + b.x + c = 0
on calcule D = b^2 - 4.a.c
si D >= 0 alors 2 racines réelles :
x1 = (-b + sqrt(D))/2/a
x2 = (-b - sqrt(D))/2/a
si D <0 alors 2 racines imaginaires conjuguées telles que :
R(x1) = R(x2) = -b/2/a
I(x1) = sqrt(-D)
I(x2) = -sqrt(-D)
Merci à tous, à charge de revanche
Avec un Samsung Q320 sous Ubuntu 14.10
Hors ligne
#4 Le 13/04/2008, à 17:46
- geenux
Re : [resolu] Resolution d'une equation du second degré
Tu peut faire avec le discriminant aussi:
ax²+bx+c
discriminant = b²-4ac
si Discri<0
pas de solution
si discri>0
x1= (-b-racinecarré(discriminant))/(2*a) x2= (-b+racinecarré(discriminant))/(2*a)
si dicri = 0:
x=-b/(2*a)
Hors ligne
#5 Le 13/04/2008, à 17:47
- schaars
Re : [resolu] Resolution d'une equation du second degré
Bonjour
Faire un script qui résoud une équation du second degré je trouve déjà ça balèze !
Voici comment les résoudre :
tu calcules le discriminant delta = b²-4*a*c
-si il est négatif alors il n'y a pas de solutions réelles
-si il est nul alors il y a une unique solution -b/(2*a)
-si il est positif il y a deux solutions : x1 = -b+racine(delta)/(2*a) et x2 = -b-racine(delta)/(2*a)
Avec 9x²-4x =0 ça donne :
delta = (-4)²-4*9*0 = 16 donc il y a deux solutions :
x1 = -(-4)+racine(16)/(2*9)
x2 = -(-4)-racine(16)/(2*9)
En simplifiant on obtient :
x1=8/18=4/9
x2=0
Dernière modification par schaars (Le 13/04/2008, à 18:24)
Le linux des uns est l'OS/2 des autres (Thom E. Gemcity)
Hors ligne
#6 Le 13/04/2008, à 17:51
- mikedafunk
Re : [resolu] Resolution d'une equation du second degré
Ça y est, j'ai mal à la tête
Lubuntu 22.04 sur Lenovo AX81 et pas mal d'Amiga
Mon blog : http://mikedafunk.over-blog.org
Hors ligne
#7 Le 13/04/2008, à 18:21
- tukuyomi
Re : [resolu] Resolution d'une equation du second degré
Pour t'éviter un mal de crane (hein mikedafunk? ) avec les nombres décimaux, utilise bc dans ton script.
Quelques exemples parleront mieux que 1000 mots:
$ echo $((4+3))
7
$ echo $((4/3))
1
$ echo "scale=12; 4/3" | bc
1.333333333333
$ man bc
Hors ligne
#8 Le 13/04/2008, à 19:29
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
Oula, je me rapeller plus que c'etait aussi compliquer.
Oui j'avais deja penser a bc pour les nombres. Je vais aller tenter un script et je vien poster le script ici
Hors ligne
#9 Le 13/04/2008, à 19:42
- pascal50
Re : [resolu] Resolution d'une equation du second degré
bonsoir,
je ne vois pas de fonction racine carrée ?
je m'en sort avec :
rac=$(echo "e(l($delta)/2)" | bc -l)
Y'a pas plus simple ?
D'autant plus que pour l'équivallent de sqrt(4), cela donne 1.99999999999999999998
Hors ligne
#10 Le 13/04/2008, à 20:26
- tukuyomi
Re : [resolu] Resolution d'une equation du second degré
$ echo "sqrt(4)" | bc -l
2.00000000000000000000
$ echo "scale=80; sqrt(4)" | bc
2.000000000000000000000000000000000000000000000000000000000000000000\
00000000000000
Bizarre o_O
Dernière modification par tukuyomi (Le 13/04/2008, à 20:28)
Hors ligne
#11 Le 13/04/2008, à 20:55
- pascal50
Re : [resolu] Resolution d'une equation du second degré
Bizarre o_O
j'ai regardé seulement dans les fonctions de la bibliothèque !
Hors ligne
#12 Le 13/04/2008, à 23:38
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
J'ai commencer à écrire ce bout de script, je suis bien parti ou pas?
#!/bin/bash
#Pour l'équation 5x² - 6x - 2 = 0
a=5;
b=6;
c=2;
discriminant=`echo "$b*$b-4*($a+$c)" | bc -l`
echo "Discriminant = $discriminant"
x1=`echo "(-$b + sqrt($discriminant))/2/$a" | bc -l`
echo "Solution x1 = $x1"
x2=`echo "(-$b - sqrt($discriminant))/2/$a" | bc -l`
echo "Solution x2 = $x2"
Dernière modification par mansonboy (Le 13/04/2008, à 23:58)
Hors ligne
#13 Le 14/04/2008, à 05:58
- tukuyomi
Re : [resolu] Resolution d'une equation du second degré
Ca m'a l'air correct!
Par contre, il me semble que le discriminant se calcule de cette manière:
D=B¹-4AC
(et non)
D=B¹-4(A+C)
Les variables B et C doivent prendre (selon ton exemple) les valeurs -6 et -2
Sinon c'est du tout bon
Hors ligne
#14 Le 14/04/2008, à 08:38
- geenux
Re : [resolu] Resolution d'une equation du second degré
si sqrt ne marche pas, tu peut t'en sortir en mettant a la puissance 1/2
sqrt(4) = 4^(1/2)
Hors ligne
#15 Le 14/04/2008, à 10:23
- anaxagold
Re : [resolu] Resolution d'une equation du second degré
Une petite remarque en passant : bash (les shells en général) n'est pas prévu pour faire des calculs, son langage de script ne dispose donc pas des primitives de calcul des langages de programmation classiques.
bash est fait pour lancer des programmes et exécuter des commandes. Il vaudrait mieux apprendre sur des sujets mieux adaptés à bash : un script pour renommer des fichiers par exemples, pour faire des copies de fichiers, pour lancer une application etc.
Merci à tous, à charge de revanche
Avec un Samsung Q320 sous Ubuntu 14.10
Hors ligne
#16 Le 14/04/2008, à 11:41
- snapshot
Re : [resolu] Resolution d'une equation du second degré
Une autre petite remarque : utilise plutôt la syntaxe
var=$(commande)
à la place de l'ancienne
var=`commande`
.
La nouvelle syntaxe est plus lisible que les deux pixels du ` et est de plus imbricable.
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#17 Le 14/04/2008, à 13:17
- pascal50
Re : [resolu] Resolution d'une equation du second degré
Je l'ai fait avec 2 scripts : 1 bash et 1 bc.
#! /bin/sh
# secondd2.sh : résolution second degré
a=0
b=2
c=-1
resultat=$(bc -l secondd2.bc <<- FIN
$a
$b
$c
FIN
)
echo "resultat = $resultat"
/* secondd2.bc */
a = read ();
b = read ();
c = read ();
if (a == 0) {
print "premier degré !";
halt;
}
delta = b^2 - 4 * a*c;
if (delta > 0) {
racine = sqrt(delta);
x1 = (-b + racine)/(2*a);
x2 = (-b - racine)/(2*a);
print "delta positif : ",delta , "\n", " x1 = ",x1 , "\n", " x2 = ", x2 ;
} else { if (delta < 0) {
racine = sqrt(-delta);
reel = -b/(2*a) ;
if (a > 0) {
img = racine/(2*a);
} else {
img = -racine/(2*a);
}
print "delta négatif : ",delta, "\n", "x1 = ", reel, " + j*",img, "\n", "x2 = ", reel, " - j*",img ;
} else {
print "delta nul : ",delta , "\n", "x1 = x2 = ", -b/(2*a);
}
}
quit;
J'ai eu du mal avec les "if else" imbriqués.
Les ";" ne semblent pas obligatoires.
Hors ligne
#18 Le 14/04/2008, à 13:40
- snapshot
Re : [resolu] Resolution d'une equation du second degré
si tu veux aller plus loin en bash, ce site est une mine d'or :
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#19 Le 14/04/2008, à 15:15
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
Bon j'ai corriger mon script, il est correct la ? (j'ai changer d'equation pour l'exemple )
#!/bin/bash
#Pour l'équation 9x² + 5x - 6 = 0
a=9;
b=5;
c=-6;
discriminant=`echo "$b*$b-4 * $a*$c" | bc -l`
echo "Discriminant = $discriminant"
x1=`echo "(-$b + sqrt($discriminant))/2/$a" | bc -l`
echo "Solution x1 = $x1"
x2=`echo "(-$b - sqrt($discriminant))/2/$a" | bc -l`
echo "Solution x2 = $x2"
Hors ligne
#20 Le 14/04/2008, à 17:46
- geenux
Re : [resolu] Resolution d'une equation du second degré
Tu ne teste pas si le discriminant est >0 <0 ou nul?
#!/bin/bash
#Pour l'équation 9x² + 5x - 6 = 0
a=9;
b=5;
c=-6;
discriminant=$(echo "$b*$b-4 * $a*$c" | bc -l)
echo "Discriminant = $discriminant"
if [ "$discriminant" > 0 ] ;then
echo -n "Solution x1= "
echo $((-$b + sqrt($discriminant))/(2*$a) | bc -l)
echo -n "Solution x2"
echo $((-$b - sqrt($discriminant))/(2*$a) | bc -l)
else if [ "$disciminant" < 0 ];then
echo "Pas de solution"
else
echo -n "x= "
echo $(-$b / (2*$a) | bc -l)
fi
quelque chose comme ça? (pas testé)
Hors ligne
#21 Le 14/04/2008, à 19:21
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
Vraiment pas mal ton script mais le terminal me retourne une erreur de syntaxe :
line 24: erreur de syntaxe : fin de fichier inattendue
Hors ligne
#22 Le 14/04/2008, à 19:25
- tukuyomi
Re : [resolu] Resolution d'une equation du second degré
#!/bin/bash
echo 'Ax¹+Bx+C=0'
read -p 'A=?' A
read -p 'B=?' B
read -p 'C=?' C
D=$(echo "scale=2; $B^2-4*$A*$C" | bc -l)
echo "Discriminant=$D"
[[ $(echo "$D<0" | bc -l) -eq 1 ]] && {
echo "L'équation n'a pas de solution dans l'ensemble des réels"
exit 0
}
[[ $(echo "$D==0" | bc -l) -eq 1 ]] && {
echo "L'équation a une solution:"
echo "x="$(echo "scale=2; -($B)/(2*$A)" | bc -l)
exit 0
}
[[ $(echo "$D>0" | bc -l) -eq 1 ]] && {
echo "L'équation a deux solutions:"
echo "x1="$(echo "scale=2; (-($B)+sqrt($D))/(2*$A)" | bc -l)
echo "x2="$(echo "scale=2; (-($B)-sqrt($D))/(2*$A)" | bc -l)
exit 0
}
Voilà ce que j'ai pondu. Evitez les prompts nuls, sinon ça retourne des erreurs
-EDIT- Script modifié suite au post suivant.
Dernière modification par tukuyomi (Le 14/04/2008, à 20:06)
Hors ligne
#23 Le 14/04/2008, à 19:49
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
#!/bin/bash echo 'Ax¹+Bx+C=0' read -p 'A=?' A read -p 'B=?' B read -p 'C=?' C D=$(echo "$B^2-4*$A*$C" | bc -l) echo "Discriminant=$D" [[ $(echo "$D<0" | bc -l) -eq 1 ]] && { echo "L'équation n'a pas de solution dans l'ensemble des réels" exit 0 } [[ $(echo "$D==0" | bc -l) -eq 1 ]] && { echo "L'équation a une solution:" echo "x="$(echo "-($B)/(2*$A)" | bc -l) exit 0 } [[ $(echo "$D>0" | bc -l) -eq 1 ]] && { echo "L'équation a deux solutions:" echo "x1="$(echo "(-($B)+sqrt($D))/(2*$A)" | bc -l) echo "x2="$(echo "(-($B)-sqrt($D))/(2*$A)" | bc -l) exit 0 }
Voilà ce que j'ai pondu. Evitez les prompts nuls, sinon ça retourne des erreurs
Magnifique script, le seul truc maintenant c'est que il faudrait seulement laisser deux chiffre apres la virgule (sans arrondir)
Hors ligne
#24 Le 14/04/2008, à 20:08
- tukuyomi
Re : [resolu] Resolution d'une equation du second degré
C'est modifié; il sufft de faire passer scale=2 dans le echo précédant le pipe menant à bc
Dernière modification par tukuyomi (Le 14/04/2008, à 20:11)
Hors ligne
#25 Le 14/04/2008, à 20:16
- mansonboy
Re : [resolu] Resolution d'une equation du second degré
C'est bon je l'avais corriger dans mon script. Merci.
Hors ligne