mon prog en C s’arrête avant la fin
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

mon prog en C s’arrête avant la fin



  1. #1
    frequi1

    mon prog en C s’arrête avant la fin


    ------

    bonjour,

    voila mes codes, le problème c'est que mon programme s’arrête avant la fin et je ne vois pas du tout pourquoi, je suis sur que c'est une erreur bénigne mais je n'arrive pas a la trouver.
    Si des yeux plus expert pouvais me dire pourquoi ?
    Code:
     #include <stdio.h>
    #include <stdlib.h>
    #include "calcul.h"
    #include <math.h>
    
    int main()
    {
        printf("\t\t   Resolution d'un trinome de second degres\n\n\n");
    
        int valeur[3]={0};
       double delta = 0.0, result = 0.0, result1 =0.0;
    
        printf ("Veuillez svp donner le valeur de a, b, c tel que a.x(carre) + b.x + c = 0\n");
        printf ("\nValeur de a :  ");
        scanf ("%d", &valeur[0]);
        printf ("\nValeur de b :  ");
        scanf ("%d", &valeur[1]);
        printf ("\nValeur de c :  ");
        scanf ("%d", &valeur[2]);
        affiche (&valeur);
        delta = calculDelta (&valeur);
        printf ("\nLe discriminent DELTA vaut : %lf", delta);
    
        if (delta < 0)
        printf ("\nLe discriminant est négatif, il n'y a pas de solution possible pour x");
    
        else if (delta = 0)
        {
             result = delta0 (&valeur);
             printf ("\nLa seule solution possible pour x est %lf",delta0);
    
        }
       else if (delta > 0)
       {
           result = deltaX1 (&valeur, delta);
           result1 = deltaX2 (&valeur, delta);
           printf ("\nDeux solutions possibles\nx1 = %lf \nx2 = %lf", result, result1);
       }
    
        return 0;
    }
    et mes fonctions :
    Code:
     void affiche (int tab[])
    {
    
            printf ("%d x(carre) + (%d x) + (%d) = 0",tab[0],tab[1],tab[2]);
    
    }
    
    int calculDelta (int tab[])
    {
        int a = tab[0], b = tab[1], c = tab[2];
        double delta = 0,bcarre = b*b;
        delta = (bcarre)+ (-4*a*c);
        return delta;
    
    }
    
    double delta0 (int tab[])
    {
        double x = 0;
        x = (-tab[1])/(2*tab[0]);
        return x;
    }
    
    double deltaX1 (int tab[], double discri)
    {
      double x1 = 0;
      x1 = (-tab[1] + sqrt (discri)/(2*tab[0]));
      return x1;
    }
    
    double deltaX2 (int tab[], double discri)
    {
       double x2 = 0;
      x2 = (-tab[1] + (-sqrt (discri))/(2*tab[0]));
      return x2;
    
    }
    voila ou s'arrete mon prog......
    Nom : Sans titre 1.jpg
Affichages : 249
Taille : 40,6 Ko

    Merci pour votre aide

    -----

  2. #2
    invitef86a6203

    Re : mon prog en C s’arrête avant la fin

    else if (delta = 0)
    Assignation !

    else if (delta == 0)
    Comparaison !

  3. #3
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    Bonjour,

    c'est une erreur classique ... dans une conditionnelle il faut utiliser les opérateurs de comparaison et non d'affectation. En langage plus clair, il faut utiliser == pour comparer et = pour assigner.
    Si tu fais :
    Code:
    if (delta=0)
    alors tu affectes 0 à delta (détruisant son ancienne valeur), tu ne testes pas si delta vaut 0 comme dans :
    Code:
    if (delta==0)
    Quel compilateur utilises-tu ?

    Edit: grillé

  4. #4
    invite765732342432
    Invité

    Re : mon prog en C s’arrête avant la fin

    Ca vient probablement de là:

    else if (delta = 0)

    devrait être

    else if (delta == 0)

    [EDIT]Oups, multi-grillé !

  5. A voir en vidéo sur Futura
  6. #5
    frequi1

    Re : mon prog en C s’arrête avant la fin

    c'etait bien ca. Je savais que ce n'etait pas grand chose mais je ne trouvais pas.
    Merci

    Maintenant mon prog se déroule bien jusqu’à la fin mais les réponses sont fausses. va falloir revoir les calculs

  7. #6
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    En plus ton compilateur doit te balancer pas mal de warnings non ?

  8. #7
    frequi1

    Re : mon prog en C s’arrête avant la fin

    En plus ton compilateur doit te balancer pas mal de warnings non ?
    exact j'en etais farci

    Quel compilateur utilises-tu ?
    CODE:BLOCK 10.05

  9. #8
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    code::blocks est ton environnement de développement, je pense que ton compilateur doit être gcc.
    C'est toujours bien de regarder les warnings et d'essayer de voir pourquoi le compilo te les jette à la tête.
    Ce qui est bien est de dire au compilo de t'en donner un maximum (pour gcc tu peux ajouter -Wall et -Wextra, à voir la doc pour savoir comment faire dans code::blocks). Entre autre il t'aurait averti en disant un truc du genre "tient, il y a une affectation dans un conditionnelle ..."
    L'utilisation des double peut amener à des comportements qui te sembleront étranges (principalement dus aux limites de représentations).

  10. #9
    Jack
    Modérateur

    Re : mon prog en C s’arrête avant la fin

    Citation Envoyé par frequi1 Voir le message
    CODE:BLOCK 10.05
    Il y a un truc que j'ai du mal à comprendre avec les utilisateurs d'IDE tels que Code::Block. Dans ces IDE se trouve un debugger ultra simple à utiliser qui permet de tester son programme instruction par instruction, en visualisant la valeur des variables au fur et à mesure de l'exécution des instructions.
    La ligne incriminée devient donc évidente puisqu'on doit voir que même pour delta égal à 0, les instructions qui devraient être exécutées sont systématiquement sautées.

    A+

  11. #10
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    +1
    Comme frequi1 est en pleine phase d'apprentissage c'est le moment de cliquer sur debug
    Je n'ai jamais vraiment utilisé d'IDE pour le c, mais je pense que la faq ou la doc doit être suffisante pour les premiers pas.

  12. #11
    frequi1

    Re : mon prog en C s’arrête avant la fin

    Merci a vous. je vais essayer le debug.

  13. #12
    frequi1

    Re : mon prog en C s’arrête avant la fin

    très bien mais les deux fonction si dessous ne donne pas le bon résultat (vérifier avec papier crayon et calculatrice)

    Code:
    double deltaXun (int tab[], double discri)
    {
      double xun = 0;
      xun = (-tab[1] + sqrt(discri)/(2*tab[0]));// cette ligne de donne pas le bon resultat l'équation originale c'est : (-b + racine carré de delta)/(2*a)
      return xun;
    }
    
    double deltaXdeux (int tab[], double discri)
    {
      double xdeux = 0;
      xdeux = (-tab[1] + (-sqrt(discri))/(2*tab[0]));// cette ligne de donne pas le bon resultat l'équation originale c'est : (-b - racine carré de delta)/(2*a)
      return xdeux;
    }
    y'a t'il une facon spéciale pour coder les opérations mathématique.
    encore merci

  14. #13
    invited1c1a33e

    Re : mon prog en C s’arrête avant la fin

    Bonjour, commencez par vérifier avec printf que vos paramètres sont corrects.

  15. #14
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    Bonjour,

    non mais les opérateurs ont des priorités ... * et / ont un priorité plus grande que + et -. Par exemple

    Code:
    xdeux = (-tab[1] + (-sqrt(discri))/(2*tab[0]));
    correspond à


    Ce qui n'est pas tout à fait juste et en contradiction avec ton commentaire.

  16. #15
    frequi1

    Re : mon prog en C s’arrête avant la fin

    Nom : equation.jpg
Affichages : 217
Taille : 6,0 Ko

    voila le résultat que j'attends et sous cette formes.

    comment tu fais pour afficher une équation comme ça ?

  17. #16
    frequi1

    Re : mon prog en C s’arrête avant la fin

    Non désolé autant pour moi

    pour
    Code:
     xun = (-tab[1] + sqrt(discri))/(2*tab[0]);
    ca marche tres bien

    par contre c'est pour
    Code:
    xdeux = (-tab[1] + (-sqrt(discri))/(2*tab[0]));
    que c'est pas bon il me faux :
    Nom : equation.jpg
Affichages : 199
Taille : 8,6 Ko

  18. #17
    invite7a96054d

    Re : mon prog en C s’arrête avant la fin

    C'est juste une histoire de parenthésage :

    ( -b + sqrt(delta) ) / (2*a)
    ( -b - sqrt(delta) ) / (2*a)

    Pour écrire des équations en mode math, il y a un post dur le forum qui explique tout : LaTeX : explications et mode d'emploi

  19. #18
    frequi1

    Re : mon prog en C s’arrête avant la fin

    C'est bon je l'ai

    Code:
     xdeux = (-tab[1] -sqrt(discri))/(2*tab[0]);
    tout simplement

  20. #19
    invited9b9018b

    Re : mon prog en C s’arrête avant la fin

    Bonjour,

    Il utilise les balises latex : http://forums.futura-sciences.com/fo...e-demploi.html

    A+

Discussions similaires

  1. [Blanc] Mon lv atoll 5500 ne s arrete plus
    Par invitedaea0236 dans le forum Dépannage
    Réponses: 8
    Dernier message: 04/04/2012, 08h44
  2. [Blanc] Mon lave linge WHIRLPOOL AWM8123 s’arrête en cours de programme
    Par JDM74 dans le forum Dépannage
    Réponses: 2
    Dernier message: 27/01/2010, 22h28
  3. [Blanc] Sèche-linge Arthur Martin ADC513m : s'est arrêté avant la fin du cycle !
    Par invite4fb55fab dans le forum Dépannage
    Réponses: 3
    Dernier message: 02/11/2009, 18h09
  4. [Brun] mon magnétoscope s' arrete en cours d' enregistrement [Résolu]
    Par invite1952021b dans le forum Dépannage
    Réponses: 12
    Dernier message: 15/09/2008, 10h53
  5. aide fin de prog
    Par invitee43ac54a dans le forum Électronique
    Réponses: 1
    Dernier message: 17/03/2005, 21h31