Постановка задачи:
Напишите программу, находящую медиану массива. То есть индекс ячейки массива, сумма элементов слева от которой минимально отличается от суммы элементов справа.
Особенности программы:
- Обработка ошибок;
- Работа с файлами + проверка на запрещённые ОС Windows имена (con, nul, aux, com1...);
- Модульные тесты;
- Зацикленный интерфейс
Работа содержит:
- Отчёт по лабораторной работе;
- Код программы + комментарии.
- Проект в Visual Studio(С++).
Отчёт по лабораторной работе содержит:
- Постановка задачи;
- Исходные данные, подаваемые программе;
- Особые ситуации;
- Математические методы и алгоритмы решения задачи;
- Форматы представления данных в программе;
- Структура программы;
- Описание хода выполнения лабораторной работы;
- Исходный код программы.
Общий алгоритм выполнения программы:
Предлагается выбрать команду(1-Ввод с клавиатуры, 2- Ввод из файла, 3-Модульное тестирование):
- При выборе ввода с клавиатуры необходимо ввести длину массива и ввести сам массив, после чего программа выведет индекс медианы массива.
- При выборе ввода из файла необходимо указать путь к файлу(ознакомиться с особыми ситуациями из отчёта). В самом файле первое входное число отвечает за длину считываемого массива, остальное - сам массив.
- Модульные тесты подразумевают корректное выполнение программы.
Часть кода:
// Функция определяет позиции медиан массива; // Параметра: *arr-массив, size-размер массива; void MedianArray(int *arr, int size) { // Находим min и max массива, // чтобы получить наибольшую разность; int max = -1; int min = arr[0]; int left_sum = 0; int right_sum = 0; for (int i = 1;i < size - 1;i++) { // Минимальная разность left_sum = 0; right_sum = 0; for (int j = 0;j < i;j++) left_sum += arr[j]; for (int k = i + 1;k < size;k++) right_sum += arr[k]; if (abs(left_sum - right_sum) >= max) max = abs(left_sum - right_sum); } for (int i = 1;i < size - 1;i++) { left_sum = 0; right_sum = 0; for (int j = 0;j < i;j++) left_sum += arr[j]; for (int k = i + 1;k < size;k++) right_sum += arr[k]; if (abs(left_sum - right_sum) <= max) max = abs(left_sum - right_sum); } cout << endl << "The median of the array has an index:" << endl; for (int i = 1;i < size - 1;i++) { left_sum = 0; right_sum = 0; for (int j = 0;j < i;j++) left_sum += arr[j]; for (int k = i + 1;k < size;k++) right_sum += arr[k]; if (abs(left_sum - right_sum) == max) cout << i << " "; } }
kostyaLem