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ésolution équation 2ème ordre


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Résolution équation 2ème ordre
    bonjour a tous,
    je débute en C, et j'ai pour exercice de résoudre une équation du 2ème ordre.
    J'ai écris quelque chose, mais c'est une véritable usine a gaz!!!
    est ce que quelqu'un peut m'aiguiller?

    Mon problème est avec les "if imbriques", je n'arrive pas a trouver un cours simple pour les comprendre.

    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
    /* ceci est le TP2 */
    /* */
    /*resolution equation diff du 2nd ordre*/
     
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
     
    int main()
    {
    /*déclaration des variables locales*/
     
    	float a,b,c,sol1,sol2,det; 
    	/*float sol1,sol2,det;*/
    	int existsol1,existsol2;
    	/*char chaine[20];*/
     
    /* saisie des coeff*/
     
     	printf("entrez a \n");
    	scanf("%f",&a);
    	printf("entrez b \n");
    	scanf("%f",&b);
    	printf("entrez c \n");
    	scanf("%f",&c);
     	/*printf("%.2f x²+ %.2f x+ %.2f = 0 \n",a,b,c);
            det=sqrt((pow(b,b))-4*a*c);
            printf("det= %f\n",det);*/
     
     
    	/* printf("%.2f x²+ %.2f x+ %.2f = 0 \n",a,b,c);*/
     
    /* test des coeff et resolution*/
    /* a=0 ?*/
            existsol1=0;
    	existsol2=0;
      if (a==0) 
    	{ 
    	 if (b==0) /* b=0 */
    	  {
    	    if (c==0)	/* c=0 */
    	    {
    	     existsol1=0/*tout x*/
    	    /* chaine[]=(" tout x \n");*/
    	     printf("Tout x\n");
    	     }
    	   else
    	    {
    	    existsol1=0/*c!=0*/
    	   /* chaine[]=(" pas de solution \n");*/
    	    printf(" pas de solution \n");
    	    }
    	   /* */
    	 else /*b!=0*/
               {
                existsol1=1/*tout x*/
    	    sol1=-c/b
    	    /*chaine[]=(" 1 solution \n");*/
    	    printf("1 solution X= %f \n",sol1);
                }
           }
       else 	{
              printf("%.2f x²+ %.2f x+ %.2f = 0 \n",a,b,c)
              det=sqrt((pow(b,b))-4*a*c)
              printf("det= %f\n",det);
     
    	 if (det<0)
     	        { 
    		printf("det<0 \n")
                    existsol1=1 
    		/* chaine[]=(" pas de solution: \n");*/
    		printf("pas de solution \n");
                    }
    	    if (det>0)
    		{
    		sol1=(-b+det)/2*a
    		sol2=(-b+det)/2*a
                    existsol1=1
    		existsol2=1	
                    /*chaine[]=(" 2 solutions: \n");*/
    	        printf("2 solutions: X1= %2.f X2=%2.f \n",sol1,sol2);
    		}
                if (det==0)
    		 { 
    		  sol1=(-b+det)/2*a
                      existsol1=1
    		  /* chaine[]=(" 1 solution double: \n");*/
    		  printf("1 solution double: X=%f  \n",sol1);
                      }
     
            };
    	return 0;
    };
    merci pour vos conseils

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 812
    Points : 7 097
    Points
    7 097
    Par défaut
    J'ai écris quelque chose, mais c'est une véritable usine a gaz!!!
    Si tu as cette impression alors pense à une autre organisation, en voyant du côté des fonctions tu pourras traiter ton problème étape par étape, et qui puis est tester chacune des fonctions construites.

    Quand à moi je ferais une structure resultat comprenant delta, a, b et c

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    typedef struct
    {
        float delta;
        int a;
        int b;
        int c;
    } resultat;
     
    void calc_delta(resultat *result, int x, int y, int z);
     
    int main(void)
    {
        resultat *res = malloc(sizeof(resultat));
        calc_delta(res, 4, 8, 2);
        printf("delta vaut %f\n", res->delta);
        free(res);
        return 0;
    }
     
    void calc_delta(resultat *result, int x, int y, int z)
    {
        result->delta = sqrt(y*y - 4*x*z);
    }
     
    /* Suite des fonctions utiles */
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Et moi je définirais ce que sont les 6 cas :

    a = 0
    det > 0
    det < 0
    det = 0
    a != 0
    b = 0 c = 0
    b = 0 c != 0
    b != 0

    Comment les nommerais-tu ? Je subodore que ça sera quelque chose comme "matrice inversible", ou "une solution unique", "pas de solution", etc..

    Et je ferais un switch, en ayant fait 6 define
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Et moi je définirais ce que sont les 6 cas :

    a = 0
    det > 0
    det < 0
    det = 0
    a != 0
    b = 0 c = 0
    b = 0 c != 0
    b != 0

    Comment les nommerais-tu ? Je subodore que ça sera quelque chose comme "matrice inversible", ou "une solution unique", "pas de solution", etc..

    Et je ferais un switch, en ayant fait 6 define
    Salut
    Perso je pense que si a vaut 0, on ne peut plus appeler cela "équation du 2° degré" et donc on entre alors dans "autre chose" (équation du premier degré qui se résout de façon différente).
    Et si a ne vaut pas 0, alors tous les autres cas peuvent se regrouper en "det < 0" ou "det >= 0". Éventuellement si vraiment on veut détailler on peut faire une distinction supplémentaire en "det > 0" ou "det = 0" mais cette distinction reste facultative (si det = 0 alors les deux solutions sont les mêmes)...
    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]

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Salut

    L'énoncé du TD prévoit a, b,c quelconques .Je suis d'accord , si a=0 on a une équation du 1er ordre.
    C est pour cela que on utilise les if imbriques pour lister tout les cas.
    si a=0
    si b=0
    si c=0

    donc
    comment voir tous ces cas ?
    a=b=c=0 solution=R
    a=0=b=0, c pas de solution
    a=0 b,c 1 solution
    a,b,c solution selon delta
    je n'arrive pas à construire un algo simple avec les if
    est-ce que vous comprenez mieux mon soucis ?

  6. #6
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 551
    Points
    1 551
    Par défaut
    Hello,

    Ceci pourra peut-être t'aider (merci à Souviron)
    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
    if(a) {
        // calcul de det
        if(det<0) {
            // a!=0, det<0
            }
        else {
            if(det>0) {
                // a!=0, det>0
                }
            else {
                // a!=0, det==0
                }
            }
        }
    else { // a==0
        if(b==0) {
            if(c) {
                // a==0, b==0, c!=0
                }
            else {
                // a==0, b==0, c==0
                }
            }
        else {
            // a==0 && b!=0
            }
        }
    Edgar.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour
    Je comprends ton algo:
    comment définir le det alors que on ne connait pas b et c??
    Je pensais d'abord faire ainsi:

    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
    Si a=0
      {
      si b=0
       {
        si c=0
         { ecrire: tout R}
        sinon 
         {ecrire :pas de solution}
        }
       sinon (pour le cas ou b est différent de 0)
        {
         ecrire:1 solution c/b
         }
     sinon (cas ou a est différent de 0)
       {
        calcul du det
        si det<0 ecrire : pas de solution 
        si det=0 ecrire : 1 solution double 
        si det>0 ecrire : 2 solutions
    }
    Voila mon algo:
    est ce qu'il vous parait bien, sinon pourquoi ?
    et surtout comment imbriques if (début et fin de mes accolades):elles sont mal placées
    merci

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    else { // a==0
        if(b==0) {
            if(c) {
                // a==0, b==0, c!=0
                }
    Dans ce cas, c'est une équation de type c=valeur qui est sois vraie, sois fausse mais qui, en tout cas, n'a pas d'inconnue. Est-ce vraiment utile alors de programmer un algo dans ce cas ???

    Citation Envoyé par gnora Voir le message
    Bonjour
    Je comprends ton algo:
    comment définir le det alors que on ne connait pas b et c??
    La résolution d'une équation du 2° degré implique la présence de l'équation donc que l'on connaisse a, b et c. Et dans ce cas, det=b2-4ac.
    Inversement, il est définitivement et absolument impossible de résoudre une équation du 2° degré si on n'a pas b et c donc tenter un algo en ce sens ne sert absolument à rien...

    Citation Envoyé par gnora Voir le message
    Bonjour
    Je comprends ton algo:
    comment définir le det alors que on ne connait pas b et c??
    Je pensais d'abord faire ainsi:

    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
    Si a=0
      {
      si b=0
       {
        si c=0
         { ecrire: tout R}
        sinon 
         {ecrire :pas de solution}
        }
       sinon (pour le cas ou b est différent de 0)
        {
         ecrire:1 solution c/b
         }
     sinon (cas ou a est différent de 0)
       {
        calcul du det
        si det<0 ecrire : pas de solution 
        si det=0 ecrire : 1 solution double 
        si det>0 ecrire : 2 solutions
    }
    Voila mon algo:
    est ce qu'il vous parait bien, sinon pourquoi ?
    Oui il est correct (mais la partie où a == 0 ne correspond plus à une équation du 2° degré donc ne correspond plus à l'énoncé).

    Accessoirement l'instruction "si det<0 ecrire : pas de solution" pourrait être complétée ainsi "si det<0 ecrire : pas de solution dans R" (parce qu'il y a quand-même des solutions dans I)...
    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]

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Salut
    On peut dire qu'on peut valider mon algo?
    Quand j'execute le code, il ne me fais pas tout les cas, notament la partie avec le det.
    J'ai rajouter dans le code des affichages pour voire ce ke fait le programme.
    Par exemple il ne m'affiche jamais le det!
    Je pense donc qu'il ne fait pas tout le code a cause de mes {} mal places!

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gnora Voir le message
    Je pense donc qu'il ne fait pas tout le code a cause de mes {} mal places!
    Code c : 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
    Si a=0
    {
        si b=0
        {
            si c=0
            {
                ecrire: tout R
            }
            sinon 
            {
                ecrire :pas de solution
            }
        }
        sinon (pour le cas ou b est différent de 0)
        {
            ecrire:1 solution c/b
        }
    }
    sinon (cas ou a est différent de 0)
    {
        calcul du det
        si det<0 ecrire : pas de solution 
        si det=0 ecrire : 1 solution double 
        si det>0 ecrire : 2 solutions
    }
    Ben si tu avais indenté correctement ton code tu aurais vu ce qu'il manque...

    PS: je suis même étonné que ça ait compilé...
    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]

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 25
    Points
    25
    Par défaut Algorithme pour résoudre l'équation du deuxème degré: ax2 + bx + c = 0
    Si a = 0, on se ramène à une équation du premier degré.
    Si a est différent de 0,
      on calcule le discriminant Delta = b2 - 4 * a * c
      si Delta>0 l'équation a 2 racines réelles distinctes que l'on
         calcule avec (-b+√Delta)/(2*a)
                   et (-b-√Delta)/(2*a)
      si Delta=0, les 2 formules ci-dessus sont encore valables
         et fournissent 2 valeurs égales -b/(2*a)
      si Delta<0, les 2 formules contenant Delta ne sont
         plus valables dans les réels et il faut passer dans l'ensemble des nombres complexes
         pour obtenir des réponses
                       -b/(2*a) +i √-Delta /(2*a)
                       -b/(2*a) -i √-Delta /(2*a)
         NOTE: i est un symbole tel que i2=-1
    Solution :

    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
    {
     
    float a, b, c  ,Delta ;
    printf("Résolution de ax2 + bx + c = 0 \n ")  ;
    printf("Introduisez le coefficient de x2: ") ;
    scanf("%f",&a) ;
     
    printf("Introduisez le coefficient de x:") ;
    scanf("%f",&b) ;
     
    printf("Introduisez le terme indépendant:") ;
    scanf("%f",&c) ;
     
    if( a==0 ) { printf("Equation du premier degré.") ;
    else  { Delta = b*b-4*a*c; }
          if  ( Delta>0 ) { printf("2 racines réelles distinctes:");
                            printf("x1=%f",(-b+sqrt(Delta)/(2*a));
                            printf("x2=%f",(-b-sqrt(Delta)/(2*a)); }
     
          else if ( Delta==0 ) {  printf("2 racines réelles égales:");
                                 printf("x1=x2=%d",-b/(2*a)); }
     
                else  { printf("2 racines complexes conjuguées:") ;// delta<0
                        printf("x1=%f +i=%f ",-b/(2*a),+sqrt(-Delta)/(2*a)) ;
                        printf("x2=%f -i=%f ",-b/(2*a),-sqrt(-Delta)/(2*a))  ; }
     
     
    }

Discussions similaires

  1. résolution équation
    Par damienw dans le forum Mathématiques
    Réponses: 10
    Dernier message: 14/06/2008, 10h30
  2. Résolution équations différentielles
    Par alex63000 dans le forum Octave
    Réponses: 1
    Dernier message: 07/10/2007, 23h20
  3. résolution équation à n inconnus
    Par booba12 dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2007, 13h07
  4. Réponses: 8
    Dernier message: 08/04/2007, 01h38
  5. Réponses: 1
    Dernier message: 08/12/2006, 17h13

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