/* Programa    raizes.cc
   Assunto:		Estudo das raizes de uma função definida no programa.
   
	Condicionantes:
	Programa sem erros, ver raizes012.c com mudança de variável
	Para compilar
			g++  -Wall -oprog raizes.cc
	cria o executável  prog  que você pode rodar na linha de comandos
	em Linux.		
         
	Descrição:	Varre um sub-intervalo com malha pequena para encontrar
					raiz com grande precisão. Recebe um intervalo onde
					há troca de sinal de f  ou   f'
					mas quem chamar que se cuida para que, no caso de troca
					de sinal de f' então fabsf(f(a)) < epsilon
					
		
	Palavras-chave:	raiz tangente             
	por Tarcisio Praciano Pereira - 10 lições para aprender C++
	Sobral, Abril de 2009   - UeVA
*/

#include "raizes.h"


int	main() {
	malha  mal={-5,5,0.5};
	resultado data; // data.a , data.metodo
	int	quantidade=0; // caso nao encontre raizes, quantidade=0
	//  *********** entrada de dados 
	noticia(); // descreve o programa
	cout << "Forneça-me o intervalo [a,b] para busca de raizes: " << endl;	
	mal = entrada_dados(mal);  escreve_a_malha(mal); 
	Tela.apeteco2();  // definida em ambiente.h
	quantidade = varredura(mal); // faz a varredura e seleciona um método
	relatorio_final(quantidade); // relatório com a quantidade de raízes
	return(0);
} // fim da main()

/*
	Comentários:  

(10) Os dados do programa podem ser aceitos apenas dando enter quando
	for feita pergunta sobre valores a fornecer. Rode o programa
	apenas dando enter na primeira vez.

(30) Há dois testes - troca de sinal  e módulo máximo 
		experimente apagar o módulo máximo, deixando 
		apenas
		se ( (f(a)*f(a+delta)<=0)  )
		copie o texto acima e coloque em lugar de se() em (30),
		mas não apague porque você vai precisar deste programa
		ainda. Torne um comentário aquilo que você apagaria
		usando o símbolo  //  
	
(40)  teste = 0  evita que seja escrita a mensagem informando
	que nenhuma raiz foi encontrada.
	
(50)	em uma função somente um return()  deve ser
	executado. em f() há vários, todos desligados, menos um que
	é o que está em vigor. Troque pela equação desejada ou
	escolha outra equação.


(60)    No módulo raiz_tangente 
(61)	M é o coeficiente angular da reta secante em (a,f(a)) (b,f(b))
	para memorizar o crescimento global de f no intervalo de troca
	de sinal
(62)    A função pode ter muitos gogos no intervalo [a,b], oscilando
	antes de chegar no zero procurado.  Se m*M for negativo ou zero
	pego o próximo ponto na malha fina e volto a testar até
	que  m*M  seja positvo - m tem o mesmo sinal de M


*/

