Calcular o Valor Presente Líquido (VPL) em C

CBeginner
Pratique Agora

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:

  1. Definir um número máximo de fluxos de caixa
  2. Ler o número de fluxos de caixa da entrada do usuário
  3. Inserir valores individuais de fluxo de caixa
  4. Inserir a taxa de desconto
  5. 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:

  1. Adicionou a função calculate_npv() para calcular o VPL
  2. Usou a função pow() para descontar os fluxos de caixa
  3. Exibiu os fluxos de caixa originais e descontados
  4. 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:

  1. Adicionou uma função dedicada print_npv_analysis()
  2. Formatação de saída aprimorada
  3. Adicionou recomendação de investimento com base no VPL
  4. 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.