/* Programa    primeiro075.cc  
	Assunto:   Tutorial sobre cálculos aritméticos.
	Condicionantes: compilar com
	g++ -Wall -oprog -Wall primeiro075.cc
	Programa sem erros, mas com um problema: uso duplo de cin.get()
			ver (50) (51)

	Descrição:  Pede um valor para  t  e escreve o valor de (3t + 4, 3 - 2t)

	palavras chave: entrada de dados, cin, atribuição variável do tipo int
	palavras chave: atribuição variável do tipo int
	palavras chave: limpa a tela, leitura de números
   palavras chave: recebe enter para continuar cin.get(); cin.get()
   palavras chave: beep, mudança de linha, caracteres especiais
   por Tarcisio Praciano Pereira - 10 licoes para aprender C++
   Sobral, Abril de 2005	- UeVA    	      		
*/

#include <iostream>
using namespace std; // a evitar - polui o espaço de nomes 

int mensagem();
int entrada();
float f1(float x);
float f2(float x);

int laudo_final(float x1, float x2, float x3,
							float y1, float y2, float y3 );



int main()
{
	int t=-1; // (10) uma variável do tipo inteiro
	float x1,x2,x3, y1,y2,y3; // coordenadas dos pontos da curva
	// (130) float m1, m2; // coeficiente angular, deve ser do tipo float
	system("clear"); // (15)  começa limpando a tela
	mensagem();
	t = entrada();// (100)  
   
	x1 = f1(t);  y1 = f2(t);
   cout  << "t = " << t << " --> s(t) = (3t + 4, 3 - 2t) = " 
						<< "(" << x1 << "," << y1 << ")" << endl;// (20)
	t = entrada();// (100)
   x2 = f1(t); y2 = f2(t);	
   cout  << "t = " << t << " --> s(t) = (3t + 4, 3 - 2t) = " 
                  << "(" << x2 << "," << y2 << ")" << endl;// (20)
	t = entrada();// (100)
   x3 = f1(t); y3 = f2(t);
   cout  << "t = " << t << "--> s(t) = (3t + 4, 3 - 2t) = " 
                  << "(" << x3 << "," << y3 << ")" << endl;// (20)  	

	cout << "\a \a \a";
	laudo_final(x1, x2, x3, y1, y2, y3);
 
   cout  << "\t Aperte enter para terminar o programa.\n" << endl 
			<< "Eu vou deixar a tela limpa quando sair. "<< endl;
	cin.get(); // (50)
   cin.get(); // (50) (51)
   cout  << "\a \n"; // beep 
	system("clear"); // (15) sai deixando limpa a tela com um comando do sh
	return(0);
}


int mensagem()
{
	cout	<< "\n \a \n \a \n \a \n \a \n \a \n" ; // beeps 
   cout  << "\t Este programa pede que você escolha um valor para"<< endl
         << "e calcular as coordenadas dos pontos sobre uma reta cujas"<< endl
         << "equações paramétricas são "<< endl
         << "\t \t  (3t + 4, 3 - 2t)  "<< endl; //(20)  	
	return(0);
}


int entrada()
{
	int valor;
   cout	<< "Me dê um valor para t = "; //  (21) beep 
	cin   >>  valor; // 
	return(valor); //(110) aqui você vê uma utilidade de return()
}

float f1(float x)
{
	return 3*x + 4;

}

float f2(float x)
{
 	return 3 - 2*x; 
}

int laudo_final(float x1, float x2, float x3, 
					float y1, float y2, float y3 )
{
	float m1, m2;
	m1 = (y2 - y1)/(x2 - x1); // (120) vai dar errado
	m2 = (y3 - y2)/(x3 - x2); // (120) vai dar errado
  	cout  << "Pontos calculados               coeficiente angular " <<  endl;
  	cout  << "----------------------------------------------------"<<  endl;
   cout  << "(" << x1 << "," << y1 << ")" << "\a" << endl;
   cout  << "(" << x2 << "," << y2 << ")  \t \t m1 = " << m1 << "\a" <<  endl;
   cout  << "(" << x3 << "," << y3 << ")  \t \t m2 = " << m2 << "\a" <<  endl;
   cout  << "----------------------------------------------------"<<  endl;
	return(0);
}

/* Comentários:  A numeração dos comentários não
		  é continuada, pode dar saltos...para
		  facilitar a reutilização de programas.

(10) 	Toda vez precisarmos de uma variável temos que declará-la
		no início do programa (C++ permite declarar em outros 
		locais, mas você deve evitar de aprender esta desorganização.,,
		Aqui defini uma variável do tipo inteiro:  int 
		Outra formas de fazê-lo
		int t = 0;    definindo e escolhendo um valor inicial
		int t(0);	definindo e escolhendo um valor inicial

(15)  Estou usando uma função de C  system()  que executa programas
		externos a linguagem. Veja fatorial02.c que é um falso fatorial
		em C++ porque executa um programa da linguagem calc 

(20)  Quando C++ eoncontrar ;  ele considera a sentença terminada.
		Esta sentença contem vários acessos ao objeto "cout",
		exatamente 8 acessos.

(21)  Terminei a sentença, mas não quero mudança de linha neste ponto.

(30)  Fiz um acesso ao objeto cin que atribue valores a variáveis.
		Para fazer o mesmo com variáveis do tipo string é preciso
		usar um outro objeto. Faça
				grep chave 
		para encontrar um programa que faça este tipo de atribução
		como exemplo.

(50)  Acesso ao método   get() de cin para fazer uma leitura de
		coisa nenhuma - somente para parar o programa.
(51)  Aqui é preciso fazer duas leituras porque usei cin para
		receber dados e ficaram dados no buffer de leitura
		Na primeira chamada o buffer é limpo, na segunda chamada
		faz a leitura do teclado (recebe o enter)

(100) entrada() emite uma mensagem dizendo o que espera, 
		colhe o valor a ser colocado na "variável local valor"
		Leia a respeito de variável global e local no
		capítulo 4. Faça uma leitura rápida, apenas tome conhecimento
		do assunto

(110) A função return()  devolve o valor que a função entrada()
		recebe pelo teclado e a atribuição
					t = entrada()
		cola este valor na variável  t  definida em main()

(120) O coeficiente angular calculado é zero. Qual é a razão do
		erro ?

		Razão,  C++ e várias outras linguagens, C, Python para citar
		algumas, usam a divisão inteira.
		Quer dizer:  a/b  é o resto na divisão de a por b  quando
		a,b  forem inteiros.

		Solução, defina  x1,y1,x2,y2 como float - solução
		em primeiro073.cc			

(130) Estas variáveis não são mais necessárias em main(), elas 
		serão declaradas e usadas em laudo_fina()


*/

