/* Programa    riemann.c  
	Assunto: Somas de Riemann
	Condicionantes: para compilar
	  gcc -Wall -oprog -lm riemann.c
	a biblioteca ambiente.h deve estar no mesmo diretorio  
	Programa sem erros

	Descrição: cálculo de integrais aprox por somas de Riemann 

	palavras chave: Riemann, integral, varredura
   por Tarcisio Praciano Pereira -  C para matemáticos
   Sobral, Dezembro de 2005	- UeVA    	      		
*/

	
#include <stdio.h>
#include <math.h>
#include "ambiente.h"

float Riemann(float inicio, float fim, float delta);
float f(float x);
void	noticia();

int main(void)
{
	float	inicio=0, fim=1, delta; // extremos do intervalo de integração
	int	n = 100;
	int	resposta=0;
	limpa_janela(); quatrolinhas();
	printf("Voce deseja ler uma informacao sobre o programa ? \n");
	printf("A resposta padrao para esta pergunta eh \"n\" - nao - de <enter>.\n");
	resposta = sim_nao();
	if (resposta) noticia();
	printf("De <enter> a todas as perguntas para calcular a integral \n");
	printf("no intervalo [0,1]  -  ou forneca os valores que desejar. \n");
	apeteco2();
	printf("Intervalo [a,b] onde a integral vai ser calculada\n");
	inicio 	= 	entrada_float(" a = ", inicio);
	fim 	= 	entrada_float(" b = ", fim);
	printf(" Precisao no calculo - numero de nos na particao \n");
	n 	= 	entrada_inteira(" n  = ", n); 
	delta = (fim-inicio)/n;  // calcula delta
	printf("O valor aproximado da integral eh %f \n",Riemann(inicio,fim,delta));
	apetecof();	limpa_janela();
	return(0);		
}

float Riemann(float inicio, float fim, float delta)
{
        float soma=0,x=inicio;
        while (x <= fim)
                {
                        soma = soma + f(x);
                        x = x + delta;
                }
        return (soma*delta);
}
	
// esta eh a funcao cuja integral estah sendo calculada
float f(float x)
{
   return pow(x,2); // x ao quadrado  <<< troque aqui a equacao            
}

void	noticia()
{
  printf("Este programa calcula aproximadamente a integral de uma funcao \n");
  printf("definida no programa. Edite a equacao para calcular outras inte- \n");
  printf("grais.  O programa tem valores padrao que voce pode usar simples-\n");
  printf("mente dando <enter> em todas as perguntas. Eh um bom meio de ver\n");
  printf("como o programa funciona, um primeiro exemplo. \n");
  apeteco2();
  printf("O programa calcula integrais usando somas de Riemann uniformes, quer \n");
  printf("dizer que o passo na particao eh sempre o mesmo, ou que os subinter-\n");
  printf("valos tem todos a mesma medida:  (b-a)/n  \n");
  printf("Para obter mais precisao, de um valor maior para n  - mas observe \n");
  printf("que a demora serah maior no calculo com grandes valores de n. \n");
  printf("Experimentando voce vai ver que a partir de um certo ponto voce terah\n");
  printf("atingido a precisao maxima do programa.  \n");
  apeteco2();
  printf("Este programa foi feito com o gcc em ambiente Debian/Gnu/Linux \n");
  printf("sendo distribuido sob GPL. \n");
  printf("Autor: prof. Tarcisio Praciano-Pereira - Matematica - UeVA  \n");
  printf("Sobral - Ceara - tarcisio@member.ams.org \n");
  apeteco2(); limpa_janela();
}
