begin process at 2012 02 05 04:20:11
  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 293

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 UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

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


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,406 sec (3)

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