Resumen: obtener la mediana y la media de un arreglo en C. Es decir, obtener el promedio de un arreglo y también el elemento central o el que se encuentra a la mitad de la sucesión.

Para ello vamos a usar arreglos y condicionales sencillas.

La media: promedio

Primero comenzamos con la media, que no es otra cosa que el promedio. Si quieres ver el algoritmo a detalle mira: obtener promedio de arreglo en C.

Lo único que hacemos es recorrer todo el arreglo, ir sumando cada valor y luego dividir la sumatoria entre la longitud.

// Obtener media
int sumatoria = 0;
for (int x = 0; x < longitud; x++) {
    sumatoria += arreglo[x];
}
float media = (float) sumatoria / (float) longitud;

Obtener mediana

Para obtener la mediana primero debemos tener el arreglo ordenado de cualquier manera, es decir, ascendente o descendente.

Puedes ordenar el arreglo usando qsort, método de burbuja o quicksort. Aquí usaré qsort por simplicidad.

Después de tener el arreglo debemos tener su longitud, y saber si es par o impar. En caso de que sea par, debemos obtener los dos elementos del centro y obtener su promedio.

En caso de que sea impar, obtenemos el elemento del centro.

Mediana de arreglo en C

Definimos el arreglo así como otras variables que nos ayudarán a encontrar el elemento medio y la longitud del mismo:

int arreglo[] = {28, 11, 96, 21, 97, 6, 18, 13, 1, 19, 51};
int tamanioElemento = sizeof arreglo[0];
int longitud = sizeof arreglo / tamanioElemento;

Lo ordenamos:

int funcionQueCompara(const void *a, const void *b) {
    // Castear a enteros
    int aInt = *(int *) a;
    int bInt = *(int *) b;
    // Al restarlos, se debe obtener un número mayor, menor o igual a 0
    // Con esto ordenamos de manera ascendente
    return bInt - aInt;
}

qsort(arreglo, longitud, tamanioElemento, funcionQueCompara);

Ahora calculamos la mitad de la longitud del arreglo y dependiendo de si es par o no, obtenemos distintos resultados para la mediana:

int mediana;
// Después vemos si la longitud es par
if (longitud % 2 == 0) {
    // Debemos promediar los valores del centro
    mediana = (arreglo[mitad - 1] + arreglo[mitad]) / 2;
} else {
    mediana = arreglo[mitad];
}

Finalmente la imprimimos junto con el arreglo y el promedio:

printf("Imprimendo arreglo:\n");
for (int x = 0; x < longitud; x++) {
    printf("%d ", arreglo[x]);
}
printf("\nMediana: %d", mediana);
printf("\nMedia: %f", media);

Poniendo todo junto

El código completo queda así:

/**
 * Obtener media y mediana de arreglo en C
 * Media: promedio
 * Mediana: el elemento que se encuentra en el centro de una serie ordenada
 *
 * @author parzibyte
 * @see https://parzibyte.me/blog
 * */#include <stdio.h>
#include <stdlib.h>


int funcionQueCompara(const void *a, const void *b) {
    // Castear a enteros
    int aInt = *(int *) a;
    int bInt = *(int *) b;
    // Al restarlos, se debe obtener un número mayor, menor o igual a 0
    // Con esto ordenamos de manera ascendente
    return bInt - aInt;
}


int main(void) {
    int arreglo[] = {28, 11, 96, 21, 97, 6, 18, 13, 1, 19, 51};
    int tamanioElemento = sizeof arreglo[0];
    int longitud = sizeof arreglo / tamanioElemento;

    // Obtener media
    int sumatoria = 0;
    for (int x = 0; x < longitud; x++) {
        sumatoria += arreglo[x];
    }
    float media = (float) sumatoria / (float) longitud;
    // Ahora sumatoria
    // Primero ordenamos el arreglo
    qsort(arreglo, longitud, tamanioElemento, funcionQueCompara);

    int mitad = longitud / 2;
    int mediana;
    // Después vemos si la longitud es par
    if (longitud % 2 == 0) {
        // Debemos promediar los valores del centro
        mediana = (arreglo[mitad - 1] + arreglo[mitad]) / 2;
    } else {
        mediana = arreglo[mitad];
    }
    printf("Imprimendo arreglo:\n");
    for (int x = 0; x < longitud; x++) {
        printf("%d ", arreglo[x]);
    }
    printf("\nMediana: %d", mediana);
    printf("\nMedia: %f", media);
    return 0;
}

Al ejecutarlo en mi caso es:

Imprimir media y mediana en C

¿Más ejercicios sobre ANSI C? míralos aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.