/* Programa    primeiro05.cc  
	Assunto:   Tutorial sobre cálculos aritméticos.
	Condicionantes:
		g++ -Wall -oprog primeiro05.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()
   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 main()
{
	int t=-1; // (10) uma variável do tipo inteiro
	float a1,a2,a3, b1,b2,b3; // para guardar os pontos calculados
	system("clear"); // limpando a tela usando um comando do C
	cout  << "\t Observe que neste programa começamos com a tela limpa."<< endl;
	// (15) o uso de  \n  facilita o erro no formato da impressão
   cout  << "\t Este programa pede que você escolha valores para o parâmetro\n  "
			<< "t  e calcula as coordenadas dos pontos sobre uma reta cujas"<< endl
         << "equações paramétricas são "<< endl
         << "\t \t  (3t + 4, 3 - 2t)  "<< endl; //(20)  	
   cout	<< "Me dê um valor para t = "; //  (21)
	cin   >>  t; a1 = 3*t + 4; b1 = 3 - 2*t;// calculando a1, b1
   cout  << "t = " << t << "  --> (a1(t), b1(t)) = "<< " (3t + 4, 3 - 2t) = " 
	 << "(" << a1 << "," << b1 << ")" << endl;// (20)

   cout  << "Me dê outro  valor para t = ";  //  (21)
   	cin   >>  t;  a2 = 3*t + 4; b2 = 3 - 2*t;// calculando a2, b2
   cout  << "t = " << t << "  --> (a2(t), b2(t)) = " 
	<< " (3t + 4, 3 - 2t) = " << "(" << a2 << "," << b2 << ")" << endl;// (20)

   cout  << "Me dê ainda outro  valor para t = ";  //  (21)
   cin   >>  t;  a3 = 3*t + 4; b3 = 3 - 2*t;// calculando a3, b3
   cout  << "t = " << t << "  --> (a3(t), b3(t)) = "<< " (3t + 4, 3 - 2t) = " 
                  << "(" << a3 << "," <<  b3 << ")" << endl;// (20)  	
   cout  << "\t Verificando se os pontos se encontram sobre uma reta. " 
			<< endl
         << "Vou calcular as razões: (b2-b1)/(a2-a1)  e  " << endl
         << "  (b3(t) - b2(t))/(a3(t)-a2(2))." << endl
         << "\t Se os pontos estiverem sobre uma reta, estas duas razões " 
			<< endl
         << "serão iguais. Verificando: "  << endl;
	cin.get(); // (50)
   cin.get(); // (50) (51)
   cout  << "\t Calculando \a \n "
			<< "  (b2 - b1)/(a2-a1) =  " << (b2-b1)/(a2-a1) << endl;
   cout  << "  (b3 - b2)/(a3-a2) =  " << (b3 - b2)/(a3-a2) << endl
			<< "Aperte enter para terminar " << endl; 
   cin.get(); // (50)
   //cin.get(); // (50) (51)
	system("clear"); // limpa a tela com um comando do sh
	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)  O método do C de trocar linhas permite este erro, depois da
		troca de linha ainda foi impresso o espaço que se encontra
		depois de \n .

(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)

*/

