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 :

Equation du 2e degré


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut Equation du 2e degré
    Bonjour a tous,

    Tout d’abord un grand merci à tous ceux qui mont déjà aidé.
    Même à ceux qui se sont montrés un peu blessant .
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
     
    double fct_delta(double a, double b, double c)
    {
        return (pow(b,2)-4*a*c);
    }
     
    double fct_x1(double b, double delta, double a)
    {
        return (((-b)+(sqrt(delta)))/(2*a));
    }
     
    double fct_x2(double b, double delta, double a)
    {
        return (((-b)-(sqrt(delta)))/(2*a));
    }
     
    double fct_partie_reel(double a, double b)
    {
        return ((-b)/(2*a));
    }
     
    double fct_partie_complexe(double delta, double a)
    {
        return (fabs((sqrt(delta))/(2*a)));
    }
     
    double fct_racine_droite(double b, double c)
    {
        return (-c/b);
    }
     
    void fct_affichage()
    {
        printf("\nResolution equation du second degree racine reel et irreel.\n");
    }
     
    void fct_affichage_a(double a)
    {
        printf("\nEntree la valeur a =");
    }
     
    void fct_affichage_b(double b)
    {
        printf("\nEntree la valeur b =");
    }
     
    void fct_affichage_c(double c)
    {
        printf("\nEntree la valeur c =");
    }
     
    void fct_resultat_dela(double delta)
    {
        printf("\ndelta = %0.3f\n", delta);
    }
     
     
    int main()
    {
        double a=0, b=0, c=0;
        double delta=0;
        double x1=0, x2=0;
        double partie_reel=0, partie_complexe=0;
        double racine_droite=0;
     
        fct_affichage();
     
        fct_affichage_a(a);
        scanf("%lf", &a);
     
        fct_affichage_b(b);
        scanf("%lf", &b);
     
        fct_affichage_c(c);
        scanf("%lf", &c);
     
        delta=fct_delta(a, b, c);
        fct_resultat_dela(delta);
     
        if (a!=0)
        {
            if (delta>0)
            {
                x1=fct_x1(b, delta, a);
                printf("\nLa valeur de x1 = %0.2f\n", x1);
                x2=fct_x2(b, delta, a);
                printf("\nLa valeur de x1 = %0.4f\n", x2);
            }
            else if (delta==0)
            {
                x1=fct_x1(b, delta, a);
                printf("\nLa valeur de x1 = %0.3f\n", x1);
                x2=fct_x2(b, delta, a);
                printf("\nLa valeur de x1 = %0.3f\n", x2);
            }
            else
            {
                partie_reel=fct_partie_reel(a, b);
                partie_complexe=fct_partie_complexe(delta, a);
                printf("\nLa valeur de x1 = %f + %fi\n", partie_reel, partie_complexe);
                printf("\nLa valeur de x1 = %f - %fi\n", partie_reel, partie_complexe);
            }
        }
        else if (b!=0 && c!=0)
        {
            printf("\nC'est une eqution du 1 er degree : bX+c");
            racine_droite=fct_racine_droite(b, c);
            printf("\nLa valeur de cette racine = %f", racine_droite);
        }
        else if (a==0 && b==0 && c==0)
        {
            printf("\nL'equation n'est pas resolvable.\n");
        }
        else
        {
            printf("\nL'equation est en realite un point.\n");
        }
     
        return 0;
    }
    voici mon programme équation du 2e dégré, que j'ai tapé moi même tout seul comme un grand et que je n'ai ni copié ni photocopié.
    Ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double fct_partie_complexe(double delta, double a)
    {
        return (fabs((sqrt(delta))/(2*a)));
    }
    ne fonctionne pas.

    De plus ma fonction,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fct_affichage_resultat(double somme, double multiplication, double division)
    ne compile pas.

    Pourriez-vous m'aider SVP ?

    Merci d'avance,

    Kumral

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Je ne vois aucune fonction "fct_void"...
    Alors soit ce sont mes yeux... soit c'est ton post qui n'est pas complet !

    Une ligne précise d'erreur/mauvais fonctionnement ?


    EDIT : le post a été édité, merci !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Quand tu dis que ta fonction ne fonctionne pas? c'est à dire? problème de compilation? elle ne retourne pas le résultat que tu attendais?

    Soit un peu plus précis sur ta demande .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par skeud Voir le message
    Quand tu dis que ta fonction ne fonctionne pas? c'est à dire? problème de compilation? elle ne retourne pas le résultat que tu attendais?

    Soit un peu plus précis sur ta demande .
    La compilation fonctionne mais lorsque j'entre pour a=1 ; b=2 ; c=3.
    Je devrais avoir 2 racine complexes avec une partie réel et une
    partie imaginaire, c'est la partie imaginaire qui ne fonctionne pas.

    donc c'est la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double fct_partie_complexe(double delta, double a)
    {
        return (fabs((sqrt(delta))/(2*a)));
    }
    qui contient sans doute une erreur, mais je ne la trouve pas.

    Merci d'avance pour votre aide,

    Kumral

  5. #5
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Là tout de suite maintenant je n'ai plus beaucoup de souvenirs des nombres complexes...

    Mais as-tu essayé d'afficher les paramètres passés à fct_partie_complexe ?
    Un ch'ti printf de delta et a pour démarrer...
    Puis afficher le résultat de chaque opération : sqrt(delta), 2*a
    Afficher la division sqrt(delta) / (2*a) => qui risque d'être la cause du problème vu que ce sera une division entière il me semble
    Et afficher la totale : fabs((sqrt(delta))/(2*a)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Oui en règle général, je printf pour savoir ou mon programme bloque
    la compilation. Je fait ça étape par étape. Mais ici, cela ne m'a pas trop
    avancer non plus.

    Je vais revoir cela au calme.

  7. #7
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    ça serait bien de donné un peu plus d'information, genre le résultat obtenu et le résultat attendu.

    Pour ce que j'en lis:
    sqrt te donnera un float, sauf que quand tu le divise par 2a, tu repasse en int
    essaye en rajoutant un cast float devant ta racine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double fct_partie_complexe(double delta, double a)
    {
        return (fabs((float)(sqrt(delta))/(2*a)));
    }
    Avec un peu de chance, c'est ton soucis.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  8. #8
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    On est deux à penser à la division !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    double fct_partie_complexe(double delta, double a)
    {
      printf("a : %f  delta : %f\n", a, delta);
      printf("sqrt : %f  2a : %f\n", sqrt(delta), 2*a);
      printf("div double : %f\n", (sqrt(delta) / (2*a)) );
      printf("div int : %d\n", (sqrt(delta) / (2*a)) );
      printf("res : %f\n", fabs((sqrt(delta))/(2*a)));
      return (fabs((sqrt(delta))/(2*a)));
    }
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    salut,

    Citation Envoyé par Kumral Voir le message
    La compilation fonctionne mais lorsque j'entre pour a=1 ; b=2 ; c=3.
    Je devrais avoir 2 racine complexes avec une partie réel et une
    partie imaginaire, c'est la partie imaginaire qui ne fonctionne pas.
    donc delta<0, non ?

    Et qu'arrive-t-il lorsqu'on prend la racine carrée d'un nombre négatif ?

  10. #10
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Sans souvenir spécifique... je suis encore PLUS convaincu par la réponse de f-leb que par celles de la division !

    Et tous les printf te l'auraient montré qu'il y aurait un problème à ce moment-là !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  11. #11
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par f-leb Voir le message
    salut,



    donc delta<0, non ?

    Et qu'arrive-t-il lorsqu'on prend la racine carrée d'un nombre négatif ?
    Effectivement j'avais pas pris en compte le fait que le delta serait négatif, +1 sur la réponse .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par skeud Voir le message
    sqrt te donnera un float, sauf que quand tu le divise par 2a, tu repasse en int
    Absolument pas. Une opération se fait toujours dans le type le plus large des opérandes présents. Donc un float divisé par un int donnera un float.
    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 à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Absolument pas. Une opération se fait toujours dans le type le plus large des opérandes présents. Donc un float divisé par un int donnera un float.
    OUI, vous avez raison. Mon delta doit être négatif pour calculer
    les racines complexes.

    C'est de la que vient mon erreur. En effet, la racines d'un delta négatif
    ne peut pas se calculer. Donc je doit prendre la valeur absolue du delta
    quand celui-ci est négatif.

    Voici donc grâce a votre aide la correction de la fonction fct_partie_complexe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double fct_partie_complexe(double delta, double a)
    {
        return (fabs((sqrt(fabs(delta)))/(2*a)));
    }

  14. #14
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Metalman Voir le message
    On est deux à penser à la division !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    double fct_partie_complexe(double delta, double a)
    {
      printf("a : %f  delta : %f\n", a, delta);
      printf("sqrt : %f  2a : %f\n", sqrt(delta), 2*a);
      printf("div double : %f\n", (sqrt(delta) / (2*a)) );
      printf("div int : %d\n", (sqrt(delta) / (2*a)) );
      printf("res : %f\n", fabs((sqrt(delta))/(2*a)));
      return (fabs((sqrt(delta))/(2*a)));
    }
    Super ceci est très intéressant et très éducatif.

    Merci .

  15. #15
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Ah... c'est juste l'affichage de chaque opération et valeur ! xD

    Normalement, si vous maîtrisez les debuggeurs, c'est la première chose que vous auriez fait !
    Mais les "vrais" debuggeurs nécessitent un minimum de prise en main, connaitre par coeur plein de commandes...

    Bref : printf, c'est LA fonction de base pour vérifier toutes ses valeurs ! :]
    %d : écrit un "int" sous forme décimale : 42 par exemple
    %f : écrit un "float"/"double" sous une forme classique (il me semble) : 12,002 par exemple
    %s : écrit un char* (attention à ce qu'il y ait le '\0' !)
    %c : affiche un char

    Et ça "suffit" pour les types de base en C sur des programmes peu techniques (si vous n'allez pas vérifier des valeurs héxa c'est suffisant à connaitre)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

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

Discussions similaires

  1. Resolution d'equation du quatrieme degré
    Par Lucie Mor dans le forum Mathématiques
    Réponses: 6
    Dernier message: 03/04/2008, 00h31
  2. Equation du 2ème degré
    Par vip4e dans le forum Pascal
    Réponses: 27
    Dernier message: 24/01/2008, 15h40
  3. Réponses: 6
    Dernier message: 17/11/2007, 13h17
  4. prbleme de resolution d'equation de 2eme degres ds builder c++
    Par nabilfaouzi dans le forum C++Builder
    Réponses: 8
    Dernier message: 07/11/2007, 19h36
  5. [TP] Equation du second degré
    Par WhiteTigerZ dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 08/11/2006, 22h00

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