Постановка задачи:
Напишите программу, находящую медиану массива. То есть индекс ячейки массива, сумма элементов слева от которой минимально отличается от суммы элементов справа.
Особенности программы:
- Обработка ошибок;
- Работа с файлами + проверка на запрещённые ОС 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 << " ";
}
}
Телеграм
-