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 :

Problème code équation second degré


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Par défaut Problème code équation second degré
    Bonjour, j'ai un problème dans mon code, j'ai créé void calculequation pour calculer les racines réelles d'un polynome du second degré, qui marche très bien, mais dans mon programme principal j'ai un problème, mon but étant de demander après chaque résolution à l'utilisateur s 'il souhaite résoudre une autre équation.
    Je tape 1 pour refaire ou 0 pour arrêter, sauf que je dois saisir la valeur 2 fois pour que mon programme comprenne, et si je tape 1 deux fois, ça marche sauf que ma valeur "a" pour le 1er coefficient prend la valeur 1 !!
    Pour arrêter le programme, je dois saisir 2 fois 0.
    Voici mon code, en espérant que quelqu'un puisse m'expliquer le soucis !
    Merci

    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
     
    #include <stdio.h>
    #include <math.h>
     
    void calculequation () {
        float a,b,c;
        float delta;
            printf("Veuillez saisir les coefficients a,b et c\n");
            printf("a= "); scanf("%f",&a);
            printf("b= "); scanf("%f",&b);
            printf("c= "); scanf("%f",&c);
            delta=(b*b)-(4.0*a*c);
            printf("delta=%f\n",delta);
            if (a==0 && b==0 && c==0)
                printf("Tout réel est une solution de cette équation.\n");
            else if (a==0 && b==0)
                printf("Cette équation ne possède pas de solutions.\n");
            else if (a==0) {
                printf("La solution de cette équation du premier degré est :\n");
                printf(" x = %.4f\n", -c/b);
            }
     
            else if (delta>0) {
                printf("Les solutions réelles de cette équation sont :\n");
                printf(" x1 = %.4f\n",(-b - sqrt(delta))/2*a );
                printf(" x2 = %.4f\n",(-b + sqrt(delta))/2*a );
            }
            else if (delta==0) {
                printf("Cette équation a une seule solution réelle :\n");
                printf(" x =  %.4f\n", -b/(2*a));
            }
            else {
                printf("Pas de solutions réelles pour cette équation\n");
            }
    }
     
    int main () {
            int continuer=1;
            while (continuer==1) {
                calculequation();
                printf("Voulez-vous résoudre une autre équation ? Entrez 1 pour oui et 0 pour non\n");
                scanf("%d\n",&continuer);
            }
    return 0;
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    c'est dû à l'enchaînement des appels à scanf().
    * scanf() lit des caractères dans le buffer d'entrée et les compare au format demandé
    * Au buffer d'entrée s'ajoute une ligne quand on appui sur la touche "entrer".

    En faisant scanf( "%d\n" , &continuer ); tu demandes explicitement un entier et une ligne.
    Ce qu'il se passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    buffer  scanf()
     \n        s'il restait des espaces ou des CR, les sauter en attendant début de l'entier
     1         (ne voit rien tant que ligne est incomplète)
     \n        lit 1
               tous les séparateurs sont ignorés (espace, CR, ..)
               on veut une ligne en plus, attendre
     2
     \n        ligne reçue, retourner le résultat "1"
               le prochain scanf verra "2\n"
    Ce qu'il faut faire c'est plutôt :
    scanf( " %d" , &continuer ); vider les séparateur éventuels, puis lire un nombre entier

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Par défaut
    Merci beaucoup pour cette réponse, effectivement tout marche correctement maintenant !!

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

Discussions similaires

  1. [XL-2010] Problème macro equation second degré
    Par Roxas84 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/10/2013, 12h12
  2. [Débutant] Problème équation différentielle du second degré
    Par walahii dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/01/2011, 11h41
  3. Problème code résolution équation différentielle
    Par glenngrauwels dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/02/2010, 20h12
  4. Visual basic: algo résolvant une équation du second degré
    Par mauriiice dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 05/12/2005, 17h16

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