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 :

résoudre une équation de 2e degree


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut résoudre une équation de 2e degree
    Bonjour !
    j'ai besoin d'aide svp j'arrive pas a complier ce code la

    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
     
    # include <stdio.h>
    # include <math.h>
        void _main(void) {
               float a,b,c,D,x1,x2,x ;
               printf("Donner les coefficients  a, b et c \n");
               printf("a = ");
               scanf("%f",&a);
               printf("b = ");
               scanf("%f",&b);
               printf("c = ");
               scanf("%f",&c);
               if a=0 
                  if b=0 
                     if c=0 printf("R");
                     else printf("vide");
                  else x=-c/b printf("le resultat = %f",x);
               else D=b*b-4*a*c
               x1=-b-sqrtf(D)/2*a
               x2=-b+sqrtf(D)/2*a 
               x=-b/2*a
                 if D>0 printf("le resultat = %f ",x1,x2)
                 else 
                     if D=0 printf("le resultat = %f",x)
                     else printf("impossible");
                     ;
               ;
               }

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Tu as essayé de le compiler ? Peux tu me dire quelle erreur tu obtiens pour la ligne 13 ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    As-tu appris les bases du C ? Tes blocs if/else sont foireux. Les parenthèses sont inexistantes. Il y a des points-virgule inutiles, ou au contraire, manquants. Tes opérateurs de comparaison sont mauvais.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut
    Citation Envoyé par jeroman Voir le message
    As-tu appris les bases du C ? Tes blocs if/else sont foireux. Les parenthèses sont inexistantes. Il y a des points-virgule inutiles, ou au contraire, manquants. Tes opérateurs de comparaison sont mauvais.

    pouvez-vous m'aider SVP ??

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Tu as essayé de le compiler ? Peux tu me dire quelle erreur tu obtiens pour la ligne 13 ?
    oui tout a fait ligne 13
    pouvez-vous m'aider ?

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Ça va pas être facile ...

    Pour commencer, comme le fait remarquer jeroman, il va falloir apprendre qu'en C :

    * si tu fais un if, il faut mettre la condition entre parenthèse
    * a=b n'est pas une comparaison, c'est une affectation. Pour comparer il faut utiliser ==

    Donc un if a=0 est faux, il faut utiliser if (a==0)
    Les parenthèse et une comparaison.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Ça va pas être facile ...

    Pour commencer, comme le fait remarquer jeroman, il va falloir apprendre qu'en C :

    * si tu fais un if, il faut mettre la condition entre parenthèse
    * a=b n'est pas une comparaison, c'est une affectation. Pour comparer il faut utiliser ==

    Donc un if a=0 est faux, il faut utiliser if (a==0)
    Les parenthèse et une comparaison.
    Merci je vais refaire le code
    et pour les point virgules ??

  8. #8
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonsoir.

    Citation Envoyé par biyob00 Voir le message
    et pour les point virgules ??
    En C, le point-virgule indique une fin d'instruction.
    Donc, après chaque instruction, un point-virgule est obligatoire.
    Note tout de même que les accolades servent à « regrouper » une suite d'instructions, et ainsi le bloc qu'elles délimitent peut être considéré comme une instruction, mais ce n'est pas nécessaire de mettre un point-virgule après une accolade fermante.

    L'instruction vide est tout à fait valide.
    Du coup, on peut très bien placer un point-virgule alors qu'il n'y a pas d'instruction devant (après un autre point-virgule, après une accolade, au début du fichier, etc.) sans que cela soit rapporté comme une erreur.
    Le compilateur considère seulement que l'on a inséré une instruction vide.

    Ceci dit, c'est totalement inutile, et ce n'est pas conseillé d'en mettre là où ce n'est pas nécessaire (voire c'est déconseillé ?)
    Non seulement ça peut nuire à la lisibilité du code, mais si on fait n'importe quoi on peut se retrouver avec un point-virgule à un endroit où il est interdit.

    Pour revenir à ton code, on va se concentrer juste sur les dernières lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
               x=-b/2*a                                      // manquant
                 if D>0 printf("le resultat = %f ",x1,x2)    // manquant
                 else                                        // OK
                     if D=0 printf("le resultat = %f",x)     // manquant
                     else printf("impossible");              // OK
                     ;                                       // inutile
               ;                                             // inutile
               }                                             // OK

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut
    Merci steph
    j'ai réussi a compiler le code mais le programme ne fonctionne pas correctement
    voila le code

    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
     
    # include <stdio.h>
    # include <math.h>
        main() {
               float a,b,c,D,x1,x2,x,y ;
               printf("Donner les coefficients  a, b et c de l'equation \n");
               printf("a = ");
               scanf("%f",&a);
               printf("b = ");
               scanf("%f",&b);
               printf("c = ");
               scanf("%f",&c);
               x=-c/b;
               D=b*b-4*a*c;
               x1=-b-sqrtf(D)/2*a;
               x2=-b+sqrtf(D)/2*a;
               y=-b/2*a;
               if (a==0) 
                  if (b==0) 
                     if (c==0) 
                     printf("R");
                     else 
                     printf("vide");
                  else  
                  printf("le resultat = %f",x);
               else 
                 if (D>0) 
                 printf("le resultat = %f et %f",x1,x2);
                 else 
                     if (D==0) 
                       printf("le resultat = %f",y);
                     else 
                     printf("impossible");
               fflush(stdin); 
               getchar();  
     
               }

  10. #10
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Le programme ne fonctionne pas ?
    C'est-à-dire ?
    • Le programme plante ? (Quel type d'erreur ? À quel moment ?)
    • Il ne fait pas ce que tu attends ? (Exemple de résultats attendus/obtenus ?)
    • Il a un comportement étrange ? (Lequel ?)



    À part ça, il faut bien que tu comprennes que les structures de branchement (if, switch...) et les boucles (for, while...) ne marchent qu'avec l'instruction qui suit.
    Si l'on veut utiliser plusieurs instructions, il faut définir un bloc d'instructions en les délimitant par des accolades.
    En C, l'indentation est purement visuelle (facilite la lecture).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (<condition>)
        <instruction1>;
    <instruction2>;
    Si <condition> est vraie, les deux instructions sont exécutées.
    Sinon, seule <instruction2> est exécutée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (<condition>) {
        <instruction1>;
        <instruction2>;
    }
    Si <condition> est vraie, les deux instructions sont exécutées.
    Sinon, aucune n'est exécutée.


    Autre chose : F.A.Q. C: Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Iran

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    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
     
    #include <stdio.h>                                 
    #include <math.h>                                  
    main()                                             
    {                                                  
            float a,b,c,D,x1,x2,x ;                    
            printf("Donner les coefficients  a, b et c de l'equation \n");
            printf("a = ");                                               
            scanf("%f",&a);                                               
            printf("b = ");                                               
            scanf("%f",&b);                                               
            printf("c = ");                                               
            scanf("%f",&c);                                               
     
            D=b*b-4*a*c;
            if (D < 0)
            {
                    printf("impossible\n");
            }
            else if (D == 0)
            {
                    x = -b / 2*a;
                    printf("le resultat = %f\n", x);
            }
            else if (a == 0)
            {
                    x=-c/b;
                    printf("le resultat = %f\n", x);
            }
            else
            {
                    x1=-b-sqrtf(D)/2*a;
                    x2=-b+sqrtf(D)/2*a;
                    printf("le resultat = %f et %f\n",x1,x2);
            }
            fflush(stdin);
            getchar();
     
    }

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arash Voir le message
    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
     
    #include <stdio.h>                                 
    #include <math.h>                                  
    main()                                             
    {                                                  
            float a,b,c,D,x1,x2,x ;                    
            printf("Donner les coefficients  a, b et c de l'equation \n");
            printf("a = ");                                               
            scanf("%f",&a);                                               
            printf("b = ");                                               
            scanf("%f",&b);                                               
            printf("c = ");                                               
            scanf("%f",&c);                                               
     
            D=b*b-4*a*c;
            if (D < 0)
            {
                    printf("impossible\n");
            }
            else if (D == 0)
            {
                    x = -b / 2*a;
                    printf("le resultat = %f\n", x);
            }
            else if (a == 0)
            {
                    x=-c/b;
                    printf("le resultat = %f\n", x);
            }
            else
            {
                    x1=-b-sqrtf(D)/2*a;
                    x2=-b+sqrtf(D)/2*a;
                    printf("le resultat = %f et %f\n",x1,x2);
            }
            fflush(stdin);
            getchar();
     
    }
    Tiens ? Je ne connaissais pas sqrtf(). J'ai toujours eu l'habitude d'utiliser sqrt()....

    PS: tester a=0 est utile (pour éviter de diviser par 0) mais outre que si a=0 on n'est plus dans une résolution de polynôme, c'est dommage dans ce cas là de calculer delta inutilement (surtout que si b=0 et a=0 alors D=0 et on reste alors dans le if et on divise 0 par 2a !!!)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Ça me paraît pas mal.
    M'enfin comme je le disais plus haut, il ne faut pas vider le tampon de l'entrée standard.

    Sinon, je ne sais pas quel compilateur tu utilises, mais normalement en C la fonction main() retourne un int.
    Par convention, on retourne 0 lorsque le programme termine normalement, ou une valeur non nulle en cas d'erreur, cette valeur servant de code d'erreur.
    On peut aussi utiliser les constantes EXIT_SUCCESS et EXIT_FAILURE, disponibles dans l'en-tête « stdlib.h ».

    Tu n'as pas prévu le cas où, lorsque D == 0, a == 0.
    Dans ce cas, on ne peut pas calculer -b / 2*a.
    Bon, cela signifie que b == 0, et du coup ce n'est plus vraiment une équation du second degré.
    Elle est toujours vraie si c == 0, et toujours fausse sinon.
    Mais bon, c'est un détail...

    La fonction scanf() n'est pas très conseillée pour lire les entrées claviers.
    Quand tu seras plus à l'aise, intéresse-toi à la méthode qui consiste à lire une chaîne de caractères depuis l'entrée standard, puis de la transformer en le type désiré : fgets(), atof() (attention, cette fonction retourne un double), strtof() (retourne un float, mais moins intuitive)...

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 23
    Par défaut
    Merci steph vous m'avez beaucoup aider
    voici le code finale et ca marche a 100%
    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
     
    # include <stdio.h>
    # include <math.h>
      int main() {
               float a,b,c,D,x1,x2,x,y ;
               printf("Donner les coefficients  a, b et c de l'equation \n");
               printf("a = ");
               scanf("%f",&a);
               printf("b = ");
               scanf("%f",&b);
               printf("c = ");
               scanf("%f",&c);
               if (a==0){
                  if (b==0) {
                     if (c==0) 
                     printf("R  \a");
                     else 
                     printf("vide");
                     }
                  else {
                  x=-b/c;  
                  printf("le resultat = %f",x);}
                  }
               else {
               D=b*b-4*a*c;
               x1=-b-sqrt(D)/2*a;
               x2=-b+sqrt(D)/2*a;
                 if (D>0){ 
                 printf("le resultat = %f et %f",x1,x2);
                 }
                 else {
                     if (D==0) {
                     y=-b/2*a;
                       printf("le resultat = %f",y); 
                       }
                     else 
                     printf("impossible");
                     }
                     }
               fflush(stdin); 
               getchar();  
     
               }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résoudre une équation matricielle
    Par mekdar dans le forum Mathématiques
    Réponses: 7
    Dernier message: 19/01/2008, 12h49
  2. Résoudre une équation ax²+bx+c=0
    Par Ammo_dz dans le forum Pascal
    Réponses: 2
    Dernier message: 02/01/2008, 22h41
  3. Réponses: 2
    Dernier message: 22/11/2007, 14h58
  4. Réponses: 8
    Dernier message: 08/04/2007, 01h38
  5. Résoudre une équation sans isoler y
    Par ido123 dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/12/2006, 03h35

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