	/* Programa  segundo02.cc  
	Assunto:   Tutorial sobre cálculos aritméticos.
	Condicionantes:
		g++ -Wall -oprog segundo02.cc

	Programa com erros -  correção de segundo01.cc
			com mais erros (correção ver (40)) 

	Descrição:  

	palavras chave: tipo int, constantes
   palavras chave: cin, valor default, funcao
   palavras chave: entrada de dados, valor default
   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 



// As funções que vou usar neste programa
int rotulo();
int f(int n1, int n2, int n3); // a combinação linear
int entrada(int valor);


int main()
{
	int t1=-3,t2=3,t3=-10; 	// (10) variáveis do tipo inteiro

	system("clear"); 	// (30)  limpando a tela usando um comando do C
	rotulo();			// (60)  um rótulo particular deste programa
	t1 = entrada(t1); // uma função para fazer entrada de dados
	t2 = entrada(t2); // uma função para fazer entrada de dados
	t3 = entrada(t3); // uma função para fazer entrada de dados 
	f(t1, t2, t3); 	// uma função para calcular uma combinação linear
	return(0);
}



int rotulo()
{
   cout  << "\t =============== Aritmética em C++ ================" << endl
         << "\t Este programa pede que você forneça alguns números inteiros" << endl
         << "para fazer fazer alguns cálculos aritméticos. " << endl
         << "Faz uma combinação linear de valores dados." << endl
			<< "\t O programa tem valores default que vão aparecer" << endl
			<< "na entrada de dados e que você poderá aceitar, se desejar"<< endl
			<< endl;
	return(0);
}



// Pede um número indica o valor existente - preserva valor default
int entrada(int valor)
{
	char  deposito[80];
   cout  << "Me dê um número inteiro t = " << valor << " ";    
   fgets(deposito, sizeof(deposito), stdin); // (100) funções de C
   sscanf(deposito, "%f", &valor);  			// (100) funções de C
   return(valor); //(110) aqui você vê uma utilidade de return()
}

// 
int f(int n1, int n2, int n3)
{
	const int a1=4,a2=-4,a3=5;    // constantes 
	cout	<< "O valor da combinção linear é  " <<  endl 
			<<  a1*n1+ a2*n2 + a3*n3
			<<  endl;
	a1 = 10; a2=20;a3=30;//  (40) erro ?  estes valores não serão usados....
	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).
		As variáveis podem ser inicializadas quando definidas,
		aqui foram incialiazadas com os valores -3,3,10
		Estes são valores default que o usuário pode aceitar.
		Se uma função definida (protótipo) com valores inicializados
		estes valores se tornam default.

(15)	Uma forma equivalente de criar valores de default está sendo
	usada na entrada de dados entrada() - ela recebe, quando chamada
	dentro do programa, os valores com t1,t2,t3 foram incializados,
	isto é equivalente a ter definido entrada() com variáveis
	inicializadas.


(30) 	Usando a função  system() de C  e o comando "clear" da sh

(40)  Erro:  estas variáveis foram declaradas como constantes, estão
		protegidas contra troca de valores.
		Solucção:  apague (torne em comentário) esta linha 

(100) usando fgets(), sscanf()  de C  para preservar o valor default

*/

