Calcul de l'étendue interquartile (IQR) en C

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à calculer l'étendue interquartile (IQR) en langage C. Le laboratoire couvre les étapes de la lecture et du tri d'un tableau de nombres, de la détermination des positions des premier et troisième quartiles (Q1 et Q3), puis du calcul de l'IQR comme différence entre Q3 et Q1. À la fin de ce laboratoire, vous aurez une compréhension solide de la manière d'effectuer cette analyse statistique en utilisant C.

Lecture et tri du tableau

Dans cette étape, vous apprendrez à lire un tableau de nombres et à le trier en vue du calcul de l'étendue interquartile (IQR). Nous utiliserons le langage C pour accomplir cette tâche.

Tout d'abord, créons un fichier source C pour notre calcul d'IQR :

cd ~/project
nano iqr_calculation.c

Maintenant, écrivons le code initial pour lire et trier un tableau :

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

#define MAX_SIZE 100

// Fonction de comparaison d'entiers pour qsort
int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int numbers[MAX_SIZE];
    int n, i;

    // Lecture du nombre d'éléments
    printf("Entrez le nombre d'éléments (max %d) : ", MAX_SIZE);
    scanf("%d", &n);

    // Saisie des éléments du tableau
    printf("Entrez %d entiers :\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Tri du tableau
    qsort(numbers, n, sizeof(int), compare);

    // Affichage du tableau trié
    printf("Tableau trié : ");
    for (i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    return 0;
}

Compilation du programme :

gcc -o iqr_calculation iqr_calculation.c

Exécution du programme et fourniture d'une entrée d'exemple :

./iqr_calculation

Sortie d'exemple :

Entrez le nombre d'éléments (max 100) : 6
Entrez 6 entiers :
45 22 14 65 97 72
Tableau trié : 14 22 45 65 72 97

Décomposons le code :

  • Nous définissons une taille maximale du tableau de 100 éléments
  • La fonction compare() est utilisée par qsort() pour trier les entiers
  • Nous lisons le nombre d'éléments à partir de l'entrée utilisateur
  • qsort() est utilisé pour trier le tableau par ordre croissant
  • Le tableau trié est ensuite affiché

Calculer les positions de Q1 et Q3 et calculer l'IQR = Q3 - Q1

Dans cette étape, nous allons modifier le programme précédent pour calculer l'étendue interquartile (IQR) en déterminant les positions de Q1 et Q3.

Ouvrez le fichier source précédent :

cd ~/project
nano iqr_calculation.c

Mettez à jour le code pour calculer l'IQR :

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

#define MAX_SIZE 100

// Fonction de comparaison d'entiers pour qsort
int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

// Fonction pour calculer Q1 et 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;

    // Lecture du nombre d'éléments
    printf("Entrez le nombre d'éléments (max %d) : ", MAX_SIZE);
    scanf("%d", &n);

    // Saisie des éléments du tableau
    printf("Entrez %d entiers :\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Tri du tableau
    qsort(numbers, n, sizeof(int), compare);

    // Calcul des positions de Q1 et Q3
    double q1_pos = 0.25 * (n + 1);
    double q3_pos = 0.75 * (n + 1);

    // Calcul de Q1 et Q3
    q1 = calculateQuartile(numbers, n, q1_pos);
    q3 = calculateQuartile(numbers, n, q3_pos);

    // Calcul de l'IQR
    iqr = q3 - q1;

    // Affichage des résultats
    printf("Tableau trié : ");
    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;
}

Compilation du programme mis à jour :

gcc -o iqr_calculation iqr_calculation.c -lm

Exécution du programme et fourniture d'une entrée d'exemple :

./iqr_calculation

Sortie d'exemple :

Entrez le nombre d'éléments (max 100) : 7
Entrez 7 entiers :
12 15 18 22 25 30 35
Tableau trié : 12 15 18 22 25 30 35
Q1 : 15.00
Q3 : 30.00
IQR : 15.00

Points clés du code :

  • calculateQuartile() gère les tableaux de taille paire et impaire
  • Q1 est calculé au 25e percentile
  • Q3 est calculé au 75e percentile
  • L'IQR est calculé comme Q3 - Q1
  • Nous utilisons une interpolation linéaire pour les positions non entières

Affichage de l'IQR

Dans cette dernière étape, nous allons nous concentrer sur la mise en forme et la présentation des résultats de l'étendue interquartile (IQR) de manière claire et informative.

Ouvrez le fichier source précédent :

cd ~/project
nano iqr_calculation.c

Mettez à jour le code pour améliorer la sortie IQR et ajouter du texte descriptif :

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

#define MAX_SIZE 100

// Les fonctions précédentes restent les mêmes (compare et calculateQuartile)

int main() {
    int numbers[MAX_SIZE];
    int n, i;
    double q1, q3, iqr;

    // Effacement de l'écran pour une meilleure présentation
    printf("\033[2J\033[1;1H");

    // Introduction à l'IQR
    printf("Calculateur d'étendue interquartile (IQR)\n");
    printf("========================================\n\n");

    // Lecture du nombre d'éléments
    printf("Entrez le nombre d'éléments (max %d) : ", MAX_SIZE);
    scanf("%d", &n);

    // Saisie des éléments du tableau
    printf("Entrez %d entiers :\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Tri du tableau
    qsort(numbers, n, sizeof(int), compare);

    // Calcul des positions de Q1 et Q3
    double q1_pos = 0.25 * (n + 1);
    double q3_pos = 0.75 * (n + 1);

    // Calcul de Q1 et Q3
    q1 = calculateQuartile(numbers, n, q1_pos);
    q3 = calculateQuartile(numbers, n, q3_pos);

    // Calcul de l'IQR
    iqr = q3 - q1;

    // Sortie détaillée
    printf("\nRésultats de l'analyse des données\n");
    printf("--------------------\n");
    printf("Ensemble de données original : ");
    for (i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n\n");

    // Sortie IQR formatée
    printf("Analyse des quartiles :\n");
    printf("1er quartile (Q1) : %.2f\n", q1);
    printf("3e quartile (Q3) : %.2f\n", q3);
    printf("Étendue interquartile (IQR) : %.2f\n", iqr);

    // Interprétation de l'IQR
    printf("\nInterprétation :\n");
    printf("L'IQR représente l'étendue des 50 % centrale des données.\n");
    printf("Un IQR plus petit indique des données plus cohérentes,\n");
    printf("tandis qu'un IQR plus grand suggère plus de variabilité.\n");

    return 0;
}

Compilation du programme mis à jour :

gcc -o iqr_calculation iqr_calculation.c -lm

Exécution du programme et fourniture d'une entrée d'exemple :

./iqr_calculation

Sortie d'exemple :

Calculateur d'étendue interquartile (IQR)
========================================

Entrez le nombre d'éléments (max 100) : 7
Entrez 7 entiers :
12 15 18 22 25 30 35

Résultats de l'analyse des données
--------------------
Ensemble de données original : 12 15 18 22 25 30 35

Analyse des quartiles :
1er quartile (Q1) : 15.00
3e quartile (Q3) : 30.00
Étendue interquartile (IQR) : 15.00

Interprétation :
L'IQR représente l'étendue des 50 % centrale des données.
Un IQR plus petit indique des données plus cohérentes,
tandis qu'un IQR plus grand suggère plus de variabilité.

Améliorations clés :

  • Ajout d'une commande d'effacement de l'écran pour une meilleure présentation
  • Amélioration de la mise en forme de la sortie
  • Inclusion d'une interprétation de l'IQR
  • Conservation de la logique de calcul précédente

Résumé

Dans ce laboratoire, vous avez d'abord appris à lire et à trier un tableau de nombres en programmation C. Vous avez créé un fichier source C, écrit le code initial pour lire les éléments du tableau et les trier à l'aide de la fonction qsort(). Vous avez ensuite imprimé le tableau trié pour vérifier le processus de tri.

Ensuite, vous allez modifier le programme précédent pour calculer l'étendue interquartile (IQR) en déterminant les positions du premier quartile (Q1) et du troisième quartile (Q3), puis en calculant l'IQR comme Q3 - Q1. Enfin, vous afficherez l'IQR calculé.