Поиск медиан массива(C++)

Постановка задачи:

Напишите программу, находящую медиану массива. То есть индекс ячейки массива, сумма элементов слева от которой минимально отличается от суммы элементов справа.

Особенности программы:

  • Обработка ошибок;
  • Работа с файлами + проверка на запрещённые ОС 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 << " ";
    }
}

Присоединяйся

Зарегестрируйся с помощью социальных сетей.

Публикуй

Опиши работу, прикрепи файлы и назначь цену.

Зарабатывай

Получай пассивный доход с продажи работ.

Тебе понадобится 5 минут для публикации работы на сайте.
Купить

250,00 

(без учета комиссии 3,8 %)

Лаба №2.rar
8577524
Оцени работу

рейтинг

Поделись работой с друзьями

Мы не грузим циферки, чтоб ты увидел контент как можно быстрее;

Комментарии (0)

kostyaLem

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегестрированые пользователи имеют возможность комментировать работы
Поиск медиан массива(C++)
Напишите программу, находящую медиану массива. То есть индекс ячейки массива, сумма элементов слева от которой минимально отличается от суммы элементов справа.
Категория: Образование
Стоимость: 250,00