Introducción
En este laboratorio, aprenderás a calcular el Rango Intercuartílico (IQR) en el lenguaje de programación C. El laboratorio cubre los pasos para leer y ordenar un array de números, encontrar las posiciones de los cuartiles primero y tercero (Q1 y Q3), y luego calcular el IQR como la diferencia entre Q3 y Q1. Al final de este laboratorio, tendrás una sólida comprensión de cómo realizar este análisis estadístico usando 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 el Rango Intercuartílico (IQR). Usaremos programación en C para realizar esta tarea.
Primero, creemos un archivo fuente C para nuestro cálculo de IQR:
cd ~/project
nano iqr_calculation.c
Ahora, escribamos el código inicial para leer y ordenar un array:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// Función para comparar enteros para qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int numbers[MAX_SIZE];
int n, i;
// Leer el número de elementos
printf("Ingrese el número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Ingresar los elementos del array
printf("Ingrese %d enteros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar el array
qsort(numbers, n, sizeof(int), compare);
// Imprimir el array ordenado
printf("Array ordenado: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
Compila el programa:
gcc -o iqr_calculation iqr_calculation.c
Ejecuta el programa y proporciona una entrada de ejemplo:
./iqr_calculation
Salida de ejemplo:
Ingrese el número de elementos (máximo 100): 6
Ingrese 6 enteros:
45 22 14 65 97 72
Array ordenado: 14 22 45 65 72 97
Desglose del código:
- Definimos un tamaño máximo de array de 100 elementos.
- La función
compare()es usada porqsort()para ordenar enteros. - Leemos el número de elementos de la entrada del usuario.
qsort()se utiliza para ordenar el array en orden ascendente.- Luego, se imprime el array ordenado.
Encontrar las Posiciones Q1 y Q3 y Calcular IQR = Q3 - Q1
En este paso, modificaremos el programa anterior para calcular el Rango Intercuartílico (IQR) encontrando las posiciones de Q1 y Q3.
Abre el archivo fuente anterior:
cd ~/project
nano iqr_calculation.c
Actualiza el código para calcular el IQR:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// Función para comparar enteros para qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
// Función para calcular Q1 y Q3
double calculateQuartile(int *arr, int n, double position) {
int index = floor(position);
double fraction = position - index;
if (fraction == 0) {
return arr[index - 1];
} else {
return arr[index - 1] * (1 - fraction) + arr[index] * fraction;
}
}
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// Leer el número de elementos
printf("Ingrese el número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Ingresar los elementos del array
printf("Ingrese %d enteros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar el array
qsort(numbers, n, sizeof(int), compare);
// Calcular las posiciones de Q1 y Q3
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Calcular Q1 y Q3
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// Calcular IQR
iqr = q3 - q1;
// Imprimir resultados
printf("Array ordenado: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
printf("Q1: %.2f\n", q1);
printf("Q3: %.2f\n", q3);
printf("IQR: %.2f\n", iqr);
return 0;
}
Compila el programa actualizado:
gcc -o iqr_calculation iqr_calculation.c -lm
Ejecuta el programa y proporciona una entrada de ejemplo:
./iqr_calculation
Salida de ejemplo:
Ingrese el número de elementos (máximo 100): 7
Ingrese 7 enteros:
12 15 18 22 25 30 35
Array ordenado: 12 15 18 22 25 30 35
Q1: 15.00
Q3: 30.00
IQR: 15.00
Puntos clave del código:
calculateQuartile()maneja arrays de tamaño par e impar.- Q1 se calcula en el percentil 25.
- Q3 se calcula en el percentil 75.
- IQR se calcula como Q3 - Q1.
- Usamos interpolación lineal para posiciones no enteras.
Imprimir el IQR
En este paso final, nos enfocaremos en la presentación del Rango Intercuartílico (IQR) de una manera clara e informativa.
Abre el archivo fuente anterior:
cd ~/project
nano iqr_calculation.c
Actualiza el código para mejorar la salida del IQR y agregar texto descriptivo:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// Las funciones anteriores permanecen igual (compare y calculateQuartile)
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// Limpiar la pantalla para una mejor presentación
printf("\033[2J\033[1;1H");
// Introducción al IQR
printf("Calculadora de Rango Intercuartílico (IQR)\n");
printf("===========================================\n\n");
// Leer el número de elementos
printf("Ingrese el número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Ingresar los elementos del array
printf("Ingrese %d enteros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar el array
qsort(numbers, n, sizeof(int), compare);
// Calcular las posiciones de Q1 y Q3
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Calcular Q1 y Q3
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// Calcular IQR
iqr = q3 - q1;
// Salida detallada
printf("\nResultados del Análisis de Datos\n");
printf("--------------------\n");
printf("Conjunto de Datos Original: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n\n");
// Salida formateada del IQR
printf("Análisis de Cuartiles:\n");
printf("Primer Cuartil (Q1): %.2f\n", q1);
printf("Tercer Cuartil (Q3): %.2f\n", q3);
printf("Rango Intercuartílico (IQR): %.2f\n", iqr);
// Interpretación del IQR
printf("\nInterpretación:\n");
printf("El IQR representa la dispersión del 50%% central de los datos.\n");
printf("Un IQR más pequeño indica datos más consistentes,\n");
printf("mientras que un IQR mayor sugiere más variabilidad.\n");
return 0;
}
Compila el programa actualizado:
gcc -o iqr_calculation iqr_calculation.c -lm
Ejecuta el programa y proporciona una entrada de ejemplo:
./iqr_calculation
Salida de ejemplo:
Calculadora de Rango Intercuartílico (IQR)
===========================================
Ingrese el número de elementos (máximo 100): 7
Ingrese 7 enteros:
12 15 18 22 25 30 35
Resultados del Análisis de Datos
--------------------
Conjunto de Datos Original: 12 15 18 22 25 30 35
Análisis de Cuartiles:
Primer Cuartil (Q1): 15.00
Tercer Cuartil (Q3): 30.00
Rango Intercuartílico (IQR): 15.00
Interpretación:
El IQR representa la dispersión del 50% central de los datos.
Un IQR más pequeño indica datos más consistentes,
mientras que un IQR mayor sugiere más variabilidad.
Mejoras clave:
- Se agregó un comando para limpiar la pantalla para una mejor presentación.
- Se mejoró el formato de la salida.
- Se incluyó una interpretación del IQR.
- Se mantuvo la lógica de cálculo anterior.
Resumen
En este laboratorio, aprendiste primero cómo leer y ordenar un array de números en programación C. Creaste un archivo fuente en C, escribiste el código inicial para leer los elementos del array y ordenarlos utilizando la función qsort(). Luego, imprimiste el array ordenado para verificar el proceso de ordenación.
A continuación, modificarás el programa anterior para calcular el Rango Intercuartílico (IQR) encontrando las posiciones del primer cuartil (Q1) y el tercer cuartil (Q3), y luego calculando el IQR como Q3 - Q1. Finalmente, imprimirás el IQR calculado.



