Page 1 sur 1

Problème d'écriture complexe dans algo pour 2nd degré

Publié : jeu. nov. 01, 2012 12:26 pm
par toushussss
Bonjour, je souhaite créer un algo sur xcas qui me retourne les solutions d'une equation du 2nd degré selon la valeur de delta (D) . Pour D< 0 j'ai rentré cette ligne de code :
si D < 0 alors
z1 : = (-b-i*sqrt(-D))/(2*a)
z2 : = (-b+i*sqrt(-D))/(2*a)
Afficher ("z1= "); afficher z1
Afficher ("z2= "); afficher z2

Lorsque je rentre la fct impossible d'obtenir de résultat cela me retourne : unable to check test error : bad argument value

Alors que pour une equation à solution réel cela fonctionne avec les lignes de code que j' ai tapé pour D> 0 et D=0
Mon erreur est donc ds la partie décrite
Je ne vois pas ou est mon erreur
Merci par avance pour l'aide
bonne journée

Re: Problème d'écriture complexe dans algo pour 2nd degré

Publié : jeu. nov. 01, 2012 1:32 pm
par alb
1/ tu peux ajouter afficher(D) juste avant le si D<0 pour voir la valeur de D
2/ tu peux utiliser debug(ta_fonction(a,b,c)) et suivre l'évolution des variables
3/ tu peux donner ton code en entier !

RQ: Afficher ("z1= "); afficher z1 ; plus court: afficher("z1="+z1)

Re: Problème d'écriture complexe dans algo pour 2nd degré

Publié : jeu. nov. 01, 2012 2:09 pm
par toushussss
afficher( "a ="); saisir (a);afficher (a);
afficher( "b ="); saisir (b);afficher (b);
afficher( "c ="); saisir (c);afficher (c);
D:= b^2-4*a*c;
si D > 0 alors
x1:=(-b-sqrt(D))/(2*a);
x2:=(-b+sqrt(D))/(2*a);
afficher("x1 ="); afficher(x1);
afficher("x2 ="); afficher(x2);
Sinon
Si D==0 alors
x:=-b/(2*a);
afficher("x1=x2= ");
afficher (x);
Sinon
Si D <0 alors
z1:=(-b-i*sqrt(-D))/(2*a);
z2:=(-b+i*sqrt(-D))/(2*a);
afficher("z1 ="); afficher(z1);
afficher("z2 ="); afficher(z2);
Fsi
Fsi
Fsi

Voilà le code en entier! Donc tant que mon equation admet des solutions réelles ça fonctionne
Et qd je suis dans le domaine des complexes donc à partir D < 0 l'algo ne tourne plus
Merci par avance

Re: Problème d'écriture complexe dans algo pour 2nd degré

Publié : jeu. nov. 01, 2012 2:50 pm
par alb
avec des minuscules au début de toutes les lignes j'obtiens les bonnes réponses avec a=1,b=2,c=3 !?
Avec quelles valeurs de a,b,c as-tu le pb ?
RQ z1:=simplifier((-b-i*sqrt(-D))/(2*a)); permet d'avoir un résultat simplifié.

Re: Problème d'écriture complexe dans algo pour 2nd degré

Publié : jeu. nov. 01, 2012 5:49 pm
par parisse
Oui, ça marche avec des minuscules et ces valeurs. Sinon, pour des TS, ce serait peut-etre une bonne idée de réécrire une fonction au lieu de afficher/saisir, ce qui donnerait

Code : Tout sélectionner

second_degre(a,b,c):={
  local D,x1,x2,z1,z2;
  D:= b^2-4*a*c;
  si D > 0 alors
    x1:=(-b-sqrt(D))/(2*a);
    x2:=(-b+sqrt(D))/(2*a);
   afficher("2 solutions réelles");
    return x1,x2;
  fsi;
  si D==0 alors
    afficher("1 solution double");
    return -b/(2*a);
  fsi;
  si D <0 alors
    z1:=(-b-i*sqrt(-D))/(2*a);
    z2:=(-b+i*sqrt(-D))/(2*a);
   afficher("2 solutions complexes conjuguées");
    return z1,z2;
  fsi;
}:;
On peut alors exécuter le code pas à pas avec par exemple debug(second_degre(1,2,3)) ou surtout utiliser la fonction dans un autre programme (ce qui n'est pas possible avec des suites d'instructions utilisant des saisir au lieu de passer des arguments et afficher au lieu de renvoyer une valeur).

Re: Problème d'écriture complexe dans algo pour 2nd degré

Publié : ven. nov. 02, 2012 11:50 am
par toushussss
Bonjour à tous. Merci pour vos infos j'ai pu résoudre mon problème :P
À plus