Calcular la Mediana de un Conjunto de Datos en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a calcular la mediana de un conjunto de datos en el lenguaje de programación C. El laboratorio cubre los siguientes pasos: leer y ordenar un array de números, encontrar el elemento central o el promedio de los dos elementos centrales, e imprimir la mediana. Las instrucciones paso a paso te guiarán a través del proceso de implementar estas tareas utilizando programación en C, incluyendo funciones para leer, ordenar e imprimir el array. Este laboratorio proporciona un enfoque práctico para comprender y aplicar técnicas de análisis estadístico en C.

Leer y Ordenar el Array

En este paso, aprenderás a leer un array de números y ordenarlo como preparación para calcular la mediana. Usaremos programación en C para realizar esta tarea.

Primero, creemos un archivo C para implementar la lectura y ordenación del array:

cd ~/project
nano median_calculator.c

Ahora, añade el siguiente código al archivo:

#include <stdio.h>

#define MAX_SIZE 100

// Función para leer los elementos del array
void readArray(int arr[], int *n) {
    printf("Introduce el número de elementos (máximo %d): ", MAX_SIZE);
    scanf("%d", n);

    printf("Introduce %d elementos:\n", *n);
    for (int i = 0; i < *n; i++) {
        scanf("%d", &arr[i]);
    }
}

// Función para ordenar el array usando el algoritmo de ordenamiento burbuja
void sortArray(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // Intercambiar elementos
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

// Función para imprimir el array
void printArray(int arr[], int n) {
    printf("Array ordenado: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[MAX_SIZE];
    int n;

    readArray(arr, &n);
    sortArray(arr, n);
    printArray(arr, n);

    return 0;
}

Compila y ejecuta el programa:

gcc median_calculator.c -o median_calculator
./median_calculator

Ejemplo de salida:

Introduce el número de elementos (máximo 100): 5
Introduce 5 elementos:
42
15
7
23
11
Array ordenado: 7 11 15 23 42

Desglose del código:

  1. La función readArray() permite la entrada de usuario para los elementos del array.
  2. La función sortArray() utiliza el algoritmo de ordenamiento burbuja para organizar los elementos en orden ascendente.
  3. La función printArray() muestra el array ordenado.
  4. La función main() conecta estas funciones.

El algoritmo de ordenamiento burbuja tiene una complejidad temporal de O(n²), que es simple de entender pero no el más eficiente para conjuntos de datos grandes.

Encontrar el Elemento Central o el Promedio de Dos Centrales

En este paso, ampliarás el programa anterior para calcular la mediana encontrando el elemento central o el promedio de los dos elementos centrales en un array ordenado.

Abre el archivo existente y modifica el código:

cd ~/project
nano median_calculator.c

Actualiza el código con una nueva función para calcular la mediana:

#include <stdio.h>

#define MAX_SIZE 100

// Las funciones anteriores (readArray, sortArray, printArray) permanecen igual

// Nueva función para calcular la mediana
float calculateMedian(int arr[], int n) {
    // Si el número de elementos es impar, devuelve el elemento central
    if (n % 2 != 0) {
        return arr[n / 2];
    }

    // Si el número de elementos es par, devuelve el promedio de los dos elementos centrales
    int mid1 = arr[(n / 2) - 1];
    int mid2 = arr[n / 2];
    return (mid1 + mid2) / 2.0;
}

int main() {
    int arr[MAX_SIZE];
    int n;

    readArray(arr, &n);
    sortArray(arr, n);
    printArray(arr, n);

    // Calcular e imprimir la mediana
    float median = calculateMedian(arr, n);
    printf("Mediana: %.2f\n", median);

    return 0;
}

Compila y ejecuta el programa actualizado:

gcc median_calculator.c -o median_calculator
./median_calculator

Ejemplo de salida para un número impar de elementos:

Introduce el número de elementos (máximo 100): 5
Introduce 5 elementos:
42
15
7
23
11
Array ordenado: 7 11 15 23 42
Mediana: 15.00

Ejemplo de salida para un número par de elementos:

Introduce el número de elementos (máximo 100): 6
Introduce 6 elementos:
42
15
7
23
11
8
Array ordenado: 7 8 11 15 23 42
Mediana: 13.00

Puntos clave sobre el cálculo de la mediana:

  1. Para un número impar de elementos, la mediana es el elemento central.
  2. Para un número par de elementos, la mediana es el promedio de los dos elementos centrales.
  3. El array debe estar ordenado antes de calcular la mediana.

La función calculateMedian() maneja ambos casos:

  • Utiliza la división entera para encontrar el índice central.
  • Comprueba si el número de elementos es impar o par.
  • Devuelve el valor de la mediana apropiado.

Imprimir la Mediana

En este paso final, mejorarás el programa de cálculo de la mediana para proporcionar una salida más detallada y demostrar diferentes maneras de presentar la mediana.

Abre el archivo existente para realizar las modificaciones finales:

cd ~/project
nano median_calculator.c

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

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

// Las funciones anteriores (readArray, sortArray, printArray, calculateMedian) permanecen igual

void printDetailedMedianInfo(int arr[], int n, float median) {
    printf("\n--- Detalles del Cálculo de la Mediana ---\n");
    printf("Número total de elementos: %d\n", n);
    printf("Elementos del array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n\nCálculo de la Mediana:\n");

    if (n % 2 != 0) {
        printf("Número impar de elementos\n");
        printf("Índice central: %d\n", n / 2);
        printf("Elemento central: %d\n", arr[n / 2]);
    } else {
        printf("Número par de elementos\n");
        printf("Dos índices centrales: %d y %d\n", (n / 2) - 1, n / 2);
        printf("Elementos centrales: %d y %d\n", arr[(n / 2) - 1], arr[n / 2]);
    }

    printf("\nMediana final: %.2f\n", median);
}

int main() {
    int arr[MAX_SIZE];
    int n;

    readArray(arr, &n);
    sortArray(arr, n);

    float median = calculateMedian(arr, n);

    // Imprimir el array ordenado
    printArray(arr, n);

    // Imprimir información detallada sobre la mediana
    printDetailedMedianInfo(arr, n, median);

    return 0;
}

Compila y ejecuta el programa actualizado:

gcc median_calculator.c -o median_calculator
./median_calculator

Ejemplo de salida para un número impar de elementos:

Introduce el número de elementos (máximo 100): 5
Introduce 5 elementos:
42
15
7
23
11
Array ordenado: 7 11 15 23 42

--- Detalles del Cálculo de la Mediana ---
Número total de elementos: 5
Elementos del array: 7 11 15 23 42

Cálculo de la Mediana:
Número impar de elementos
Índice central: 2
Elemento central: 15

Mediana final: 15.00

Ejemplo de salida para un número par de elementos:

Introduce el número de elementos (máximo 100): 6
Introduce 6 elementos:
42
15
7
23
11
8
Array ordenado: 7 8 11 15 23 42

--- Detalles del Cálculo de la Mediana ---
Número total de elementos: 6
Elementos del array: 7 8 11 15 23 42

Cálculo de la Mediana:
Número par de elementos
Dos índices centrales: 2 y 3
Elementos centrales: 11 y 15

Mediana final: 13.00

Mejoras clave en este paso:

  1. Se añadió una nueva función printDetailedMedianInfo().
  2. Proporciona información completa sobre el cálculo de la mediana.
  3. Muestra diferentes escenarios para un número impar y par de elementos.
  4. Mejora la comprensión del usuario sobre el cálculo de la mediana.

Resumen

En este laboratorio, aprendiste a leer un array de números, ordenarlos utilizando el algoritmo de ordenamiento por burbuja y preparar los datos para calcular la mediana. El array ordenado se imprime luego en la consola, demostrando la finalización exitosa del primer paso. Si bien el algoritmo de ordenamiento por burbuja es fácil de entender, tiene una complejidad temporal de O(n²), lo que puede no ser el más eficiente para conjuntos de datos grandes. Los pasos siguientes se centrarán en encontrar la mediana del array ordenado.

El siguiente paso implica identificar el elemento central o el promedio de los dos elementos centrales, dependiendo del tamaño del array. Este paso garantizará que la mediana se calcule y presente con precisión al usuario.