Определение Моды Набора Данных на C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме вы узнаете, как определить моду (моду) набора данных на языке C. Практикум охватывает следующие этапы:

Чтение массива чисел: Вы научитесь читать массив чисел на языке C, что является первым важным шагом в определении моды набора данных. Программа позволяет ввести набор чисел и подготовить их для анализа частоты.

Подсчёт частот для нахождения наиболее часто встречающегося значения: Вы измените предыдущую программу, чтобы подсчитать частоты каждого числа в массиве и определить наиболее часто встречающееся значение (моду).

Вывод моды: Наконец, вы выведете моду, которая представляет собой значение, наиболее часто встречающееся в наборе данных.

Чтение массива чисел

В этом шаге вы узнаете, как читать массив чисел на языке C, что является первым важным шагом в определении моды набора данных. Мы создадим программу на C, которая позволяет ввести набор чисел и подготовить их для анализа частоты.

Сначала создадим новый файл C для нашей программы вычисления моды:

cd ~/project
nano mode_calculation.c

Теперь добавьте следующий код в файл:

#include <stdio.h>

#define MAX_SIZE 100

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

    // Ввод количества элементов
    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &n);

    // Ввод элементов массива
    printf("Enter %d integers:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Вывод введённого массива для проверки ввода
    printf("Entered array: ");
    for (i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    return 0;
}

Компилируем и запускаем программу:

gcc mode_calculation.c -o mode_calculation
./mode_calculation

Пример вывода:

Enter the number of elements (max 100): 5
Enter 5 integers:
3 4 2 4 1
Entered array: 3 4 2 4 1

Давайте разберём ключевые части этого кода:

  1. #define MAX_SIZE 100 устанавливает максимальный размер массива для предотвращения переполнения.
  2. scanf() используется для ввода количества элементов и значений массива.
  3. Мы выводим массив, чтобы убедиться, что входные данные были правильно получены.

Этот код демонстрирует базовый ввод массива в C, что необходимо для нашего процесса вычисления моды. В следующих шагах мы будем использовать это для подсчёта частот и определения моды.

Подсчёт частот для нахождения наиболее часто встречающегося значения

В этом шаге мы изменим нашу предыдущую программу, чтобы подсчитать частоты каждого числа в массиве и определить наиболее часто встречающееся значение (моду).

Откройте существующий файл и обновите код:

cd ~/project
nano mode_calculation.c

Замените предыдущий код следующим:

#include <stdio.h>

#define MAX_SIZE 100

int main() {
    int numbers[MAX_SIZE];
    int frequencies[MAX_SIZE] = {0};
    int n, i, j, mode = 0, max_frequency = 0;

    // Ввод количества элементов
    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &n);

    // Ввод элементов массива
    printf("Enter %d integers:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Подсчёт частот каждого числа
    for (i = 0; i < n; i++) {
        int count = 1;
        for (j = 0; j < n; j++) {
            if (i != j && numbers[i] == numbers[j]) {
                count++;
            }
        }
        frequencies[i] = count;

        // Отслеживание моды
        if (count > max_frequency) {
            max_frequency = count;
            mode = numbers[i];
        }
    }

    // Вывод частот
    printf("\nFrequencies:\n");
    for (i = 0; i < n; i++) {
        printf("Number %d appears %d time(s)\n", numbers[i], frequencies[i]);
    }

    // Вывод моды
    printf("\nMode: %d (appears %d times)\n", mode, max_frequency);

    return 0;
}

Компилируем и запускаем программу:

gcc mode_calculation.c -o mode_calculation
./mode_calculation

Пример вывода:

Enter the number of elements (max 100): 6
Enter 6 integers:
2 3 4 2 2 5

Frequencies:
2 appears 3 time(s)
3 appears 1 time(s)
4 appears 1 time(s)
2 appears 3 time(s)
2 appears 3 time(s)
5 appears 1 time(s)

Mode: 2 (appears 3 times)

Ключевые моменты этой реализации:

  1. Мы создаём массив frequencies, чтобы хранить количество каждого числа.
  2. Вложенные циклы подсчитывают количество вхождений каждого уникального числа.
  3. Мы отслеживаем моду, отслеживая максимальную частоту.
  4. Программа обрабатывает случаи с единственной модой.

Вывод Моды

В этом заключительном шаге мы улучшим нашу программу вычисления моды, чтобы она обрабатывала несколько мод и предоставляла более полную статистическую информацию.

Откройте существующий файл и обновите код:

cd ~/project
nano mode_calculation.c

Замените предыдущий код следующим:

#include <stdio.h>

#define MAX_SIZE 100

int main() {
    int numbers[MAX_SIZE];
    int frequencies[MAX_SIZE] = {0};
    int unique_numbers[MAX_SIZE];
    int n, i, j, unique_count = 0, max_frequency = 0;

    // Ввод количества элементов
    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &n);

    // Ввод элементов массива
    printf("Enter %d integers:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // Поиск уникальных чисел и их частот
    for (i = 0; i < n; i++) {
        int is_unique = 1;
        for (j = 0; j < unique_count; j++) {
            if (numbers[i] == unique_numbers[j]) {
                is_unique = 0;
                break;
            }
        }

        if (is_unique) {
            unique_numbers[unique_count] = numbers[i];

            // Подсчёт частоты для этого уникального числа
            int count = 0;
            for (j = 0; j < n; j++) {
                if (numbers[i] == numbers[j]) {
                    count++;
                }
            }
            frequencies[unique_count] = count;

            // Обновление максимальной частоты
            if (count > max_frequency) {
                max_frequency = count;
            }

            unique_count++;
        }
    }

    // Вывод подробной информации о моде
    printf("\nСтатистический анализ:\n");
    printf("Всего чисел: %d\n", n);
    printf("Уникальных чисел: %d\n", unique_count);

    printf("\nРаспределение частот:\n");
    for (i = 0; i < unique_count; i++) {
        printf("Число %d: %d раз(а)\n",
               unique_numbers[i], frequencies[i]);
    }

    // Вывод мод
    printf("\nМода(ы):\n");
    for (i = 0; i < unique_count; i++) {
        if (frequencies[i] == max_frequency) {
            printf("- %d (встречается %d раз(а))\n",
                   unique_numbers[i], frequencies[i]);
        }
    }

    return 0;
}

Компилируем и запускаем программу:

gcc mode_calculation.c -o mode_calculation
./mode_calculation

Пример вывода:

Enter the number of elements (max 100): 7
Enter 7 integers:
2 3 4 2 2 5 5

Статистический анализ:
Всего чисел: 7
Уникальных чисел: 4

Распределение частот:
Число 2: 3 раз(а)
Число 3: 1 раз(а)
Число 4: 1 раз(а)
Число 5: 2 раз(а)

Мода(ы):
- 2 (встречается 3 раза)

Основные улучшения в этой версии:

  1. Обрабатывает несколько мод, если они существуют.
  2. Предоставляет всесторонний статистический обзор.
  3. Определяет уникальные числа в наборе данных.
  4. Отображает распределение частот.

Резюме

В этом лабораторном практикуме вы научитесь вводить массив чисел в языке C и подсчитывать частоты каждого числа, чтобы определить моду — наиболее часто встречающееся значение в наборе данных. Сначала вы создадите программу на C, которая позволит ввести набор чисел и подготовить их для анализа частот. Затем вы измените программу, чтобы подсчитать частоты каждого числа и определить моду. Наконец, вы выведете моду на консоль.

Основные моменты, которые вы изучите в ходе выполнения этих шагов:

  1. Как вводить массив чисел в языке C с помощью функции scanf().
  2. Как вывести введённый массив для проверки ввода.
  3. Как подсчитать частоты каждого числа в массиве, чтобы найти наиболее часто встречающееся значение (моду).