Отчёт по лабораторной работе

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);

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: