Probleme code c++

Saint -  
 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 :

#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
A voir également:

10 réponses

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
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 un
using 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çon
extern "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 bien
int main(){
  //...
  return 0;
}


Bonne chance
1
MissZaza Messages postés 149 Date d'inscription   Statut Membre Dernière intervention   33
 
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.
0
Saint
 
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?
0
antoine
 
tu replace int main () par void main()
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
antoine
 
tu replace int main () par void main()
0
Saint
 
ç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 ).
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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)
0
MissZaza Messages postés 149 Date d'inscription   Statut Membre Dernière intervention   33
 
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.
0
didideder
 
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
0
john
 
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.
}
0