Q1- und Q3-Positionen ermitteln und IQR = Q3 - Q1 berechnen
In diesem Schritt erweitern wir das vorherige Programm, um den Interquartilsabstand (IQR) zu berechnen, indem wir die Positionen von Q1 und Q3 ermitteln.
Öffnen Sie die vorherige Quelldatei:
cd ~/project
nano iqr_calculation.c
Aktualisieren Sie den Code, um den IQR zu berechnen:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// Funktion zum Vergleichen von ganzen Zahlen für qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
// Funktion zur Berechnung von Q1 und 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;
// Anzahl der Elemente einlesen
printf("Geben Sie die Anzahl der Elemente ein (max %d): ", MAX_SIZE);
scanf("%d", &n);
// Arrayelemente eingeben
printf("Geben Sie %d ganze Zahlen ein:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// Array sortieren
qsort(numbers, n, sizeof(int), compare);
// Positionen von Q1 und Q3 berechnen
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Q1 und Q3 berechnen
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// IQR berechnen
iqr = q3 - q1;
// Ergebnisse ausgeben
printf("Sortiertes Array: ");
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;
}
Kompilieren Sie das aktualisierte Programm:
gcc -o iqr_calculation iqr_calculation.c -lm
Führen Sie das Programm aus und geben Sie einen Beispieleintrag ein:
./iqr_calculation
Beispielausgabe:
Geben Sie die Anzahl der Elemente ein (max 100): 7
Geben Sie 7 ganze Zahlen ein:
12 15 18 22 25 30 35
Sortiertes Array: 12 15 18 22 25 30 35
Q1: 15.00
Q3: 30.00
IQR: 15.00
Wichtige Punkte im Code:
calculateQuartile()
verarbeitet Arrays mit gerader und ungerader Größe.
- Q1 wird am 25. Perzentil berechnet.
- Q3 wird am 75. Perzentil berechnet.
- IQR wird als Q3 - Q1 berechnet.
- Für nicht ganzzahlige Positionen wird eine lineare Interpolation verwendet.