Résolution automatique des trinomes du second dégré.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 099 fois - Téléchargée 19 fois

Contenu du snippet

Bonjour, je m'appelle Maxime j'ai 17ans je suis au lycée en Série S.Et j'ai décidé de coder ce petit outils qui permet de résoudre les trinomes du second degrés très facilement. Ils vous suffit d'entrer les 3 coefficient intervenant dans votre trinome "ax² + bx +c". Nommé respectivement a, b et c.

Qu'est ce qu'un trinome du second degré ?
http://www.bibmath.net/dico/index.php3?action=affiche&quoi=./t/trinome.html

Note : Dans le code source le discriminant est appelé "Delta".

Je vous prie d'être indulgent ceci est ma toute première création en C.

Source / Exemple :


1.
      #include <stdio.h>
   2.
      #include <stdlib.h>
   3.
      #include <math.h>
   4.
       
   5.
      long signeDelta (long a, long b, long c) {
   6.
              return ((b*b) - (4*a*c));
   7.
      }
   8.
       
   9.
      int main(int argc, char **argv) {
  10.
              long resultat1,denominateur,a,b,c;
  11.
              double resultatNul,numerateur1,numerateur2,resultatPositif1,resultatPositif2,racine;
  12.
              unsigned long signeDeltaArange;
  13.
       
  14.
              if ( argc == 4 ) {
  15.
                      sscanf(argv[1], "%ld", &a);
  16.
                      sscanf(argv[2], "%ld", &b);
  17.
                      sscanf(argv[3], "%ld", &c);
  18.
              } else {
  19.
                      printf ("Entrez dans l'odre a, b et c:\n");
  20.
                      printf ("Example:\n");
  21.
                      printf ("\ta b c : 3 5 21\n\n");
  22.
       
  23.
                      printf("a b c : ");
  24.
                      scanf ("%ld %ld %ld", &a, &b, &c);
  25.
              } /* Les coefficient sont scannés chacun leur tour sauf si l'utilisateur se trompe et les rentre en meme temps, dans ce cas ils seront scannés ensemble mais quand même placés dans la bonne variable */
  26.
       
  27.
              resultat1 = signeDelta(a,b,c);
  28.
              printf ("Le Delta vaut %ld\n", resultat1);
  29.
       
  30.
              if (resultat1 == 0) {
  31.
                      resultatNul = -(b) / (2*a);
  32.
                      printf("La seule solution est %lf\n", resultatNul);
  33.
              } else if ( resultat1 > 0) {
  34.
                      denominateur = 2*a ;
  35.
                      racine = sqrt(resultat1);
  36.
                      numerateur1 =   ((-b) - racine);
  37.
                      resultatPositif1 = numerateur1/denominateur;
  38.
                      numerateur2 = (-b) + racine;
  39.
                      resultatPositif2 = numerateur2/denominateur;
  40.
       
  41.
                      printf ("Le premier resultat est %lf\n", resultatPositif1);
  42.
                      printf ("Le deuxieme resultat est %lf\n", resultatPositif2);
  43.
              } else {
  44.
                      printf ("Le Delta est negatif donc le trinome ne s'annule jamais\n");
  45.
              }
  46.
       
  47.
              return 0;
  48.
      }

Conclusion :


Voilà, si vous avez des remarques à faire n'hésitez pas.

A voir également

Ajouter un commentaire

Commentaires

lemuria1
Messages postés
7
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
18 août 2009
-
Perso voici mon code , j'ai mis pas mal de truc inutile dedans , c'est cool pour se familiariser avec le C.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define carre(x) x * x//Macro pour le Carré de X.
#define racine(x) sqrt(x)//Macro pour la racine-carré , c'est plus beau.

int main()
{

double a,x,b,c,delta = 0 ;
double *PointeursurA = &a;
double *PointeursurB = &b;
double *PointeursurC = &c;
printf ("Recsolution d'ecquation du type ax%c + bx + c par lemuria.\n",0xFD);
printf ("Une equation du second degre est de la forme ax%c + bx + c = 0 \n Veuillez indiquer A \a : ",0xFD);//On indique A
scanf("%lf", &a);
printf("L'adresse de la variable A est : %d \n", &PointeursurA);
printf("Valeur de A (pointeur) : %.2lf \n", *PointeursurA);

printf (" Veuillez indiquer B \a: ");
scanf("%lf", &b);
printf("L'adresse de la variable age est : %d \n", &b);
printf("Valeur de B (pointeur) : %.2lf \n", *PointeursurB);

printf (" Veuillez indiquer C \a : ");//On Indique C
scanf("%lf", &c);
printf("Valeur de C (pointeur) : %.2lf \n", *PointeursurC);
printf("L'adresse de la variable age est \a : %d \n", &c);

printf("\n \a\a\a\a Resume\n A = %.2lf , B = %.2lf et C = %.2lf \n \n",a,b,c);// On resume la situation ^^
delta = carre(b);
printf ("B %c = %.2lf \n \n", 0xFD,delta );
delta = delta - (4 * ((a) * (c)));
printf (" B%c-4ac = %.2lf \n \n", 0xFD, delta );
if ( delta < 0)
{
printf ("L'equation n'admet aucune solution.\n");
system("PAUSE");
}
else if ( delta == 0)
{
printf ("L'equation admet une solution. ",b,a );
x = ( (- (b)) / (2 * a)) ;
printf("X= %.2lf \n",x);
system("PAUSE");
}
else if ( delta > 0)
{
printf ("L'equation admet 2 solution.\n Premiere solution \n",b,delta );
x = ( -(b) + (racine(delta))) / (2*a );
printf("X= %.2lf \n",x);#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define carre(x) x * x//Macro pour le Carré de X.
#define racine(x) sqrt(x)//Macro pour la racine-carré , c'est plus beau.

int main()
{

double a,x,b,c,delta = 0 ;
double *PointeursurA = &a;
double *PointeursurB = &b;
double *PointeursurC = &c;
printf ("Recsolution d'ecquation du type ax%c + bx + c par lemuria.\n",0xFD);
printf ("Une equation du second degre est de la forme ax%c + bx + c = 0 \n Veuillez indiquer A \a : ",0xFD);//On indique A
scanf("%lf", &a);
printf("L'adresse de la variable A est : %d \n", &PointeursurA);
printf("Valeur de A (pointeur) : %.2lf \n", *PointeursurA);

printf (" Veuillez indiquer B \a: ");
scanf("%lf", &b);
printf("L'adresse de la variable age est : %d \n", &b);
printf("Valeur de B (pointeur) : %.2lf \n", *PointeursurB);

printf (" Veuillez indiquer C \a : ");//On Indique C
scanf("%lf", &c);
printf("Valeur de C (pointeur) : %.2lf \n", *PointeursurC);
printf("L'adresse de la variable age est \a : %d \n", &c);

printf("\n \a\a\a\a Resume\n A = %.2lf , B = %.2lf et C = %.2lf \n \n",a,b,c);// On resume la situation ^^
delta = carre(b);
printf ("B %c = %.2lf \n \n", 0xFD,delta );
delta = delta - (4 * ((a) * (c)));
printf (" B%c-4ac = %.2lf \n \n", 0xFD, delta );
if ( delta < 0)
{
printf ("L'equation n'admet aucune solution.\n");
system("PAUSE");
}
else if ( delta == 0)
{
printf ("L'equation admet une solution. ",b,a );
x = ( (- (b)) / (2 * a)) ;
printf("X= %.2lf \n",x);
system("PAUSE");
}
else if ( delta > 0)
{
printf ("L'equation admet 2 solution.\n Premiere solution \n",b,delta );
x = ( -(b) + (racine(delta))) / (2*a );
printf("X= %.2lf \n",x);
printf ("Deuxieme solution \n");
x = ( -(b) - (sqrt(delta) )) / (2*a );
printf("X= %.2lf \n",x);
system("PAUSE");
}
return 0 ;
}
cs_Altaris
Messages postés
6
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
25 mai 2009
-
Sympa comme code mais tu pourrais l'améliorer pour des résolutions avec discriminant négatif...
MisterFelx
Messages postés
1
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
30 juillet 2009
-
Merci, il est vrai qu'il manque pas mal de chose. Mais j'était tellement pressé de poster mon premier code que j'ai peut-être un peu baclé certaines parties :/
Merci encore pour ces idées d'améliorations
gnairod
Messages postés
37
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
11 avril 2010
-
qq remarques :
Fonction polynome du second degre : f(x) = ax^2 + bx + c, f(x) : R->R.
(a,b,c) appartient a R donc a,b,c doit-etre de type float ou double (pour la precision).
Ensuite il faut construire un bon algorithme de resolution et cela passe par la decomposition des actions complexes.

algorithme :

fonction discriminant(entree Reel a, entree Reel b, entree Reel c) retourne Reel
debut
retourner ( b * b - 4 * a * c );
fin

// Solve ax^2 + bx + c = 0
// x0 : premiere racine
// x1 : deuxieme racine
// renvoie vrai si des solutions existe dans R
// renvoie faux s'il n'existe pas de solutions dans R
fonction resoudre(entree Reel a, entree Reel b, entree Reel c, sortie Reel x0, sortie Reel x1) retourne Booleen
debut
b := faux;

si a = 0 alors
lever_exception();
fin si;
delta := discriminant(a, b , c);
si delta >= 0 alors
b := vrai;
x0 = (-b - sqrt(delta)) / (2*a);
x1 = (-b + sqrt(delta)) / (2*a);
sinon
b := faux;
fin si;
retourner ( b );
fin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.