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:
- Definir un número máximo de flujos de efectivo
- Leer el número de flujos de efectivo de la entrada del usuario
- Ingresar los valores individuales de los flujos de efectivo
- Ingresar la tasa de descuento
- 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:
- Se agregó la función
calculate_npv()para calcular el VAN. - Se utilizó la función
pow()para descontar los flujos de efectivo. - Se mostraron los flujos de efectivo originales y descontados.
- 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:
- Se agregó una función
print_npv_analysis()dedicada. - Formato de salida mejorado.
- Se agregó una recomendación de inversión basada en el VAN.
- 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.



