Introducción
En este laboratorio, aprenderás a calcular el valor esperado de una distribución discreta en el lenguaje de programación C. El laboratorio cubre los siguientes pasos: leer los valores y probabilidades, calcular el valor esperado sumando el producto de cada valor y su probabilidad correspondiente, e imprimir el resultado final. El programa permite a los usuarios introducir el número de resultados, los valores y sus respectivas probabilidades, y luego muestra los valores de entrada para su verificación. Este laboratorio tiene como objetivo proporcionar una comprensión práctica de la probabilidad y la combinatoria utilizando C, una habilidad valiosa en diversos campos, como el análisis de datos, el aprendizaje automático y la toma de decisiones.
Leer Valores y Probabilidades
En este paso, aprenderás a leer valores y probabilidades para calcular el valor esperado de una distribución discreta en C. Crearemos un programa que permita a los usuarios introducir múltiples valores y sus probabilidades correspondientes.
Primero, creemos un nuevo archivo C en el directorio ~/project:
cd ~/project
nano expected_value.c
Ahora, escribamos el código inicial para leer valores y probabilidades:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
printf("Ingrese el número de resultados (máximo %d): ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
// Ingresar valores
printf("Ingrese los valores:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Valor %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Ingresar probabilidades
printf("Ingrese las probabilidades:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Probabilidad %d: ", i + 1);
scanf("%lf", &probabilities[i]);
}
// Imprimir la entrada para verificación
printf("\nValores de entrada:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Valor %d: %.2f, Probabilidad %d: %.2f\n",
i + 1, values[i], i + 1, probabilities[i]);
}
return 0;
}
Compila y ejecuta el programa:
gcc expected_value.c -o expected_value
./expected_value
Ejemplo de salida:
Ingrese el número de resultados (máximo 10): 3
Ingrese los valores:
Valor 1: 10
Valor 2: 20
Valor 3: 30
Ingrese las probabilidades:
Probabilidad 1: 0.2
Probabilidad 2: 0.5
Probabilidad 3: 0.3
Valores de entrada:
Valor 1: 10.00, Probabilidad 1: 0.20
Valor 2: 20.00, Probabilidad 2: 0.50
Valor 3: 30.00, Probabilidad 3: 0.30
Puntos clave a entender:
- Usamos matrices para almacenar valores y probabilidades.
MAX_OUTCOMESdefine el número máximo de resultados posibles.scanf()se utiliza para leer la entrada del usuario para valores y probabilidades.- Imprimimos la entrada para verificar la correcta entrada de datos.
Suma (valor * probabilidad) sobre todos los resultados
En este paso, ampliarás el programa anterior para calcular el valor esperado calculando la suma de cada valor multiplicado por su probabilidad.
Abre el archivo existente y modifica el código:
cd ~/project
nano expected_value.c
Actualiza el código para calcular el valor esperado:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
double expected_value = 0.0;
printf("Ingrese el número de resultados (máximo %d): ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
// Ingresar valores
printf("Ingrese los valores:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Valor %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Ingresar probabilidades
printf("Ingrese las probabilidades:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Probabilidad %d: ", i + 1);
scanf("%lf", &probabilities[i]);
}
// Calcular el valor esperado
for (int i = 0; i < num_outcomes; i++) {
expected_value += values[i] * probabilities[i];
}
// Imprimir resultados
printf("\nDetalles del cálculo:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Valor %d: %.2f * Probabilidad %d: %.2f = %.2f\n",
i + 1, values[i], i + 1, probabilities[i],
values[i] * probabilities[i]);
}
printf("\nValor Esperado: %.2f\n", expected_value);
return 0;
}
Compila y ejecuta el programa actualizado:
gcc expected_value.c -o expected_value
./expected_value
Ejemplo de salida:
Ingrese el número de resultados (máximo 10): 3
Ingrese los valores:
Valor 1: 10
Valor 2: 20
Valor 3: 30
Ingrese las probabilidades:
Probabilidad 1: 0.2
Probabilidad 2: 0.5
Probabilidad 3: 0.3
Detalles del cálculo:
Valor 1: 10.00 * Probabilidad 1: 0.20 = 2.00
Valor 2: 20.00 * Probabilidad 2: 0.50 = 10.00
Valor 3: 30.00 * Probabilidad 3: 0.30 = 9.00
Valor Esperado: 21.00
Puntos clave a entender:
- Introducimos
expected_valuepara almacenar la suma de valor * probabilidad. - El bucle
forcalcula cada término y acumula el total. - Imprimimos los pasos detallados del cálculo para mostrar cómo se calcula el valor esperado.
- Se muestra la contribución de cada resultado como (valor * probabilidad).
Imprimir el Valor Esperado
En este paso final, mejorarás el programa para proporcionar una salida más detallada y una mejor experiencia de usuario al mostrar el valor esperado.
Abre el archivo existente y realiza las modificaciones finales:
cd ~/project
nano expected_value.c
Actualiza el código con una mejor presentación y comprobación de errores:
#include <stdio.h>
#define MAX_OUTCOMES 10
int main() {
double values[MAX_OUTCOMES];
double probabilities[MAX_OUTCOMES];
int num_outcomes;
double expected_value = 0.0;
double total_probability = 0.0;
printf("Calculadora de Valor Esperado\n");
printf("==============================\n");
// Ingreso del número de resultados
do {
printf("Ingrese el número de resultados (1-%d): ", MAX_OUTCOMES);
scanf("%d", &num_outcomes);
if (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES) {
printf("Número de resultados inválido. Inténtelo de nuevo.\n");
}
} while (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES);
// Ingreso de valores
printf("\nIngrese Valores:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Valor %d: ", i + 1);
scanf("%lf", &values[i]);
}
// Ingreso de probabilidades con validación
printf("\nIngrese Probabilidades:\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Probabilidad %d: ", i + 1);
scanf("%lf", &probabilities[i]);
total_probability += probabilities[i];
}
// Validación de la probabilidad total
if (total_probability < 0.99 || total_probability > 1.01) {
printf("\nADVERTENCIA: Las probabilidades no suman 1.0 (suma actual: %.2f)\n",
total_probability);
}
// Calcular el valor esperado
for (int i = 0; i < num_outcomes; i++) {
expected_value += values[i] * probabilities[i];
}
// Imprimir resultados detallados
printf("\n--- Detalles del Cálculo ---\n");
for (int i = 0; i < num_outcomes; i++) {
printf("Resultado %d: Valor = %.2f, Probabilidad = %.2f\n",
i + 1, values[i], probabilities[i]);
printf(" Contribución: %.2f * %.2f = %.2f\n",
values[i], probabilities[i], values[i] * probabilities[i]);
}
// Salida final del valor esperado
printf("\n=== Valor Esperado ===\n");
printf("E(X) = %.2f\n", expected_value);
return 0;
}
Compila y ejecuta el programa final:
gcc expected_value.c -o expected_value
./expected_value
Ejemplo de salida:
Calculadora de Valor Esperado
==============================
Ingrese el número de resultados (1-10): 3
Ingrese Valores:
Valor 1: 10
Valor 2: 20
Valor 3: 30
Ingrese Probabilidades:
Probabilidad 1: 0.2
Probabilidad 2: 0.5
Probabilidad 3: 0.3
--- Detalles del Cálculo ---
Resultado 1: Valor = 10.00, Probabilidad = 0.20
Contribución: 10.00 * 0.20 = 2.00
Resultado 2: Valor = 20.00, Probabilidad = 0.50
Contribución: 20.00 * 0.50 = 10.00
Resultado 3: Valor = 30.00, Probabilidad = 0.30
Contribución: 30.00 * 0.30 = 9.00
=== Valor Esperado ===
E(X) = 21.00
Mejoras clave:
- Se agregó validación de entrada para el número de resultados.
- Se verificó la suma total de probabilidades.
- Se mejoró la presentación de la salida.
- Se mostraron las contribuciones individuales de cada resultado.
- Se mostró claramente el valor esperado final.
Resumen
En este laboratorio, aprenderás a leer valores y probabilidades, y luego a calcular el valor esperado de una distribución discreta en C. Primero, crearás un programa que permita a los usuarios introducir múltiples valores y sus probabilidades correspondientes. Luego, aprenderás cómo sumar el producto de cada valor y su probabilidad para calcular el valor esperado. Finalmente, imprimirás el valor esperado calculado.
Los puntos clave cubiertos en este laboratorio incluyen el uso de matrices para almacenar valores y probabilidades, la definición de un número máximo de resultados posibles y la utilización de la función scanf() para leer la entrada del usuario. El programa se asegura de que los valores y probabilidades de entrada se impriman para su verificación antes de pasar al siguiente paso.



