1. Задание на ЛР.
Из целочисленного массива Х(N) все четные элементы записать в массив Y(k). Удалить в массивах максимальные элементы. В программе написать функции: формирования массива Y, поиска номера максимального элемента, удаления элемента.
2. Описание основных структур данных и алгоритмов, используемых в работе
Память для массивов X, Y выделяется динамически, с использованием операции new.
Данные для массива X генерируются датчиком случайных чисел.
После этого, функция evenCount определяет число чётных чисел в массиве X. Это число определяет количество элементов в массиве Y, а функция evenCopy переносит чётные числа из массива X в массив Y.
Функция deleteMaxItem удаляет из массивов X, Y элементы, значения которых максимальны.
Функция printArray выводит на экран массивы X, Y до и после удаления элементов.
3. Описание интерфейса пользователя программы
После запуска программы, на экран отображается подсказка с просьбой ввести количество элементов массиве.
Input number of items:
После ввода числа, программа выполняет расчет и выводит на экран следующую информацию:
|
|
1. Элементы массива X – дважды. До и после удаления максимальных элементов.
2. Элементы массива Y – дважды. До и после удаления максимальных элементов.
4. Контрольный пример и результаты тестирования
Input number of items: 10
Array X before delete: 2 8 5 1 10 5 9 9 3 5
Array X after delete: 2 8 5 1 5 9 9 3 5
Array Y before delete: 2 8 10
Array Y after delete: 2 8
5. Листинг программы
#include <iostream>
#include <conio.h>
using namespace std;
void printArray(int p[], int k, char *nameArray); // Вывод элементов массива p на экран
bool isEven(int m); // Проверка числа m на чётность
int evenCount(int p[], int k); // Посчёт количества чётных элементов в
// массиве p
void evenCopy(int *x, int n, int *y); // Формирование массиа Y из чётных
// элементов массива X!!!
int maxValue(int p[], int k); // Поиск максимального значения в
// массиве
int maxCount(int p[], int k); // Посчёт количества максимальных
// элементов в массиве p
int indexMax(int p[], int k, int max); // Поиск индекса максимального элемента
// в массиве!!!
void deleteMaxItem(int p[], int &k); // Удаление из массива p элементов со
// значением max!!!
int main()
{
int n; // Размер массива X.
int m; // Количество чётных элементов в массиве X (Размер массива Y).
int i; // Счётчик цикла.
// Размер массива X
cout << "Input number of items: ";
cin >> n;
// Объявление и формирование массива X размера n
int *x = new int[n];
for (i=0; i<n; i++) x[i] = rand() % 10 + 1;
// Количество чётных элементов в массиве X
m = evenCount(x, n);
// Объявление и формирование массива Y размера m
int *y = new int[m];
evenCopy(x, n, y);
// Удаление из массива X максимальных элементов
printArray(x, n, "X before delete");
deleteMaxItem(x, n);
printArray(x, n, "X after delete");
// Удаление из массива Y максимальных элементов
printArray(y, m, "Y before delete");
|
|
deleteMaxItem(y, m);
printArray(y, m, "Y after delete");
delete [] x;
delete [] y;
_getch();
}
void printArray(int p[], int k, char *nameArray)
// Вывод элементов массива p на экран
// k - размер массива p
// nameArray - имя массива p
{
cout << endl << "Array " << nameArray << endl;
for (int i=0; i<k; i++) cout << p[i] << " ";
cout << endl;
}
bool isEven(int k)
// Проверка числа k на чётность
{
return k % 2 == 0;
}
int evenCount(int p[], int k)
// Подсчёт количества чётных элементов в массиве p
// k - размер массива p
{
int count = 0;
for (int i=0; i<k; i++)
if (isEven(p[i])) count++;
return count;
}
void evenCopy(int *x, int n, int *y)
// Копирование чётных элементов из массива X в массив Y
// n - размер массива X, m - размер массива Y
{
int i, j;
for (i = j = 0; i<n; i++)
if (isEven(x[i]))
y[j++] = x[i];
}
int maxValue(int p[], int k)
// Поиск максимального значения в массиве p
// k - размер массива p
{
int max = p[0];
for (int i=1; i<k; i++)
if (p[i] > max) max = p[i];
return max;
}
int indexMax(int p[], int k, int max)
// Поиск индекса максимального элемента в массиве p
// k - размер массива p
// max - максимальное значение в массиве p
{
int indexMax = -1;
for (int i=0; i<k; i++)
if (p[i] == max) {
indexMax = i;
break;
}
return indexMax;
}
void deleteMaxItem(int p[], int &k)
// Удаление из массива p элементов со значением max
// k - размер массива p
// max - максимальное значение в массиве p
{
int max = maxValue(p, k);
int j, i = indexMax(p, k, max);
while (i!= -1)
{
for (j=i+1; j<k; j++)
p[j-1] = p[j];
--k;
i = indexMax(p, k, max);
}
}