probleme de dichotomie sur visual C++

probleme de dichotomie sur visual C++ - C - Programmation

Marsh Posté le 22-10-2007 à 20:00:54    

Bonjour,  
 
j'ai un problème je dois écrire la résolution d'un système d'équation du second degré et je dois utilisé la dichotomie, je ne suis pas très expérimentée en langage C donc j'aurais vraiment besoin d'aide, j'ai les variables x1,x2 qui doivent etre relles ainsi que delta mais je dois aussi définir une variable PRECISION valant 0,005 et tant que (borne_sup - borne_inf>=PRECISION), r2= (borne_sup + borne_inf)/2 et en comparant r3(donc sensé être la carré de r2)à delta, je dois modifier la borne adéquate? Moi, j'ai écrit ce programme déjà, je ne sais même pas si c'est juste et en plus, il me met comme erreur:  
C:\Program Files\Microsoft Visual Studio\MyProjects\stephanieentrainement\entrainement\steph.c(69) : error C2059: syntax error : 'return'
pouvez vous m'aidez svp, je dois rendre ce devoir demain, si quelqu'un pouvait m'aider à voir si je ne fais pas fausse route et ou sont mes erreurs voilà bien deux jours que j'essaie de trouver la réponse au problème et ou sont mes erreurs mais je ne trouve pas  
.Merci d'avance de vos aides.  
 
# include <stdio.h>  
# include <stdlib.h>  
# include <math.h>  
# include <float.h>  
# include <string.h>  
# define PRECISION 0.005  
 
float main ()  
 
 
{  
   float a,b,c,delta,u,borne_inf,borne_sup,r3,r2;  
   double x1,x2;  
   borne_inf = 0;  
   borne_sup = FLT_MAX;  
 
 
   printf("resolution d'un systeme d'equation du second degre\n" );  
   printf("ax^2+ bx + c = 0\n" );  
 
    printf("saisie du coefficient a\n" );  
    scanf("%f", &a);  
    printf("saisie du coefficient b\n" );  
    scanf("%f", & b);  
    printf("saisie du coefficient c\n" );  
    scanf("%f", &c);  
    printf("%.2f est le discriminant de cette equation\n", delta);  
    delta = (b*b) - (4*a*c);
 
      if (delta<0)  
   {  
       printf("pas de solution reelle possible\n" );  
   }  
 
      if (delta==0)  
   {  
       printf("une seule solution reelle possible, u\n" );  
       u=(-b)/(2*a);  
       printf("%.2d\n", u);  
   }  
 
      do  
  {  
          while (borne_sup - borne_inf>=PRECISION);  
    {  
            r2=(borne_sup + borne_inf)/2;  
            r3 = r2*r2;  
 
              if (r3<delta)  
     {  
               borne_sup = (float)r2;  
 
     }  
              else  
     {  
      borne_inf = (float)r2;  
     }  
           }
   
          if (delta > 0)  
    {  
           printf("deux solutions reelles possibles,x1 et x2\n" );  
              x1=(float)((-b - (r2))/(2*a));  
              x2=(float)((-b + (r2))/(2*a));  
              printf("%.2f\n", x1);  
              printf("%.2f\n", x2);  
    }
  }
 return 0;  
}


---------------
ce qui fait monter le serpent à l'arbre, c'est l'orgueil
Reply

Marsh Posté le 22-10-2007 à 20:00:54   

Reply

Marsh Posté le 22-10-2007 à 20:38:11    

Beaucoup d'erreurs.
 
Je me permets tout d'abord de poster une version indentée de ton code, dans les balises du forum qui-vont-bien [:dawa]
 

Code :
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <math.h>
  4. # include <float.h>
  5. # include <string.h>
  6. # define PRECISION 0.005
  7.  
  8. float main ()
  9. {
  10.    float a,b,c,delta,u,borne_inf,borne_sup,r3,r2;
  11.    double x1,x2;
  12.    borne_inf = 0;
  13.    borne_sup = FLT_MAX;
  14.  
  15.  
  16.    printf("resolution d'un systeme d'equation du second degre\n" );
  17.    printf("ax^2+ bx + c = 0\n" );
  18.  
  19.    printf("saisie du coefficient a\n" );
  20.    scanf("%f", &a);
  21.    printf("saisie du coefficient b\n" );
  22.    scanf("%f", & b);
  23.    printf("saisie du coefficient c\n" );
  24.    scanf("%f", &c);
  25.    printf("%.2f est le discriminant de cette equation\n", delta);
  26.    delta = (b*b) - (4*a*c);
  27.  
  28.    if (delta<0)
  29.    {
  30.        printf("pas de solution reelle possible\n" );
  31.    }
  32.  
  33.    if (delta==0)
  34.    {
  35.        printf("une seule solution reelle possible, u\n" );
  36.        u=(-b)/(2*a);
  37.        printf("%.2d\n", u);
  38.    }
  39.  
  40.    do
  41.    {
  42.        while (borne_sup - borne_inf>=PRECISION)
  43.            ;
  44.        {
  45.            r2=(borne_sup + borne_inf)/2;
  46.            r3 = r2*r2;
  47.  
  48.            if (r3<delta)
  49.            {
  50.                borne_sup = (float)r2;
  51.  
  52.            }
  53.            else
  54.            {
  55.                borne_inf = (float)r2;
  56.            }
  57.        }
  58.  
  59.        if (delta > 0)
  60.        {
  61.            printf("deux solutions reelles possibles,x1 et x2\n" );
  62.            x1=(float)((-b - (r2))/(2*a));
  63.            x2=(float)((-b + (r2))/(2*a));
  64.            printf("%.2f\n", x1);
  65.            printf("%.2f\n", x2);
  66.        }
  67.    }
  68.    return 0;
  69. }


 
 
Ensuite, si ton compilateur est convenablement configuré, tu devrais obtenir au moins ceci :
 

Compiling: C:\Program Files\CodeBlocks\seb\test.c
C:\Program Files\CodeBlocks\seb\test.c:9: error: `main' must return `int'
C:\Program Files\CodeBlocks\seb\test.c:9: error: return type for `main' changed to `int'
C:\Program Files\CodeBlocks\seb\test.c: In function `int main(...)':
C:\Program Files\CodeBlocks\seb\test.c:37: warning: int format, double arg (arg 2)
C:\Program Files\CodeBlocks\seb\test.c:68: error: expected `while' before numeric constant
C:\Program Files\CodeBlocks\seb\test.c:68: error: expected `(' before numeric constant
C:\Program Files\CodeBlocks\seb\test.c:68: error: expected `)' before ';' token
Process terminated with status 1 (0 minutes, 0 seconds)
5 errors, 1 warnings


 
Essaie déjà de corriger ces erreurs-ci, il s'agit de syntaxe, et les messages sont assez explicites.  
Ensuite tu pourras voir ce que donne ton programme [:klem3i1]

Reply

Marsh Posté le 22-10-2007 à 21:05:55    

merci excuse moi pour le message précedent mais comment faire pour configurer correctement mon compilateur?

Reply

Marsh Posté le 22-10-2007 à 21:18:37    

http://mapage.noos.fr/emdel/codage.htm#cfg_compilo


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 23-10-2007 à 23:43:21    

Bizarre que Joel F n'ait pas encore dit que ce n'est pas du c++


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 24-10-2007 à 01:37:42    


? Explik toi je ne comprends pas

Reply

Marsh Posté le 24-10-2007 à 06:48:16    

C'est pas du C++ mais du C (le topic a ensuite été déplacé dans la bonne catégorie).

Reply

Marsh Posté le 24-10-2007 à 12:09:32    

J'avoue que je n'ai pas tout compris dans ton histoire de borne sup et inf (j'ai pas cherché bcp c'est vrai).
Par contre ceci est toujours valable: pas de ; après un while
 
while (borne_sup - borne_inf>=PRECISION)     ;  
Cela veut dire:  
tant que borne_sup - borne_inf>=PRECISION, ne rien faire.
 
Donc si la condition est vraie tu obtiens une jolie boucle infinie.


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed