Problème de programmation sur visual C++

Fermé
steph0312 - 21 oct. 2007 à 18:49
SmallFitz Messages postés 351 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 21 juin 2013 - 24 oct. 2007 à 18:21
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 erreurs:
C:\Program Files\Microsoft Visual Studio\MyProjects\stephanieentrainement\entrainement\steph.c(72) : error C2059: syntax error : 'return'
C:\Program Files\Microsoft Visual Studio\MyProjects\stephanieentrainement\entrainement\steph.c(74) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
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 mmes erreurs mais je ne trouve pas
.Merci d'avance de vos aides.

steph.obj - 2 error(s), 0 warning(s)
# 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;
delta = (b*b) - (4*a*c);

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);

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);
}
if (delta > 0)
{
do
{
while (borne_sup - borne_inf>=PRECISION);
{
r2=(borne_sup + borne_inf)/2;
r3 = r2*r2;
if (r3<delta)
{
borne_sup = (float)r2;
break;
}
else
{ borne_inf = (float)r2;
break;
}

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);
break;
}
}

return borne_inf;
}
A voir également:

2 réponses

SmallFitz Messages postés 351 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 21 juin 2013 185
22 oct. 2007 à 01:14
Bonjour,
Tu dois le rendre demain ? Mince !
T'es toujours là ? Je parie que non... Je repasserais si tu repostes pour demander de l'aide.
Pour ton prochain code regarde ma signature.
0
oui sniffff enfin j vais essayé de gratter jusqu'à après demain mais si je ne rends aps ça au plus tard après demain j'aurais -4 points par jour de retard (quel sadique ce prof) loool en tt k merci de ton aide j'ai lu ton message mais qu'est ce que mon identation à avoir avec le problème?en général les mises en retrait des instructions n'ont pas d'incidence sur un programme?non? en tout cas sur C++, je pense et puis j'ai posté le problème de cette façon mais je ne l'ai pas introduit comme ça.
0
SmallFitz Messages postés 351 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 21 juin 2013 185
24 oct. 2007 à 18:21
L'indentation sert juste a rendre son code plus clair.
Regarde ton code, pour toi ça peut être compréhensible, mais pour moi qui ne le connais pas c'est dur.
C'est tout ^^.

Bien alors voyons un peu ton code.
Chez moi c'est pareil, il y a aussi 2 warnings et 1 erreur :
:: === verifieurDeCodeSiteDuZero, Debug ===
main.c:10: warning: return type of 'main' is not `int'
main.c:: In function `main':
main.c:36: warning: int format, double arg (arg 2)
main.c:64: error: syntax error before "return"
:: === Build finished: 1 errors, 2 warnings ===


Warning 1 :
Le type de ton main doit être int main, car normalement il recoit un int pour savoir si tout c'est bien passé ou pas.
Et comme il ne prend aucune variable en paramètre il faut mettre (void).
Ce qui donne
int main (void)

Donc à la fin de ton main il doit y avoir
return 0;
. En général ton IDE de le mets d'office, c'est bizarre que tu ais mis ça...

Warning 2:
Tu veux afficher un float avec ton printf, il faut donc utiliser le formatteur qui lui est attaché : %.2f au lieu de %.2d. Note : je ne connais pas ces .2. Je ne fais que de la logique.

Error 1 :
Tu mets des break; n'importe où n'importe comment. Il s'utilisent en général lorsque tu fais une boucle switch{} mais pas à chaque fois qu'une condition se termine ! Enlèves les donc tous ils n'ont rien à faire là.

Sinon tu peux faire un tour sur le SiteDuZero ici la solution est bien plus simple il me semble.
https://openclassrooms.com/forum/sujet/calculateur-56513#r1319268

Sinon voilà ton code corrigé :
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <float.h>
# include <string.h>
# define PRECISION 0.005

int main (void)
{
    float a,b,c,delta,u,borne_inf,borne_sup,r3,r2;
    double x1,x2;
    borne_inf = 0;
    borne_sup = FLT_MAX;
    delta = (b*b) - (4*a*c);
    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);
    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("%f.2d\n", u);
    }
    if (delta > 0)
    {
        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;
        }
        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;
}


Bonne continuation !
-1