
Лабораторная работа №2
.docxЛабораторная работа №2 «Алгоритмы обработки одномерных массивов»
Содержание
1. Условие задачи 3
2. Ход работы 4
2.1 Разработка блок-схем 4
2.2 Код программы 9
2.3 Тестирование 11
Список использованных источников 12
Условие задачи
Разработать функцию, которая будет заполнять массив случайными числами, найти количество пар соседних элементов массива в диапазоне от -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), выводящую номер первого отрицательного элемента в массиве.
Ход работы
Разработка блок-схем
Блок-схема функции delite_mas представлена на рисунке 1.
Рисунок 1-Блок-схема функции delite_mas, осуществляющая удаление элемента массива
Блок-схема функции vstavka представлена на рисунке 2
Рисунок 2-Блок-схема функции vstavka
Блок-схема функции mono представлена на рисунке 3
Рисунок 3-Блок-схема функции mono
Блок-схема функции func представлена на рисунке 4
Рисунок 4-Блок-схема функции func
Блок-схема событийной функции представлена на рисунке 5
Рисунок 5-Блок-схема событийной функции
Код программы
{
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;
}
Тестирование
Результаты правильности работы проекта представлены на рисунке 6
Рисунок 6-Результат работы программы
Список использованных источников
1) ГОСТ 7.32.2017 Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления. – М.: Стандартинформ, 2017, - 27 с.