Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 lol


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? big_smile) 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. big_smile
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é

tukuyomi a écrit :

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 :

http://pagesperso-orange.fr/gleu/absfr. … index.html


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é

tukuyomi a écrit :
#!/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