Introdução
Neste laboratório, aprenderá a calcular o Valor Presente Líquido (VPL) em C. O laboratório guiará você pelo processo de leitura de uma série de fluxos de caixa e da taxa de desconto, descontando cada fluxo de caixa e, em seguida, somando-os para calcular o VPL. Você criará um programa em C que permitirá aos usuários inserir os dados necessários e, em seguida, exibirá o VPL calculado. Este laboratório cobre os conceitos fundamentais de matemática financeira e cálculos de juros usando programação em C.
Ler Série de Fluxos de Caixa e Taxa
Neste passo, aprenderá a ler uma série de fluxos de caixa e a taxa de juros para calcular o Valor Presente Líquido (VPL) em C. Criaremos um programa que permite aos usuários inserir múltiplos fluxos de caixa e a taxa de desconto.
Primeiro, vamos criar um novo arquivo C para nosso cálculo de VPL:
cd ~/project
nano npv_calculator.c
Agora, adicione o seguinte código ao arquivo:
#include <stdio.h>
#define MAX_FLUXOS_CAIXA 10
int main() {
double fluxos_caixa[MAX_FLUXOS_CAIXA];
double taxa_desconto;
int num_fluxos_caixa;
// Entrada do número de fluxos de caixa
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_fluxos_caixa);
// Validação do número de fluxos de caixa
if (num_fluxos_caixa <= 0 || num_fluxos_caixa > MAX_FLUXOS_CAIXA) {
printf("Número de fluxos de caixa inválido.\n");
return 1;
}
// Entrada dos fluxos de caixa
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Digite o fluxo de caixa %d: ", i);
scanf("%lf", &fluxos_caixa[i]);
}
// Entrada da taxa de desconto
printf("Digite a taxa de desconto (como um decimal): ");
scanf("%lf", &taxa_desconto);
// Imprime o resumo da entrada para verificação
printf("\nResumo da Entrada:\n");
printf("Número de Fluxos de Caixa: %d\n", num_fluxos_caixa);
printf("Taxa de Desconto: %.2f%%\n", taxa_desconto * 100);
printf("\nFluxos de Caixa:\n");
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Fluxo de Caixa %d: $%.2f\n", i, fluxos_caixa[i]);
}
return 0;
}
Compile o programa:
gcc -o npv_calculator npv_calculator.c
Execute o programa para testar a entrada:
./npv_calculator
Exemplo de saída:
Digite o número de fluxos de caixa (máximo 10): 3
Digite o fluxo de caixa 0: -1000
Digite o fluxo de caixa 1: 500
Digite o fluxo de caixa 2: 600
Digite a taxa de desconto (como um decimal): 0.1
Resumo da Entrada:
Número de Fluxos de Caixa: 3
Taxa de Desconto: 10.00%
Fluxos de Caixa:
Fluxo de Caixa 0: $-1000.00
Fluxo de Caixa 1: $500.00
Fluxo de Caixa 2: $600.00
Este código demonstra como:
- Definir um número máximo de fluxos de caixa
- Ler o número de fluxos de caixa da entrada do usuário
- Inserir valores individuais de fluxo de caixa
- Inserir a taxa de desconto
- Validar e exibir a entrada para verificação
O programa configura a base para o cálculo do VPL, capturando os parâmetros de entrada essenciais.
Descontar Cada Fluxo de Caixa e Somar
Neste passo, aprenderá a descontar cada fluxo de caixa e calcular o Valor Presente Líquido (VPL) somando os fluxos de caixa descontados em C.
Vamos modificar o arquivo anterior npv_calculator.c para adicionar o cálculo do VPL:
cd ~/project
nano npv_calculator.c
Substitua o código anterior pela seguinte implementação:
#include <stdio.h>
#include <math.h>
#define MAX_FLUXOS_CAIXA 10
double calculate_npv(double fluxos_caixa[], int num_fluxos_caixa, double taxa_desconto) {
double vpl = 0.0;
for (int i = 0; i < num_fluxos_caixa; i++) {
// Descontar cada fluxo de caixa: FC / (1 + r)^t
double fluxo_caixa_descontado = fluxos_caixa[i] / pow(1 + taxa_desconto, i);
vpl += fluxo_caixa_descontado;
}
return vpl;
}
int main() {
double fluxos_caixa[MAX_FLUXOS_CAIXA];
double taxa_desconto;
int num_fluxos_caixa;
// Entrada do número de fluxos de caixa
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_fluxos_caixa);
// Validação do número de fluxos de caixa
if (num_fluxos_caixa <= 0 || num_fluxos_caixa > MAX_FLUXOS_CAIXA) {
printf("Número de fluxos de caixa inválido.\n");
return 1;
}
// Entrada dos fluxos de caixa
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Digite o fluxo de caixa %d: ", i);
scanf("%lf", &fluxos_caixa[i]);
}
// Entrada da taxa de desconto
printf("Digite a taxa de desconto (como um decimal): ");
scanf("%lf", &taxa_desconto);
// Calcular o VPL
double vpl = calculate_npv(fluxos_caixa, num_fluxos_caixa, taxa_desconto);
// Imprimir resultados
printf("\nResumo da Entrada:\n");
printf("Número de Fluxos de Caixa: %d\n", num_fluxos_caixa);
printf("Taxa de Desconto: %.2f%%\n", taxa_desconto * 100);
printf("\nFluxos de Caixa:\n");
for (int i = 0; i < num_fluxos_caixa; i++) {
double fluxo_descontado = fluxos_caixa[i] / pow(1 + taxa_desconto, i);
printf("Fluxo de Caixa %d: $%.2f (Descontado: $%.2f)\n",
i, fluxos_caixa[i], fluxo_descontado);
}
printf("\nValor Presente Líquido (VPL): $%.2f\n", vpl);
return 0;
}
Compile o programa com a biblioteca matemática:
gcc -o npv_calculator npv_calculator.c -lm
Execute o programa para testar o cálculo do VPL:
./npv_calculator
Exemplo de saída:
Digite o número de fluxos de caixa (máximo 10): 3
Digite o fluxo de caixa 0: -1000
Digite o fluxo de caixa 1: 500
Digite o fluxo de caixa 2: 600
Digite a taxa de desconto (como um decimal): 0.1
Resumo da Entrada:
Número de Fluxos de Caixa: 3
Taxa de Desconto: 10.00%
Fluxos de Caixa:
Fluxo de Caixa 0: $-1000.00 (Descontado: $-1000.00)
Fluxo de Caixa 1: $500.00 (Descontado: $454.55)
Fluxo de Caixa 2: $600.00 (Descontado: $495.87)
Valor Presente Líquido (VPL): $-49.58
Pontos-chave desta implementação:
- Adicionou a função
calculate_npv()para calcular o VPL - Usou a função
pow()para descontar os fluxos de caixa - Exibiu os fluxos de caixa originais e descontados
- Calculou e exibiu o VPL final
Observação: O sinal -lm é usado para vincular a biblioteca matemática para a função pow().
Imprimir VPL
Neste passo final, aprenderá a interpretar e apresentar os resultados do cálculo do Valor Presente Líquido (VPL) em um formato amigável ao usuário.
Vamos modificar o npv_calculator.c para aprimorar a apresentação da saída:
cd ~/project
nano npv_calculator.c
Atualize o código com formatação de saída aprimorada:
#include <stdio.h>
#include <math.h>
#define MAX_FLUXOS_CAIXA 10
double calculate_npv(double fluxos_caixa[], int num_fluxos_caixa, double taxa_desconto) {
double vpl = 0.0;
for (int i = 0; i < num_fluxos_caixa; i++) {
double fluxo_caixa_descontado = fluxos_caixa[i] / pow(1 + taxa_desconto, i);
vpl += fluxo_caixa_descontado;
}
return vpl;
}
void print_npv_analysis(double fluxos_caixa[], int num_fluxos_caixa, double taxa_desconto, double vpl) {
printf("\n--- Relatório de Análise de VPL ---\n");
printf("Taxa de Desconto: %.2f%%\n", taxa_desconto * 100);
printf("\nDetalhamento dos Fluxos de Caixa:\n");
printf("--------------------\n");
for (int i = 0; i < num_fluxos_caixa; i++) {
double fluxo_descontado = fluxos_caixa[i] / pow(1 + taxa_desconto, i);
printf("Período %d: $%.2f (Descontado: $%.2f)\n",
i, fluxos_caixa[i], fluxo_descontado);
}
printf("\nValor Presente Líquido (VPL): $%.2f\n", vpl);
// Interpretar o resultado do VPL
if (vpl > 0) {
printf("Recomendação de Investimento: ACEITAR\n");
printf("O projeto deve gerar valor.\n");
} else if (vpl < 0) {
printf("Recomendação de Investimento: REJEITAR\n");
printf("O projeto deve destruir valor.\n");
} else {
printf("Recomendação de Investimento: NEUTRO\n");
printf("O projeto se equilibra na taxa de desconto fornecida.\n");
}
}
int main() {
double fluxos_caixa[MAX_FLUXOS_CAIXA];
double taxa_desconto;
int num_fluxos_caixa;
printf("Calculadora de Valor Presente Líquido (VPL)\n");
printf("==================================\n");
// Entrada do número de fluxos de caixa
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_fluxos_caixa);
// Validação do número de fluxos de caixa
if (num_fluxos_caixa <= 0 || num_fluxos_caixa > MAX_FLUXOS_CAIXA) {
printf("Número de fluxos de caixa inválido.\n");
return 1;
}
// Entrada dos fluxos de caixa
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Digite o fluxo de caixa para o período %d: ", i);
scanf("%lf", &fluxos_caixa[i]);
}
// Entrada da taxa de desconto
printf("Digite a taxa de desconto (como um decimal): ");
scanf("%lf", &taxa_desconto);
// Calcular o VPL
double vpl = calculate_npv(fluxos_caixa, num_fluxos_caixa, taxa_desconto);
// Imprimir a análise do VPL
print_npv_analysis(fluxos_caixa, num_fluxos_caixa, taxa_desconto, vpl);
return 0;
}
Compile o programa:
gcc -o npv_calculator npv_calculator.c -lm
Execute o programa para testar a saída aprimorada do VPL:
./npv_calculator
Exemplo de saída:
Calculadora de Valor Presente Líquido (VPL)
==================================
Digite o número de fluxos de caixa (máximo 10): 3
Digite o fluxo de caixa para o período 0: -1000
Digite o fluxo de caixa para o período 1: 500
Digite o fluxo de caixa para o período 2: 600
Digite a taxa de desconto (como um decimal): 0.1
--- Relatório de Análise de VPL ---
Taxa de Desconto: 10.00%
Detalhamento dos Fluxos de Caixa:
--------------------
Período 0: $-1000.00 (Descontado: $-1000.00)
Período 1: $500.00 (Descontado: $454.55)
Período 2: $600.00 (Descontado: $495.87)
Valor Presente Líquido (VPL): $-49.58
Recomendação de Investimento: REJEITAR
O projeto deve destruir valor.
Melhorias-chave nesta versão:
- Adicionou uma função dedicada
print_npv_analysis() - Formatação de saída aprimorada
- Adicionou recomendação de investimento com base no VPL
- Interface de usuário aprimorada com títulos claros
Resumo
Neste laboratório, você aprendeu como ler uma série de fluxos de caixa e a taxa de juros para calcular o Valor Presente Líquido (VPL) em C. Você criou um programa que permite aos usuários inserir múltiplos fluxos de caixa e a taxa de desconto, e então o programa imprime a entrada para verificação.
Em seguida, você aprenderá como descontar cada fluxo de caixa e somá-los para calcular o VPL e, em seguida, imprimir o resultado final.



