// Emprestimo.cpp
// DEFINIÇÃO da classe cEmprestimo
// Aula de 19 de Outubro de 2001

#include <math.h>
#include "emprestimo.h"

// Assinatura da função Pmt
double Pmt( double TxJuroPer, int NPer, double Capital );



cEmprestimo::cEmprestimo()
{
	TaxaJuro = 0;
	NrPrestacoes = 0;
	CapitalDivida = 0;
}

cEmprestimo::cEmprestimo( double TxJuro, int NrPrest, double Capital )
{
	TaxaJuro = TxJuro;
	NrPrestacoes = NrPrest;
	CapitalDivida = Capital;
}

// Devolve o montante da prestação mensal a pagar	
double cEmprestimo::Prestacao()
{
	return Pmt( TaxaJuro / 12, NrPrestacoes, CapitalDivida );
}


// Pagamento de mais uma prestação
void cEmprestimo::PagarPrestacao()
{
	
	double Amortizacao;

	// A Amortização é a diferença entre a Prestação e os Juros devidos
 	Amortizacao = Prestacao() - (TaxaJuro/12)*CapitalDivida; 
	// O Capital em divida diminui no valor da amortização incluída na prestação
	CapitalDivida = CapitalDivida - Amortizacao;
	NrPrestacoes --;

}


// Amortização extra no valor do parâmetro Valor
void cEmprestimo::Amortizar( double Valor )
{
	CapitalDivida = CapitalDivida - Valor;
}


// Métodos de Acesso aos dados privados
double cEmprestimo::GetCapitalDivida()
{
	return CapitalDivida;
}


int cEmprestimo::GetNrPrestacoes()
{
	return NrPrestacoes;
}



// Função Financeira Auxiliar
// Calcula o valor da prestação em função da taxa de juro, 
// do nr de períodos e do capital.
double Pmt( double TxJuroPer, int NPer, double Capital )
{
	double Soma;
	int n;

	Soma = 0;
	for( n=1; n <= NPer; n++ )
		Soma = Soma + 1 / pow( 1+TxJuroPer, n );

	return Capital / Soma;

}
