Добавил:
Я и кто? Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №2

.docx
Скачиваний:
0
Добавлен:
02.02.2023
Размер:
137.15 Кб
Скачать

Лабораторная работа №2 «Алгоритмы обработки одномерных массивов»

Содержание

1. Условие задачи 3

2. Ход работы 4

2.1 Разработка блок-схем 4

2.2 Код программы 9

2.3 Тестирование 11

Список использованных источников 12

  1. Условие задачи

Разработать функцию, которая будет заполнять массив случайными числами, найти количество пар соседних элементов массива в диапазоне от -100 до 100, произведение которых нечетно, а сумма положительна. Разработать функцию, которая формирует новый массив, значения которых делятся на найденное число без остатка. Разработать функцию, которая выводит исходный и результирующий массивы в базу данных. Разработать функции, которые будут производить: удаление элемента из одномерного массива, производить вставку элемента в одномерный массив, определять монотонность массива и находить первый отрицательный элемент.

Для выполнения задачи необходимо:

• Создать новую dll библиотеку.

• Дополнить dll библиотеку функцией enter_mas(int* mas, int n), которая генерирует случайные значения массива на промежутке от -100 до 100.

• Дополнить dll библиотеку функцией output_mas(int* mas, int n, DataGridView^ grid), которая будет выводить массив.

Дополнить dll библиотеку функцией output(double c, TextBox^ t), которая будет выводить номер первого отрицательного элемента. • Дополнить dll библиотеку функцией kolvo(int *mas, int n), которая будет находить количество пар соседних элементов произведение которых нечетно, а сумма положительна.

•Дополнить dll библиотеку функцией delite_mas(int* rezmas, int cnt, int k, int& j), которая будет удалять выбранный элемент массива

•Дополнить dll библиотеку функцией vstavka(int* rezmas, int cnt, int k, int m, int& l), которая будет производить вставку заданного элемента в заданную ячейку.

•Дополнить dll библиотеку функцией mono(int* rezmas, int cnt), которая будет определять монотонность массива.

•Дополнить dll библиотеку функцией func(int* rezmas, int cnt), которая будет определять номер первого отрицательного элемента в массиве.

•Разработать событийную функцию, которая вызывает функцию генерации массива enter_mas(mas, n), функцию создания результирующего массива rezmas(mas, rezmas, n, k, cnt), функцию вывода массива output_mas(int* mas, int n, DataGridView^ grid), функцию удаления элемента массива delite_mas(int* rezmas, int cnt, int k, int& j), функцию вставки значения в массив vstavka(int* rezmas, int cnt, int k, int m, int& l), функцию определения монотонности mono(int* rezmas, int cnt), функцию определения первого отрицательного значения в массиве func(int* rezmas, int cnt), функцию output(double c, TextBox^ t), выводящую номер первого отрицательного элемента в массиве.

  1. Ход работы

    1. Разработка блок-схем

Блок-схема функции delite_mas представлена на рисунке 1.

Рисунок 1-Блок-схема функции delite_mas, осуществляющая удаление элемента массива

Блок-схема функции vstavka представлена на рисунке 2

Рисунок 2-Блок-схема функции vstavka

Блок-схема функции mono представлена на рисунке 3

Рисунок 3-Блок-схема функции mono

Блок-схема функции func представлена на рисунке 4

Рисунок 4-Блок-схема функции func

Блок-схема событийной функции представлена на рисунке 5

Рисунок 5-Блок-схема событийной функции

    1. Код программы

{

public:

static void enter_mas(int* mas, int n);

public:

static void output_mas(int* mas, int n, DataGridView^ grid);

public:

static int kolvo(int* mas, int n);

public:

static void rezmas(int* mas, int* rezmas, int n, int k, int& m);

static void delite_mas(int* rezmas, int n, int k, int& j);

static void vstavka(int* rezmas, int cnt, int k, int m, int& l);

static int mono(int* rezmas, int cnt);

static int func(int* rezmas, int cnt);

static void output(double c, TextBox^ t);

};

}

void Class1::enter_mas(int* mas, int n) {

for (int i = 0; i < n; i++)

mas[i] = (int)(rand() % 200) - 100;

}

void Class1::output_mas(int* mas, int n, DataGridView^ grid) {

grid->ColumnCount = n;

grid->RowCount = 2;

for (int i = 0; i < n; i++) {

grid->Rows[0]->Cells[i]->Value = "[" + i + "]";

grid->Rows[1]->Cells[i]->Value = mas[i];

}

int sum = 0;

for (int s = 0; s < grid->ColumnCount; s++) {

sum += grid->Columns[s]->Width;

if (sum > 410) grid->Width = 410;

else grid->Width = sum;

}

}

int Class1::kolvo(int* mas, int n) {

int k = 0;

for (int i = 0; i < n; i++)

if (((mas[i] * mas[i + 1] % 2) != 0) && ((mas[i] + mas[i + 1]) > 0))

k = k + 1;

return k;

}

void Class1::rezmas(int* mas, int* rezmas, int n, int k, int& m) {

int cnt = 0;

for (int i = 0; i < n; i++) {

if (mas[i] % k == 0) {

rezmas[cnt] = mas[i];

cnt = cnt + 1;

}

m = cnt;

}

}

void Class1::delite_mas(int* rezmas, int cnt, int k, int& j) {

for (int i = k; i < cnt - 1; i++) {

rezmas[i] = rezmas[i + 1];

}

j = cnt - 1;

}

void Class1::vstavka(int* rezmas, int cnt, int k, int m, int& l) {

for (int i = cnt; i > k - 1; i--) {

rezmas[i + 1] = rezmas[i];

}

rezmas[k + 1] = m;

l = cnt + 1;

}

int Class1::mono(int* rezmas, int cnt) {

int i = 0;

int flag = 1;

while (i < cnt - 1 && flag == 1) {

if (rezmas[i] >= rezmas[i + 1])

i = i + 1;

else flag = 0;

}

return flag;

}

int Class1::func(int* rezmas, int cnt) {

int i = 0;

int flag = 0;

while (i <= cnt && flag == 0) {

if (rezmas[i] < 0)

flag = 1;

else

i = i + 1;

}

return i;

}

void Class1::output(double c, TextBox^ t) {

t->Text = Convert::ToString(c);

}

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

int n, k, cnt, del, j, m, v, l, flag, i;

String^ g = Interaction::InputBox("Введите количество элементов в массиве", "Ввод", "", -1, -1);

String^ L = Interaction::InputBox("Введите номер элемента массива для удаления", "Ввод", "", -1, -1);

String^ q = Interaction::InputBox("Введите номер элемента массива для вставки", "Ввод", "", -1, -1);

String^ w = Interaction::InputBox("Введите элемент массива, который вы хотите вставить", "Ввод", "", -1, -1);

n = Convert::ToInt16(g);

del = Convert::ToInt16(L);

v = Convert::ToInt16(q);

m = Convert::ToInt16(w);

int* mas = new int[n];

int* rezmas = new int[n];

DLL5::Class1::enter_mas(mas, n);

k = DLL5::Class1::kolvo(mas, n);

MessageBox::Show("Количество элементов = " + Convert::ToString(k),

" ", MessageBoxButtons::OK, MessageBoxIcon::Asterisk);

DLL5::Class1::rezmas(mas, rezmas, n, k, cnt);

DLL5::Class1::output_mas(mas, n, dataGridView1);

DLL5::Class1::output_mas(rezmas, cnt, dataGridView2);

DLL5::Class1::delite_mas(rezmas, cnt, del, j);

DLL5::Class1::output_mas(rezmas, j, dataGridView3);

DLL5::Class1::vstavka(rezmas, j, v, m, l);

DLL5::Class1::output_mas(rezmas, l, dataGridView4);

flag=DLL5::Class1::mono(rezmas, l);

if (flag == 1)

label1->Text = "Монотонна";

else

label1->Text = "Немонотонна";

i = DLL5::Class1::func(rezmas, l);

DLL5::Class1::output(i, textBox1);

delete[] rezmas;

delete[] mas;

}

    1. Тестирование

Результаты правильности работы проекта представлены на рисунке 6

Рисунок 6-Результат работы программы

Список использованных источников

1) ГОСТ 7.32.2017 Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления. – М.: Стандартинформ, 2017, - 27 с.