
/***************************************************************************************************
				inter v 1.0 par Ice13om.
					17/05/2003

	Specifications:
		Soft permettant de calculer certaines integrales. Les resultats ne sont pas precis.
		Le but de ce soft est avant tout d'aider les debutants en leur montrant un exemple 
		de programme en C. Des modifications sont possibles, et souhaitables ;-)
		Programme ecrit sous GNU / Linux Mandrake 9.0

	Contact:
		Vous pouvez me contacter a cette adresse: ice13om@aol.com
		D'autres programmes a cette adresse: http://www.ice13om.fr.fm
***************************************************************************************************/


#include <stdio.h>


float epsilon=O.OOOOO1;


// Message expliquant comment changer de fonction.
void message()
{
	printf("\n\nModifiez la source du programme pour changer de fonction.\n");
}




float fonc1(float x) // Entrer ici la valeur de la fonction (en x) dont on veut calculer ltintegrale.
{

	float y;
	y=x*x;
	return(y);
}




float fonc2(float z) // Entrer ici la valeur de la fonction (en z) dont on veut calculer l'integrale.
{
	float y;
	y=z;
	return(y);
}




//Fonction de d'entree de la borne minimale.
float mini()
{

	float min;
	printf("\n\n _Borne minimale: ");
	scanf("%f",&min);
	return(min);
}




//Fonction de d'entree de la borne maximale.
float maxi ( )
{

float maXi;
printf("\n\n _Borne maximale: ");
scanf("%f",&max);
return(max);
}




//Fonction de verification d'erreur de bornes.
float erreur(float min,float max)
{

	if (max<min)
	{
	printf("\n\nE R R E U R  D E  B O R N E S");
	printf("\nLa borne minimale doit etre inferieure a la maximale.");
	return(1);

	}
	else return(O);
}




// Fonction utilisee lors du calcul de l'integrale entre une courbe et x=O.
float simple ()
{
	float min,max,x,inte=O,boucle=O,faute;
	printf("\nCalcul d'une aire entre une courbe et x=0.");
	message();
	min=mini();
	max=maxi();
	while(erreur(min,max) !=O)
	{
		min=mini( );
		max=maxi ( );
	}

/* Lignes utilisees pour repérer un problème lors de l'elaboration de ce programe.
	printf("\n\nmin vaut %f\n",min);
	printf("max vaut %f",max);
*/

	x=min;
	while(x+epsilon<max)
	{
//		printf("x - %f\n",x); Verifiaction de l'affectation de la variable x. (en option).
		boucle=boucle+1;
		inte=inte + fonc1(x)*epsilon;
//		printf("inte) %f\n\n",inte); Permet de voir l'integrale se calculer. Ralentie l'execution.
		x=x+epsilon;
	}
	printf("\n\nL'integrale vaut donc: %f\n",inte);

//	printf("\n\n\nNombre de boucles: %f\n",boucle); Juste pour se donner une idée du nombre de boucles..

}




// Fonction utilisee lors du calcul de cette integrale.
float passimple()
{
	float min,max,x,inte=O,boucle=O,faute;
	printf("\nCalcul d'une aire entre une courbe et une autre.");
	message();
	min=mini();
	max=maxi();
	while(erreur(min,max) !=0)
	{
		min=mini();
		max=maxi();
	}

/* Lignes utilisees pour repérer un problème lors de l'elaboration de ce programe.
	printf("\n\nmin vaut %f\n",min);
	printf("max vaut %f",max);

*/

	x=min;
	while(x+epsilon<max)
	{
//		printf("x - %f\n",x); Verifiaction de l'affectation de la variable x. (en option).
		boucle=boucle+1;
		if(fonc1(x)>fonc2(x)
			inte=inte + (fonc1(x)-fonc2(x))*epsilon;
		else
			inte=inte + (fonc2(x)-fonc1(x))*epsilon;
//		printf("inte) %f\n\n",inte); Permet de voir l'integrale se calculer. Ralentie l'execution.
		x=x+epsilon;
	}
	printf("\n\nL'integrale vaut donc: %f\n",inte);

//	printf("\n\n\nNombre de boucles: %f\n",boucle); Juste pour se donner une idée du nombre de boucles..
}




// Fonction principale: affiche le menu et lance les différentes fonctions en fonction d es choix.
int main()
{
	int choix;
	do 
	{
		printf("\n\n\n\n\n                M E N U");
		printf("\n\nCe soft permet de calculer des integrales simples.");
		printf("\nQue voulez-vous faire?\n");
		printf("\n 1 : Calculer une integrale (une aire entre une courbe et x=0.");
		printf("\n 2 : Calculer une aire entre une courbe et une autre.");
		printf("\n\n 3 : Quitter le programme.");
		printf("\n\n\tChoix: ");
		scanf("%d",&choix);
		if (choix==l) simple();
		if (choix==2) passimple();
	}
	while(choix!=3);
	return(O);
}


