Probleme code c++
Saint
-
john -
john -
voila je débute en c++ et je vais de message d'erreur en message d'erreur.
je dois écrire un programme qui calcule l'intégrale d'une fonction par la méthode des trapèzes.
L'utilisateur entre les deux bornes de l'intégrale et le nombre de trapèzes.
J'ai d'abord fait mon code sur une feuille de papier et il me semblait logique :
La compilation ce fait sans prob mais quand j'exécute, il me demande les bornes et le nombre de trapèzes ( comme prévu ) et ensuite la fenetre se ferme.
Aidez moi svp.
Merci d'avance
je dois écrire un programme qui calcule l'intégrale d'une fonction par la méthode des trapèzes.
L'utilisateur entre les deux bornes de l'intégrale et le nombre de trapèzes.
J'ai d'abord fait mon code sur une feuille de papier et il me semblait logique :
#include <iostream.h>
#include <math.h>
#include <stdio.h>
int main()
{
float a,b,d,n;
cout<<"Entrez la premiere borne de l'integrale : "<<endl;
cin>>a;
cout<<"Entrez la seconde borne de l'integrale : "<<endl;
cin>>b;
cout<<"Entrez le nombre de trapezes : "<<endl;
cin>>n;
d=(b-a)/n;
float x1,C1,C2,N,A,S,i,j;
//définition de la fonction x²
float carre(x1)
{pow(x1,2)}
//définition de la fonction aire du trapèze
float aire(C1,C2)
{(C1+C2)/2*d}
i=0;
j=1;
//boucle calcul de la somme des aires des trap
while(a<b)
{
C1=carre(a+i*d);
C2=carre(a+j*d);
A=aire(C1,C2);
S=S+A;
i=i+1;
j=j+1;
}
cout<<"L'integrale est "<<S<<;
}
La compilation ce fait sans prob mais quand j'exécute, il me demande les bornes et le nombre de trapèzes ( comme prévu ) et ensuite la fenetre se ferme.
Aidez moi svp.
Merci d'avance
10 réponses
-
Je me permets de préciser qu'inclure les headers C++ avec ".h" au bout est une syntaxe obsolète, en toute rigueur tu devrais écrire :
#include <iostream>
Tous les éléments de la STL sont désormais dans le namespace std et du coup, il ne faut plus écrire cout,cerr,endl... mais std::cout,std:cerr,std::endl... Pour éviter d'avoir à mettre des std:: tu peux rajouter après l'inclusion des headers unusing namespace std;
Mais tu ne dois jamais mettre cette instruction dans un header (et tant qu'à faire éviter le plus possible de les utiliser pour éviter les ambiguités.
Par ailleurs tu inclues des headers C dans un programme C++, il faudrait donc les inclure de cette façonextern "C"{ #include <math.h> #include <stdio.h> }
Mais de toutes façon ces deux headers ne sont pas utilisés donc tu peux directement les supprimer.
A part ça main est sensé retourner un int (le code d'erreur), et 0 si tout va bienint main(){ //... return 0; }
Bonne chance -
Salut,
Pour éviter que la fenêtre se ferme, ajoute à la fin de ton programme un cin, comme ça il attendra la saisie d'un caractere avant de quitter le prog. -
j'ai essayé. ça ne change rien.
Dev C++ m'indique un message d'erreur du type :
aire can't be used as a fonction,... ( idem pour toutes les fonctions ).
Ou est le prob? -
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
ça ne change rien... toujours le meme message d'erreur et le programme se ferme a la fin de l'exécution ( sans rien afficher ).
-
Salut !
Déjà, laisse "int main()" c'est le standard actuel, il est déconseiller d'utilisé "void main()".
Conseil, utilise le debuggeur de DevCpp en mode pas à pas pour savoir ou il plante exectement.
Ensuite, les membres de tes fonctions sont sans type, et ne retournent rien.float aire(float C1,float C2) {return (C1+C2)/2*d;}J'ai la flemme de regarder tes imbrications, mais j'ai l'impression que tes fonctions sont définient dans le corps du "main" Je trouve ça étonnant, en général on les défini en dehors. Je pense même que ce n'est pas valable (à vérifier) -
Tu arrives à compiler ce code avec Dev-C++, chez moi ca marche pas.
Définis tes fonctions carre et aire en dehors du main, ce sera déjà plus clair :float carre(float x1){return pow(x1,2);} float aire(float C1,float C2,float d){return ((C1+C2)/2*d);}
Dans ta fonction aire, tu utilises d, mais tu ne le passes pas en paramètre. -
Normalement, le code suivant doit fonctionner.
#include <iostream.h> #include <math.h> #include <stdio.h> //définition de la fonction x² float carre(x1) {return pow(x1,2);} //définition de la fonction aire du trapèze float aire(C1,C2) {return (C1+C2)/2*d;} void main() { float a,b,d,n,aire,S,i; cout<<"Entrez la premiere borne de l'integrale : "<<endl; cin>>a; cout<<"Entrez la seconde borne de l'integrale : "<<endl; cin>>b; cout<<"Entrez le nombre de trapezes : "<<endl; cin>>n; d=(b-a)/n; i=0; //boucle calcul de la somme des aires des trap while(a<b) { S+=aire(carre(a+i*d),carre(a+(i+1)*d)); i++; } cout<<"L'integrale est "<<S<<; //Temporisation à la fin cin>>a }
Bon courage.
CC -
Salut, pour le code regarde je l'est modifier.
#include <iostream.h>
#include <math.h>
#include <stdio.h>
int main()
{
float a,b,d,n;
cout<<"Entrez la premiere borne de l'integrale : "<<endl;
cin>>a;
cout<<"Entrez la seconde borne de l'integrale : "<<endl;
cin>>b;
cout<<"Entrez le nombre de trapezes : "<<endl;
cin>>n;
d=(b-a)/n;
float x1,C1,C2,N,A,S,i,j;
//définition de la fonction x²
float carre(x1)
{pow(x1,2)}
//définition de la fonction aire du trapèze
float aire(C1,C2)
{(C1+C2)/2*d}
i=0;
j=1;
//boucle calcul de la somme des aires des trap
while(a<b)
{
C1=carre(a+i*d);
C2=carre(a+j*d);
A=aire(C1,C2);
S=S+A;
i=i+1;
j=j+1;
}
cout<<"L'integrale est "<<S<<;
system("@pause"); //VOILA LE PROBLEME, MAIS GRACE A CE CODE LE PROBLEME NE CE POSE PLUS
//POURQUOI ? Parce que en ms-dos @pause arrêtes le processus pour mettre ton message.
}