IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

resoudre une fonction


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut resoudre une fonction
    Bonjour

    J'ai des difficultes dans la creation d'un petit programme qui resoud l'equation ax2+bx+c=0 avec le langage c.

    je vous laisse mon code bienque je sais bien qu'il est plein d'erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # include <stdio.h>
    # include <iostream.h>
    {
    int a,b,c,c;
    printf("enter a and b values");
    scanf("%d",&a,&b);
    // now checking the value of the discriminant delta
    printf("%d", (b^2)-(4*a*c));
    // the result of descriminant is
    if ((b^2)-(4*a*c)>0)
    printf("%d the roots", -b+(sqr(b^2-4*a*c))/2a);
    printf("%d the roots", -b-(sqr(b^2-v*a*c)/2a);
    else
    printf("%d there is no roots");
    }

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par bonomsoleil
    Bonjour

    J'ai des difficultes dans la creation d'un petit programme qui resoud l'equation ax2+bx+c=0 avec le langage c.

    je vous laisse mon code bienque je sais bien qu'il est plein d'erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # include <stdio.h>
    # include <iostream.h>
    {
    int a,b,c,c;
    printf("enter a and b values");
    scanf("%d",&a,&b);
    // now checking the value of the discriminant delta
    printf("%d", (b^2)-(4*a*c));
    // the result of descriminant is
    if ((b^2)-(4*a*c)>0)
    printf("%d the roots", -b+(sqr(b^2-4*a*c))/2a);
    printf("%d the roots", -b-(sqr(b^2-v*a*c)/2a);
    else
    printf("%d there is no roots");
    }
    scanf("%d", &a, &b); dans ce cas la il te faut 2 scanf.
    b^2 : ca ne fait pas b² mais ca effectue un XOR sur 2, pour la puissance tu dois coder ta propre fonction (mais dans ce cas la comme c'est juste b² autant ecrire b*b).

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Pour utiliser la puissance, il ya la fonction pow() dans la librairie math
    Maintenant si c'est juste pour mettre au carré, tu peux faire x*x
    De toute maniere, je crois que tu as besoin de "math" pour sqrt(), dans ce cas, il faut que tu inclues <math.h> et que tu linkes la librairie correspondantes avec "-lm"

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    lorsque j'utilise la fonction pow() comment devrais-je terminer mon code ?

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    terminer?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    ouais c'est a dire la fin . par exemple avec la fonction int main il ya toujours une valeure de retour

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bein,
    http://man.developpez.com/man3/pow.3.php
    pour savoir comment ça marche

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    redéclaration de c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%d",&a,&b);
    mais il n'y a aucune raison pour que ces coéfficients soient entiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%d", (b^2)-(4*a*c));
    Pas plus que le discriminant. La formule est fausse :b*b-4*a*c;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("%d the roots", -b+(sqr(b^2-4*a*c))/2a);
    printf("%d the roots", -b-(sqr(b^2-v*a*c)/2a);
    Ces résultats ne sont pas entiers. De plus la racine carrée est sqrt() , pas sqr.
    De plus les formules sont fausses :
    (-b+sqrt(b*b-4*a*c))/2a et (-b-sqrt(b*b-4*a*c))/2a

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    justement peux - tu etre plus exacte dans les erreurs ?

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    justement peux - tu etre plus exacte dans les erreurs ?
    Je suppose que cette phrase sybilline et ambigüe demande des précisions.
    - Déclare a,b,c comme des float ou des double.
    - Lit les TROIS valeurs (et non pas uniquement les deux premières : c est non initialisé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    scanf("%f%f%f", &a,&b,&c); // si a,b,c sont float
    ou 
    scanf("%lf%lf%lf", &a,&b,&c); // si a,b,c sont double
    - Pour obtenir le carré de b, multiplie b par b : -> b*b, d'où le discriminant delta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double delta = b*b-4*a*c ;
    - Les racines si elles existent sont (-b+sqrt(delta))/2/a et (-b-sqrt(delta))/2/a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     if(delta >0)
      {
          // printf de la première racine
          // printf de la deuxième racine
      }
    else if(delta==0)// printf de la racine double
          else  // printf pas de racines réelles

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    alors mon code devait - etre comme suivant

    /* resolve Quadratic Equation */
    # include <stdio.h>
    # include <conio.h>
    void main ()
    {
    double a,b,c;
    printf("enter a,b,and c values");
    scanf("%lf%lf%lf", &a,&b,&c);
    double delta = b*b-4*a*c;
    if (delta>0)
    {
    // print the roots of delta
    printf("%lf",(-b+sqrt(delta))/2*a);
    printf("%lf",(-b-sqrt(delta))/2*a);
    }
    else
    printf("no roots");
    }





  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bonomsoleil
    alors mon code devait - etre comme suivant
    C'est crade...

    Ton code corrigé et sécurisé. Pose des questions si tu ne comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    /* resolve Quadratic Equation */
    #include <stdio.h>
    #include <math.h>
    #include <float.h>
     
    static void purge (FILE * fp)
    {
       int c;
       while ((c = fgetc (fp)) != '\n' && c != EOF)
       {
       }
    }
     
    static void print_quad (double a, double b, double c)
    {
       int started = 0;
       if (fabs (a) > DBL_EPSILON)
       {
          printf ("%.2fx^2", a);
          started = 1;
       }
     
       if (fabs (b) > DBL_EPSILON)
       {
          if (started)
          {
             int sign = '+';
             if (b < 0)
             {
                sign = '-';
             }
             printf (" %c %.2fx", sign, fabs (b));
          }
          else
          {
             printf ("%.2fx", b);
             started = 1;
          }
       }
     
       if (fabs (c) > DBL_EPSILON)
       {
          if (started)
          {
             int sign = '+';
             if (c < 0)
             {
                sign = '-';
             }
             printf (" %c %.2f", sign, fabs (c));
          }
          else
          {
             printf ("%.2f", c);
          }
       }
       printf ("\n");
    }
     
    static void print_quad_roots (double a, double b, double c)
    {
       double delta = b * b - 4 * a * c;
     
     
       if (delta > 0)
       {
          // print the roots of delta
          printf ("x1 = %.2f\n", (-b + sqrt (delta)) / 2 * a);
          printf ("x2 = %.2f\n", (-b - sqrt (delta)) / 2 * a);
       }
       else
       {
          printf ("no real roots\n");
       }
    }
     
    int main (void)
    {
       double a, b, c;
       int n;
       do
       {
          printf ("enter a,b,and c values: ");
          n = scanf ("%lf%lf%lf", &a, &b, &c);
          if (n != 3)
          {
             purge (stdin);
          }
       }
       while (n != 3);
     
       print_quad (a, b, c);
     
       print_quad_roots (a, b, c);
     
       return 0;
    }

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    je voudrais precise que mon module a la fac est encore un module d'initiation au langage c. Or, n y aurait - il pas un solution plus " simple " a ce probleme ?

  14. #14
    Rédacteur

    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 113
    Par défaut
    si mais, ça ne sera pas une bonne solution
    Dans ton programme par exemple tu ne testes pas si a == 0 ou non, donc tu risques de tomber sur une division par 0

    (Je suis même pas sûr qu'on pourra l'appeller "solution" )

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Par défaut
    je sais que c'est logique. mais a mon stage actuel, on nous demande uniquement des chose simples a faire.

Discussions similaires

  1. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24
  2. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  3. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo