Introdução
Neste laboratório, você aprenderá a calcular o Intervalo Interquartil (IQR) em programação C. O laboratório cobre as etapas para ler e ordenar um array de números, encontrar as posições dos primeiros e terceiros quartis (Q1 e Q3), e então calcular o IQR como a diferença entre Q3 e Q1. Ao final deste laboratório, você terá uma compreensão sólida de como realizar esta análise estatística usando C.
Ler e Ordenar o Array
Nesta etapa, você aprenderá como ler um array de números e ordená-lo em preparação para calcular o Intervalo Interquartil (IQR). Usaremos programação C para realizar esta tarefa.
Primeiro, vamos criar um arquivo de origem C para nosso cálculo de IQR:
cd ~/project
nano iqr_calculation.c
Agora, vamos escrever o código inicial para ler e ordenar um array:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// Função para comparar inteiros para qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int numbers[MAX_SIZE];
int n, i;
// Ler o número de elementos
printf("Digite o número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Entrada dos elementos do array
printf("Digite %d inteiros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar o array
qsort(numbers, n, sizeof(int), compare);
// Imprimir o array ordenado
printf("Array ordenado: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
Compile o programa:
gcc -o iqr_calculation iqr_calculation.c
Execute o programa e forneça um exemplo de entrada:
./iqr_calculation
Exemplo de saída:
Digite o número de elementos (máximo 100): 6
Digite 6 inteiros:
45 22 14 65 97 72
Array ordenado: 14 22 45 65 72 97
Vamos decompor o código:
- Definimos um tamanho máximo de array de 100 elementos
- A função
compare()é usada pelaqsort()para ordenar inteiros - Leitura do número de elementos da entrada do usuário
qsort()é usado para ordenar o array em ordem crescente- O array ordenado é então impresso
Encontrar as Posições Q1 e Q3 e Calcular IQR = Q3 - Q1
Nesta etapa, modificaremos o programa anterior para calcular o Intervalo Interquartil (IQR) encontrando as posições Q1 e Q3.
Abra o arquivo de origem anterior:
cd ~/project
nano iqr_calculation.c
Atualize o código para calcular o IQR:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// Função para comparar inteiros para qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
// Função para calcular Q1 e 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;
// Ler o número de elementos
printf("Digite o número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Entrada dos elementos do array
printf("Digite %d inteiros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar o array
qsort(numbers, n, sizeof(int), compare);
// Calcular as posições Q1 e Q3
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Calcular Q1 e 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;
}
Compile o programa atualizado:
gcc -o iqr_calculation iqr_calculation.c -lm
Execute o programa e forneça um exemplo de entrada:
./iqr_calculation
Exemplo de saída:
Digite o número de elementos (máximo 100): 7
Digite 7 inteiros:
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
Pontos-chave no código:
calculateQuartile()lida com arrays de tamanho par e ímpar- Q1 é calculado no percentil 25
- Q3 é calculado no percentil 75
- IQR é calculado como Q3 - Q1
- Usamos interpolação linear para posições não inteiras
Imprimir o IQR
Nesta etapa final, focaremos na formatação e apresentação dos resultados do Intervalo Interquartil (IQR) de forma clara e informativa.
Abra o arquivo de origem anterior:
cd ~/project
nano iqr_calculation.c
Atualize o código para aprimorar a saída do IQR e adicionar texto descritivo:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// As funções anteriores permanecem as mesmas (compare e calculateQuartile)
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// Limpar a tela para uma melhor apresentação
printf("\033[2J\033[1;1H");
// Introdução ao IQR
printf("Calculadora de Intervalo Interquartil (IQR)\n");
printf("===========================================\n\n");
// Ler o número de elementos
printf("Digite o número de elementos (máximo %d): ", MAX_SIZE);
scanf("%d", &n);
// Entrada dos elementos do array
printf("Digite %d inteiros:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Ordenar o array
qsort(numbers, n, sizeof(int), compare);
// Calcular as posições Q1 e Q3
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Calcular Q1 e Q3
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// Calcular IQR
iqr = q3 - q1;
// Saída detalhada
printf("\nResultados da Análise de Dados\n");
printf("-----------------------------\n");
printf("Conjunto de Dados Original: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n\n");
// Saída formatada do IQR
printf("Análise de Quartis:\n");
printf("1º Quartil (Q1): %.2f\n", q1);
printf("3º Quartil (Q3): %.2f\n", q3);
printf("Intervalo Interquartil (IQR): %.2f\n", iqr);
// Interpretação do IQR
printf("\nInterpretação:\n");
printf("O IQR representa a dispersão dos 50%% médios dos dados.\n");
printf("Um IQR menor indica dados mais consistentes,\n");
printf("enquanto um IQR maior sugere mais variabilidade.\n");
return 0;
}
Compile o programa atualizado:
gcc -o iqr_calculation iqr_calculation.c -lm
Execute o programa e forneça um exemplo de entrada:
./iqr_calculation
Exemplo de saída:
Calculadora de Intervalo Interquartil (IQR)
===========================================
Digite o número de elementos (máximo 100): 7
Digite 7 inteiros:
12 15 18 22 25 30 35
Resultados da Análise de Dados
-----------------------------
Conjunto de Dados Original: 12 15 18 22 25 30 35
Análise de Quartis:
1º Quartil (Q1): 15.00
3º Quartil (Q3): 30.00
Intervalo Interquartil (IQR): 15.00
Interpretação:
O IQR representa a dispersão dos 50% médios dos dados.
Um IQR menor indica dados mais consistentes,
enquanto um IQR maior sugere mais variabilidade.
Melhorias-chave:
- Comando para limpar a tela adicionado para melhor apresentação
- Formatação de saída aprimorada
- Incluída uma interpretação do IQR
- Lógica de cálculo anterior mantida
Resumo
Neste laboratório, você aprendeu inicialmente como ler e ordenar um array de números em programação C. Criou um arquivo de origem C, escreveu o código inicial para ler os elementos do array e ordená-los usando a função qsort(). Em seguida, imprimiu o array ordenado para verificar o processo de ordenação.
Em seguida, você modificará o programa anterior para calcular o Intervalo Interquartil (IQR) encontrando as posições do primeiro quartil (Q1) e do terceiro quartil (Q3), e, em seguida, calculando o IQR como Q3 - Q1. Finalmente, você imprimirá o IQR calculado.



