begin process at 2010 03 14 01:49:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > DISCRIMINANT DANS IR,

DISCRIMINANT DANS IR,


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :22/10/2003 Date de mise à jour :27/10/2003 19:30:24 Vu :1 038

Auteur : reyvax

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Ce progz et mon premier. Pardonner moi si c tt simple mé il fo un debut a tt.
Ce programe sert symplement a trouver les equation avec le discriminant, il applique tt betement des formule de math.Je tien a remercier gillig pour son aide pour les complexes ---- reyvax,

Source

  • #include <iostream.h>
  • #include <math.h>
  • int main(int argc, char* argv[])
  • {
  • int z;
  • do
  • {
  • cout << "*********************************************" << endl;
  • cout << "** Discriminant pour IC et IR,** By ReYvaX **" << endl;
  • cout << "*********************************************" << endl << endl;
  • double A, B, C;
  • cout << " Entrez la valeur de A : ";
  • cin >> A;
  • cout << " Entrez la valeur de B : ";
  • cin >> B;
  • cout << " Entrez la valeur de C : ";
  • cin >> C;
  • cout << " L'equation est donc : ";
  • cout << A << " x^2 + " << B << "x + " << C << " = 0" << endl;
  • if (A == 0.f)
  • {
  • if (B == 0.f)
  • if (C == 0.f)
  • cout << " 0 = 0 ! Tout x de R est solution !" << endl;
  • else
  • cout << C << " = 0 ! Pas de solution !" << endl;
  • else
  • cout << " Equation du 1er degre !" << endl << " x = " << -C/B << endl;
  • }
  • else
  • {
  • double delta = B*B - 4*A*C;
  • cout << " Delta a pour valeur " << delta << endl;
  • double x0 = -B / (2*A);
  • if (delta > 0) // 1,2,-2 S=-3 et 1
  • {
  • double x1 = sqrt(delta) / (2*A);
  • cout << " Il y a deux solutions car delta est positif, X1 = " << x1+x0 << " et X2 = " << x0-x1 << endl;
  • }
  • else if (delta == 0) // 1.2.1 S=- 1
  • cout << " Il y'a qu'une solution car delta est nul, X0 a donc pour valeur " << x0 << endl;
  • else // delta < 0 2.2.2 S=.
  • {
  • double x1 = sqrt(-delta) / (2*A);
  • if (x1 < 0) x1 = -x1; // on pose x1 solution positive pour éviter pbs de signe à l'affichage
  • cout << " Il y a deux solutions complexes conjuguees car delta est negatif" << endl;
  • cout << " X1 = " << x0 << " + " << x1 << "i" << endl;
  • cout << " X2 = " << x0 << " - " << x1 << "i" << endl;
  • }
  • }
  • cout << " Voulez vous recommencer? oui 1 / non 2 " << endl;
  • cin >> z;
  • } while (z == 1);
  • cout << "****************************************" << endl;
  • cout << " <13/10/03> * ~~~~~~~~~~~~~ ***" << endl;
  • cout << "...................* ~ By ReyVaX ~ ***" << endl;
  • cout << " Discriminant * ~~~~~~~~~~~~~ ***" << endl;
  • cout << "****************************************" << endl << endl;
  • cout << ""<<endl;
  • cout << "Merci a Gillig pour son aide ;) " << endl;
  • return 0;
  • }
#include <iostream.h>
#include <math.h>

int main(int argc, char* argv[])
{
int z;



do
{
cout << "*********************************************" << endl;
cout << "** Discriminant pour IC et IR,** By ReYvaX **" << endl;
cout << "*********************************************" << endl << endl;

double A, B, C;
cout << " Entrez la valeur de A : ";
cin >> A;

cout << " Entrez la valeur de B : ";
cin >> B;

cout << " Entrez la valeur de C : ";
cin >> C;  

cout << " L'equation est donc : ";
cout << A << " x^2 + " << B << "x + " << C << " = 0" << endl;

if (A == 0.f)
{
if (B == 0.f)
if (C == 0.f)
cout << " 0 = 0 ! Tout x de R est solution !" << endl;
else
cout << C << " = 0 ! Pas de solution !" << endl;
else
cout << " Equation du 1er degre !" << endl << " x = " << -C/B << endl;
}
else
{
double delta = B*B - 4*A*C;
cout << " Delta a pour valeur " << delta << endl;

double x0 = -B / (2*A);

if (delta > 0) // 1,2,-2 S=-3 et 1
{
double x1 = sqrt(delta) / (2*A);
cout << " Il y a deux solutions car delta est positif,  X1 = " << x1+x0 << " et X2 = " << x0-x1 << endl;
}
else if (delta == 0) // 1.2.1 S=- 1
cout << " Il y'a qu'une solution car delta est nul,  X0 a donc pour valeur " << x0 << endl;
else // delta < 0      2.2.2 S=.
{
double x1 = sqrt(-delta) / (2*A);
if (x1 < 0) x1 = -x1; // on pose x1 solution positive pour éviter pbs de signe à l'affichage
cout << " Il y a deux solutions complexes conjuguees car delta est negatif" << endl;
cout << " X1 = " << x0 << " + " << x1 << "i" << endl;
cout << " X2 = " << x0 << " - " << x1 << "i" << endl;
}
}

cout << " Voulez vous recommencer? oui 1 / non 2 " << endl;
cin >> z;
} while (z == 1);

cout << "****************************************" << endl;
cout << "   <13/10/03>    *  ~~~~~~~~~~~~~  ***" << endl;
cout << "...................*  ~ By ReyVaX ~  ***" << endl;
cout << "  Discriminant   *  ~~~~~~~~~~~~~  ***" << endl;
cout << "****************************************" << endl << endl;
cout << ""<<endl;
cout << "Merci a Gillig pour son aide ;) " << endl;
return 0;
}

 Conclusion

Je ne c pas comment faire pour mettre le resultat en fraction si cela ne tombe pas juste, sinon si quelqu'un sait comment on peut inclure les complex maillez moi - reyvax50@free.fr


 Sources de la même categorie

Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent
Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent
Source avec une capture CALCUL D'INCERTITUDE par Minilogus

Commentaires et avis

Commentaire de MoDDiB le 22/10/2003 17:02:23

Tu as % qui te donne le reste d'une division .
Donc s'il est != 0 alors ca tombe pas juste Donc a partir de la...

ex a = 7%5 ;
a vaut 2;

ensuite   Discriminant Ax²+B+C=0
je crois que c'est
Discriminant Ax²+Bx+C=0  que tu voulais car sinon b et c ne font q'un ^^
sinon j'ai pas tout vérifié mais ca me paré pas mal pour un 1er prog !!

Commentaire de djl le 22/10/2003 19:03:07

pourquoi tu utilise les e/s standard printf et scanf avec cout?
yen a qui diront que c chipoter, d'autres que c un affront de melanger c et c++, moi g dit que c une mauvaise habitude car c un coup a avoir des affichage vide et des saisie erroner car ca pe parasiter les tampon
sinon t pas obliger de foutre des parantheses ds les cout

Commentaire de gillig le 23/10/2003 16:20:21

* Petit bug : while(z==1);  (test)   et non while(z=1); (affectation)

* Petites optimisations possibles :
- Acarre ne sert à rien
- rcarre = sqrt(delta), pas la peine de recalculer b²-4ac
- x0 ne sert à rien : si delta=0, x0 = x1 = x2

* Pour les complexes, c'est tout simple : les solutions sont (-b +- i * rcarre) / (2a), ou (-b/2a) +- i * (rcarre/2a)

Commentaire de supair_hobbit le 23/10/2003 21:57:37

salut :o)

gillig t'es sur pour les complexes parce que rcarre c'est une racine d'un nombre négatif et je ne suis pas sur que cela marche.
en tout cas sinon le code suivant fonctionne :

#include &lt;stdio.h&gt;
#include &lt;iostream.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;math.h&gt;

/* By reyvax
    Discriminant Ax²+B+C=0 */

double main(double argc, char *argv[])

{

double A, B, C, x0, x1, x2, delta, Acarre, Bcarre,rcarre;
char x, debut , oui ;
int z;

do
    {

cout &lt;&lt; ("**************************************** ") &lt;&lt; endl ;
cout &lt;&lt; ("** Discriminant pour IR, ** By ReYvaX **") &lt;&lt; endl ;
cout &lt;&lt; ("****************************************") &lt;&lt; endl ;
cout &lt;&lt; (" ") &lt;&lt; endl;
    
    
    
     printf("
Entrez la valeur de A
");
     scanf("%lf", &A);  
    
     printf ("
Entrez la valeur de B
");
     scanf("%lf", &B);
    
     printf("
Entrez la valeur de C
");
     scanf("%lf", &C);  
    
     Acarre = pow(A,2); //declaration du carré
     Bcarre = pow(B,2);
     delta = (Bcarre-4*A*C);     //calcul de delta
     if (delta &gt;= 0) {
       rcarre = sqrt(delta); //racine carre de delta
     }
     else {
       rcarre = sqrt(-delta);
     }
     x0 =(-B/2*A);  
     x1= ( - rcarre / 2*A);
     x2= ( rcarre / 2*A);
    
     printf("
L'equation est donc:
");
     printf("
%lf x^2   + %lfx + %lf
a",A,B,C);
     printf ("
Delta a donc pour valeur %lf
", delta);
    
     if(delta &gt; 0)  // 1,2,-2 S=-3 et 1                                                                                                                                                                             //
     printf("
Il y'a deux solutions car delta est positif,  X1 = %lf et X2 = %lf
", x1+x0, x2+x0);
     if(delta == 0) // 1.2.1 S=- 1                                                      
     printf("
Il y'a qu'une solution car delta est nul,  X0 a donc pour valeur %lf
", x0);
     if(delta &lt; 0) // 2.2.2 S=.                                                                                                    
     printf("
Il y a deux solutions complexes conjuguées car delta est negatif, X1 = %lf+%lfi et X2 = %lf+%lfi
", x0, x1, x0, x2);
    
     cout &lt;&lt; ("
Voulez vous recommencer? oui 1 /non 2
") &lt;&lt; endl;
     scanf("%i", &z);
    
     cout &lt;&lt; ("****************************************") &lt;&lt; endl ;      
     cout &lt;&lt; ("   &lt;13/10/03&gt;    *  ~~~~~~~~~~~~~  ***") &lt;&lt; endl ;        
     cout &lt;&lt; ("...................*  ~ By ReyVaX ~  ***") &lt;&lt; endl ;
     cout &lt;&lt; ("  Discriminant   *  ~~~~~~~~~~~~~  ***") &lt;&lt; endl ;
     cout &lt;&lt; ("****************************************") &lt;&lt; endl ;
     cout &lt;&lt; (" ") &lt;&lt; endl ;
    
    if (z==2)
     {
        break;
     }
    

    
    }while(z=1);
        
return 0;
}

Commentaire de gillig le 27/10/2003 16:49:33

- pour les solutions complexes : effectivement, j'ai oublié de préciser qu'il faut inverser delta pour pouvoir calculer la racine carrée.
- je maintiens qu'il manque un signe = dans "while(z=1);"
D'ailleurs, avec "while(z==1)",  la ligne "if (z==2) break;" devient inutile.
- optimisations possibles :
    la variable Acarre est inutile (déclarée, affectée, mais pas utilisée)
    la variable Bcarre n'est utilisée qu'une fois, donc elle n'est pas indispensable
    les nouveaux calculs pour x0 x1 et x2 sont bien pratiques ; juste, on peut écrire x2 = -x1, voire carrément ne pas utiliser de variable x2 (du coup, la variable rcarre devient inutile à son tour, puisque utilisée une seule fois également)

Par ailleurs, il faudrait tester les valeurs de A B et C; si par exemple A=0, il s'agit d'une équation du 1er degré, il faut éviter de calculer x1 (division par 0)

Bref, en utilisant cin et cout et quelques autres petites modifs, je propose :

#include &lt;iostream.h&gt;
#include &lt;math.h&gt;

int main(int argc, char* argv[])
{
int z;

do
{
cout &lt;&lt; "****************************************" &lt;&lt; endl;
cout &lt;&lt; "** Discriminant pour IR, ** By ReYvaX **" &lt;&lt; endl;
cout &lt;&lt; "****************************************" &lt;&lt; endl &lt;&lt; endl;

double A, B, C;
cout &lt;&lt; " Entrez la valeur de A : ";
cin &gt;&gt; A;

cout &lt;&lt; " Entrez la valeur de B : ";
cin &gt;&gt; B;

cout &lt;&lt; " Entrez la valeur de C : ";
cin &gt;&gt; C;  

cout &lt;&lt; " L'equation est donc : ";
cout &lt;&lt; A &lt;&lt; " x^2 + " &lt;&lt; B &lt;&lt; "x + " &lt;&lt; C &lt;&lt; " = 0" &lt;&lt; endl;

if (A == 0.f)
{
if (B == 0.f)
if (C == 0.f)
cout &lt;&lt; " 0 = 0 ! Tout x de R est solution !" &lt;&lt; endl;
else
cout &lt;&lt; C &lt;&lt; " = 0 ! Pas de solution !" &lt;&lt; endl;
else
cout &lt;&lt; " Equation du 1er degre !" &lt;&lt; endl &lt;&lt; " x = " &lt;&lt; -C/B &lt;&lt; endl;
}
else
{
double delta = B*B - 4*A*C;
cout &lt;&lt; " Delta a pour valeur " &lt;&lt; delta &lt;&lt; endl;

double x0 = -B / (2*A);

if (delta &gt; 0) // 1,2,-2 S=-3 et 1
{
double x1 = sqrt(delta) / (2*A);
cout &lt;&lt; " Il y a deux solutions car delta est positif,  X1 = " &lt;&lt; x1+x0 &lt;&lt; " et X2 = " &lt;&lt; x0-x1 &lt;&lt; endl;
}
else if (delta == 0) // 1.2.1 S=- 1
cout &lt;&lt; " Il y'a qu'une solution car delta est nul,  X0 a donc pour valeur " &lt;&lt; x0 &lt;&lt; endl;
else // delta &lt; 0      2.2.2 S=.
{
double x1 = sqrt(-delta) / (2*A);
if (x1 &lt; 0) x1 = -x1; // on pose x1 solution positive pour éviter pbs de signe à l'affichage
cout &lt;&lt; " Il y a deux solutions complexes conjuguees car delta est negatif" &lt;&lt; endl;
cout &lt;&lt; " X1 = " &lt;&lt; x0 &lt;&lt; " + " &lt;&lt; x1 &lt;&lt; "i" &lt;&lt; endl;
cout &lt;&lt; " X2 = " &lt;&lt; x0 &lt;&lt; " - " &lt;&lt; x1 &lt;&lt; "i" &lt;&lt; endl;
}
}

cout &lt;&lt; " Voulez vous recommencer? oui 1 / non 2 " &lt;&lt; endl;
cin &gt;&gt; z;
} while (z == 1);

cout &lt;&lt; "****************************************" &lt;&lt; endl;
cout &lt;&lt; "   &lt;13/10/03&gt;    *  ~~~~~~~~~~~~~  ***" &lt;&lt; endl;
cout &lt;&lt; "...................*  ~ By ReyVaX ~  ***" &lt;&lt; endl;
cout &lt;&lt; "  Discriminant   *  ~~~~~~~~~~~~~  ***" &lt;&lt; endl;
cout &lt;&lt; "****************************************" &lt;&lt; endl &lt;&lt; endl;
return 0;
}

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales