Введение
В этом лабораторном практикуме вы научитесь вычислять медиану набора данных на языке программирования C. Практикум охватывает следующие этапы: чтение и сортировка массива чисел, нахождение среднего элемента или среднего арифметического двух средних элементов, и вывод медианы. Пошаговые инструкции проведут вас через процесс реализации этих задач с использованием языка программирования C, включая функции для чтения, сортировки и вывода массива. Этот практикум предоставляет практический подход к пониманию и применению методов статистического анализа на языке C.
Чтение и сортировка массива
В этом шаге вы узнаете, как читать массив чисел и сортировать его в подготовке к вычислению медианы. Мы будем использовать язык программирования C для выполнения этой задачи.
Сначала создадим файл на C для реализации чтения и сортировки массива:
cd ~/project
nano median_calculator.c
Теперь добавьте следующий код в файл:
#include <stdio.h>
#define MAX_SIZE 100
// Функция для чтения элементов массива
void readArray(int arr[], int *n) {
printf("Введите количество элементов (макс. %d): ", MAX_SIZE);
scanf("%d", n);
printf("Введите %d элементов:\n", *n);
for (int i = 0; i < *n; i++) {
scanf("%d", &arr[i]);
}
}
// Функция для сортировки массива с помощью алгоритма пузырьковой сортировки
void sortArray(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// Обмен элементов
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// Функция для вывода массива
void printArray(int arr[], int n) {
printf("Отсортированный массив: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
return 0;
}
Компилируем и запускаем программу:
gcc median_calculator.c -o median_calculator
./median_calculator
Пример вывода:
Введите количество элементов (макс. 100): 5
Введите 5 элементов:
42
15
7
23
11
Отсортированный массив: 7 11 15 23 42
Давайте разберем код:
- Функция
readArray()позволяет пользователю ввести элементы массива. - Функция
sortArray()использует алгоритм пузырьковой сортировки для упорядочения элементов в порядке возрастания. - Функция
printArray()отображает отсортированный массив. - Функция
main()связывает эти функции вместе.
Алгоритм пузырьковой сортировки имеет сложность O(n²), что просто в понимании, но не является наиболее эффективным для больших наборов данных.
Нахождение среднего элемента или среднего арифметического двух средних
В этом шаге вы расширите предыдущую программу для вычисления медианы, найдя средний элемент или среднее арифметическое двух средних элементов в отсортированном массиве.
Откройте существующий файл и измените код:
cd ~/project
nano median_calculator.c
Обновите код новой функцией для вычисления медианы:
#include <stdio.h>
#define MAX_SIZE 100
// Предыдущие функции (readArray, sortArray, printArray) остаются без изменений
// Новая функция для вычисления медианы
float calculateMedian(int arr[], int n) {
// Если количество элементов нечетное, вернуть средний элемент
if (n % 2 != 0) {
return arr[n / 2];
}
// Если количество элементов четное, вернуть среднее арифметическое двух средних элементов
int mid1 = arr[(n / 2) - 1];
int mid2 = arr[n / 2];
return (mid1 + mid2) / 2.0;
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
// Вычислить и вывести медиану
float median = calculateMedian(arr, n);
printf("Медиана: %.2f\n", median);
return 0;
}
Компилируем и запускаем обновленную программу:
gcc median_calculator.c -o median_calculator
./median_calculator
Пример вывода для нечетного количества элементов:
Введите количество элементов (макс. 100): 5
Введите 5 элементов:
42
15
7
23
11
Отсортированный массив: 7 11 15 23 42
Медиана: 15.00
Пример вывода для четного количества элементов:
Введите количество элементов (макс. 100): 6
Введите 6 элементов:
42
15
7
23
11
8
Отсортированный массив: 7 8 11 15 23 42
Медиана: 13.00
Ключевые моменты вычисления медианы:
- Для нечетного количества элементов медиана — это средний элемент.
- Для четного количества элементов медиана — это среднее арифметическое двух средних элементов.
- Массив должен быть отсортирован перед вычислением медианы.
Функция calculateMedian() обрабатывает оба случая:
- Использует целочисленное деление для нахождения индекса среднего элемента.
- Проверяет, является ли количество элементов нечетным или четным.
- Возвращает соответствующее значение медианы.
Вывод Медианы
В этом заключительном шаге вы улучшите программу вычисления медианы, чтобы предоставить более подробный вывод и продемонстрировать различные способы представления медианы.
Откройте существующий файл для внесения окончательных изменений:
cd ~/project
nano median_calculator.c
Обновите код, улучшив форматирование вывода:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// Предыдущие функции (readArray, sortArray, printArray, calculateMedian) остаются без изменений
void printDetailedMedianInfo(int arr[], int n, float median) {
printf("\n--- Подробности вычисления медианы ---\n");
printf("Общее количество элементов: %d\n", n);
printf("Элементы массива: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n\nВычисление медианы:\n");
if (n % 2 != 0) {
printf("Нечетное количество элементов\n");
printf("Индекс среднего элемента: %d\n", n / 2);
printf("Средний элемент: %d\n", arr[n / 2]);
} else {
printf("Четное количество элементов\n");
printf("Два индекса средних элементов: %d и %d\n", (n / 2) - 1, n / 2);
printf("Средние элементы: %d и %d\n", arr[(n / 2) - 1], arr[n / 2]);
}
printf("\nОкончательная медиана: %.2f\n", median);
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
float median = calculateMedian(arr, n);
// Вывод отсортированного массива
printArray(arr, n);
// Вывод подробной информации о медиане
printDetailedMedianInfo(arr, n, median);
return 0;
}
Компилируем и запускаем обновленную программу:
gcc median_calculator.c -o median_calculator
./median_calculator
Пример вывода для нечетного количества элементов:
Введите количество элементов (макс. 100): 5
Введите 5 элементов:
42
15
7
23
11
Отсортированный массив: 7 11 15 23 42
--- Подробности вычисления медианы ---
Общее количество элементов: 5
Элементы массива: 7 11 15 23 42
Вычисление медианы:
Нечетное количество элементов
Индекс среднего элемента: 2
Средний элемент: 15
Окончательная медиана: 15.00
Пример вывода для четного количества элементов:
Введите количество элементов (макс. 100): 6
Введите 6 элементов:
42
15
7
23
11
8
Отсортированный массив: 7 8 11 15 23 42
--- Подробности вычисления медианы ---
Общее количество элементов: 6
Элементы массива: 7 8 11 15 23 42
Вычисление медианы:
Четное количество элементов
Два индекса средних элементов: 2 и 3
Средние элементы: 11 и 15
Окончательная медиана: 13.00
Основные улучшения в этом шаге:
- Добавлена новая функция
printDetailedMedianInfo(). - Предоставлена исчерпывающая информация о вычислении медианы.
- Показаны различные сценарии для нечетного и четного количества элементов.
- Улучшено понимание пользователем вычисления медианы.
Резюме
В этом лабораторном практикуме вы изучили, как читать массив чисел, сортировать их с помощью алгоритма сортировки пузырьком и подготовить данные для вычисления медианы. Отсортированный массив затем выводится на консоль, демонстрируя успешное выполнение первого этапа. Алгоритм сортировки пузырьком, хотя и прост для понимания, имеет временную сложность O(n²), что может быть не самым эффективным для больших наборов данных. Следующие шаги будут сосредоточены на нахождении медианы отсортированного массива.
Следующий этап включает в себя определение среднего элемента или среднего арифметического двух средних элементов, в зависимости от размера массива. Этот шаг обеспечит точное вычисление и представление медианы пользователю.



