Calcular el Valor Actual Neto (VAN) en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a calcular el Valor Actual Neto (VAN) en C. El laboratorio te guiará a través del proceso de leer una serie de flujos de efectivo y la tasa de descuento, descontando cada flujo de efectivo y luego sumándolos para calcular el VAN. Crearás un programa en C que permita a los usuarios introducir los datos necesarios y luego muestre el VAN calculado. Este laboratorio cubre los conceptos fundamentales de matemáticas financieras y cálculos de interés utilizando programación en C.

Leer una Serie de Flujos de Efectivo y la Tasa

En este paso, aprenderás a leer una serie de flujos de efectivo y la tasa de interés para calcular el Valor Actual Neto (VAN) en C. Crearemos un programa que permita a los usuarios introducir múltiples flujos de efectivo y la tasa de descuento.

Primero, creemos un nuevo archivo C para nuestro cálculo de VAN:

cd ~/project
nano npv_calculator.c

Ahora, agrega el siguiente código al archivo:

#include <stdio.h>

#define MAX_FLUJOS_EFECTIVO 10

int main() {
    double flujos_efectivo[MAX_FLUJOS_EFECTIVO];
    double tasa_descuento;
    int num_flujos_efectivo;

    // Ingresar el número de flujos de efectivo
    printf("Ingrese el número de flujos de efectivo (máximo %d): ", MAX_FLUJOS_EFECTIVO);
    scanf("%d", &num_flujos_efectivo);

    // Validar el número de flujos de efectivo
    if (num_flujos_efectivo <= 0 || num_flujos_efectivo > MAX_FLUJOS_EFECTIVO) {
        printf("Número de flujos de efectivo inválido.\n");
        return 1;
    }

    // Ingresar los flujos de efectivo
    for (int i = 0; i < num_flujos_efectivo; i++) {
        printf("Ingrese el flujo de efectivo %d: ", i);
        scanf("%lf", &flujos_efectivo[i]);
    }

    // Ingresar la tasa de descuento
    printf("Ingrese la tasa de descuento (como decimal): ");
    scanf("%lf", &tasa_descuento);

    // Imprimir el resumen de entrada para verificación
    printf("\nResumen de Entrada:\n");
    printf("Número de Flujos de Efectivo: %d\n", num_flujos_efectivo);
    printf("Tasa de Descuento: %.2f%%\n", tasa_descuento * 100);

    printf("\nFlujos de Efectivo:\n");
    for (int i = 0; i < num_flujos_efectivo; i++) {
        printf("Flujo de Efectivo %d: $%.2f\n", i, flujos_efectivo[i]);
    }

    return 0;
}

Compila el programa:

gcc -o npv_calculator npv_calculator.c

Ejecuta el programa para probar la entrada:

./npv_calculator

Salida de ejemplo:

Ingrese el número de flujos de efectivo (máximo 10): 3
Ingrese el flujo de efectivo 0: -1000
Ingrese el flujo de efectivo 1: 500
Ingrese el flujo de efectivo 2: 600
Ingrese la tasa de descuento (como decimal): 0.1

Resumen de Entrada:
Número de Flujos de Efectivo: 3
Tasa de Descuento: 10.00%

Flujos de Efectivo:
Flujo de Efectivo 0: $-1000.00
Flujo de Efectivo 1: $500.00
Flujo de Efectivo 2: $600.00

Este código demuestra cómo:

  1. Definir un número máximo de flujos de efectivo
  2. Leer el número de flujos de efectivo de la entrada del usuario
  3. Ingresar los valores individuales de los flujos de efectivo
  4. Ingresar la tasa de descuento
  5. Validar y mostrar la entrada para verificación

El programa establece los cimientos para el cálculo del VAN capturando los parámetros de entrada esenciales.

Descontar Cada Flujo de Efectivo y Sumar

En este paso, aprenderás a descontar cada flujo de efectivo y calcular el Valor Actual Neto (VAN) sumando los flujos de efectivo descontados en C.

Modifiquemos el archivo anterior npv_calculator.c para agregar el cálculo del VAN:

cd ~/project
nano npv_calculator.c

Reemplaza el código anterior con la siguiente implementación:

#include <stdio.h>
#include <math.h>

#define MAX_FLUJOS_EFECTIVO 10

double calculate_npv(double flujos_efectivo[], int num_flujos_efectivo, double tasa_descuento) {
    double van = 0.0;

    for (int i = 0; i < num_flujos_efectivo; i++) {
        // Descontar cada flujo de efectivo: FE / (1 + r)^t
        double flujo_descontado = flujos_efectivo[i] / pow(1 + tasa_descuento, i);
        van += flujo_descontado;
    }

    return van;
}

int main() {
    double flujos_efectivo[MAX_FLUJOS_EFECTIVO];
    double tasa_descuento;
    int num_flujos_efectivo;

    // Ingresar el número de flujos de efectivo
    printf("Ingrese el número de flujos de efectivo (máximo %d): ", MAX_FLUJOS_EFECTIVO);
    scanf("%d", &num_flujos_efectivo);

    // Validar el número de flujos de efectivo
    if (num_flujos_efectivo <= 0 || num_flujos_efectivo > MAX_FLUJOS_EFECTIVO) {
        printf("Número de flujos de efectivo inválido.\n");
        return 1;
    }

    // Ingresar los flujos de efectivo
    for (int i = 0; i < num_flujos_efectivo; i++) {
        printf("Ingrese el flujo de efectivo %d: ", i);
        scanf("%lf", &flujos_efectivo[i]);
    }

    // Ingresar la tasa de descuento
    printf("Ingrese la tasa de descuento (como decimal): ");
    scanf("%lf", &tasa_descuento);

    // Calcular el VAN
    double van = calculate_npv(flujos_efectivo, num_flujos_efectivo, tasa_descuento);

    // Imprimir resultados
    printf("\nResumen de Entrada:\n");
    printf("Número de Flujos de Efectivo: %d\n", num_flujos_efectivo);
    printf("Tasa de Descuento: %.2f%%\n", tasa_descuento * 100);

    printf("\nFlujos de Efectivo:\n");
    for (int i = 0; i < num_flujos_efectivo; i++) {
        double flujo_descontado = flujos_efectivo[i] / pow(1 + tasa_descuento, i);
        printf("Flujo de Efectivo %d: $%.2f (Descontado: $%.2f)\n",
               i, flujos_efectivo[i], flujo_descontado);
    }

    printf("\nValor Actual Neto (VAN): $%.2f\n", van);

    return 0;
}

Compila el programa con la biblioteca matemática:

gcc -o npv_calculator npv_calculator.c -lm

Ejecuta el programa para probar el cálculo del VAN:

./npv_calculator

Salida de ejemplo:

Ingrese el número de flujos de efectivo (máximo 10): 3
Ingrese el flujo de efectivo 0: -1000
Ingrese el flujo de efectivo 1: 500
Ingrese el flujo de efectivo 2: 600
Ingrese la tasa de descuento (como decimal): 0.1

Resumen de Entrada:
Número de Flujos de Efectivo: 3
Tasa de Descuento: 10.00%

Flujos de Efectivo:
Flujo de Efectivo 0: $-1000.00 (Descontado: $-1000.00)
Flujo de Efectivo 1: $500.00 (Descontado: $454.55)
Flujo de Efectivo 2: $600.00 (Descontado: $495.87)

Valor Actual Neto (VAN): $-49.58

Puntos clave de esta implementación:

  1. Se agregó la función calculate_npv() para calcular el VAN.
  2. Se utilizó la función pow() para descontar los flujos de efectivo.
  3. Se mostraron los flujos de efectivo originales y descontados.
  4. Se calculó y mostró el VAN final.

Nota: El flag -lm se utiliza para enlazar la biblioteca matemática para la función pow().

Imprimir VAN

En este paso final, aprenderás a interpretar y presentar los resultados del cálculo del Valor Actual Neto (VAN) en un formato fácil de usar.

Modifiquemos npv_calculator.c para mejorar la presentación de la salida:

cd ~/project
nano npv_calculator.c

Actualiza el código con un formato de salida mejorado:

#include <stdio.h>
#include <math.h>

#define MAX_FLUJOS_EFECTIVO 10

double calculate_npv(double flujos_efectivo[], int num_flujos_efectivo, double tasa_descuento) {
    double van = 0.0;

    for (int i = 0; i < num_flujos_efectivo; i++) {
        double flujo_descontado = flujos_efectivo[i] / pow(1 + tasa_descuento, i);
        van += flujo_descontado;
    }

    return van;
}

void print_npv_analysis(double flujos_efectivo[], int num_flujos_efectivo, double tasa_descuento, double van) {
    printf("\n--- Informe de Análisis de VAN ---\n");
    printf("Tasa de Descuento: %.2f%%\n", tasa_descuento * 100);

    printf("\nDesglose de Flujos de Efectivo:\n");
    printf("--------------------\n");
    for (int i = 0; i < num_flujos_efectivo; i++) {
        double flujo_descontado = flujos_efectivo[i] / pow(1 + tasa_descuento, i);
        printf("Periodo %d: $%.2f (Descontado: $%.2f)\n",
               i, flujos_efectivo[i], flujo_descontado);
    }

    printf("\nValor Actual Neto (VAN): $%.2f\n", van);

    // Interpretar el resultado del VAN
    if (van > 0) {
        printf("Recomendación de Inversión: ACEPTAR\n");
        printf("Se espera que el proyecto genere valor.\n");
    } else if (van < 0) {
        printf("Recomendación de Inversión: RECHAZAR\n");
        printf("Se espera que el proyecto destruya valor.\n");
    } else {
        printf("Recomendación de Inversión: NEUTRO\n");
        printf("El proyecto equilibra el valor a la tasa de descuento dada.\n");
    }
}

int main() {
    double flujos_efectivo[MAX_FLUJOS_EFECTIVO];
    double tasa_descuento;
    int num_flujos_efectivo;

    printf("Calculadora de Valor Actual Neto (VAN)\n");
    printf("===================================\n");

    // Ingresar el número de flujos de efectivo
    printf("Ingrese el número de flujos de efectivo (máximo %d): ", MAX_FLUJOS_EFECTIVO);
    scanf("%d", &num_flujos_efectivo);

    // Validar el número de flujos de efectivo
    if (num_flujos_efectivo <= 0 || num_flujos_efectivo > MAX_FLUJOS_EFECTIVO) {
        printf("Número de flujos de efectivo inválido.\n");
        return 1;
    }

    // Ingresar los flujos de efectivo
    for (int i = 0; i < num_flujos_efectivo; i++) {
        printf("Ingrese el flujo de efectivo para el periodo %d: ", i);
        scanf("%lf", &flujos_efectivo[i]);
    }

    // Ingresar la tasa de descuento
    printf("Ingrese la tasa de descuento (como decimal): ");
    scanf("%lf", &tasa_descuento);

    // Calcular el VAN
    double van = calculate_npv(flujos_efectivo, num_flujos_efectivo, tasa_descuento);

    // Imprimir el análisis del VAN
    print_npv_analysis(flujos_efectivo, num_flujos_efectivo, tasa_descuento, van);

    return 0;
}

Compila el programa:

gcc -o npv_calculator npv_calculator.c -lm

Ejecuta el programa para probar la salida mejorada del VAN:

./npv_calculator

Salida de ejemplo:

Calculadora de Valor Actual Neto (VAN)
===================================
Ingrese el número de flujos de efectivo (máximo 10): 3
Ingrese el flujo de efectivo para el periodo 0: -1000
Ingrese el flujo de efectivo para el periodo 1: 500
Ingrese el flujo de efectivo para el periodo 2: 600
Ingrese la tasa de descuento (como decimal): 0.1

--- Informe de Análisis de VAN ---
Tasa de Descuento: 10.00%

Desglose de Flujos de Efectivo:
--------------------
Periodo 0: $-1000.00 (Descontado: $-1000.00)
Periodo 1: $500.00 (Descontado: $454.55)
Periodo 2: $600.00 (Descontado: $495.87)

Valor Actual Neto (VAN): $-49.58
Recomendación de Inversión: RECHAZAR
Se espera que el proyecto destruya valor.

Mejoras clave en esta versión:

  1. Se agregó una función print_npv_analysis() dedicada.
  2. Formato de salida mejorado.
  3. Se agregó una recomendación de inversión basada en el VAN.
  4. Interfaz de usuario mejorada con encabezados claros.

Resumen

En este laboratorio, aprendiste a leer una serie de flujos de efectivo y la tasa de interés para calcular el Valor Actual Neto (VAN) en C. Creaste un programa que permite a los usuarios ingresar múltiples flujos de efectivo y la tasa de descuento, y luego el programa imprime la entrada para su verificación.

A continuación, aprenderás cómo descontar cada flujo de efectivo y sumarlos para calcular el VAN, y luego imprimir el resultado final.