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

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

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

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

«Работа с двумерными массивами»

Содержание

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

2 Ход работы 4

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

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

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

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

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

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

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

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

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

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

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

• Дополнить dll библиотеку функцией rezmas(int** mas, int* rezmas, int n, int m, int r, int& cnt), которая формирует новый массив, значения которого больше найденной разности.

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

• Разработать событийную функцию, которая вызывает функцию генерации массива enter_mas2(int** mas, int n, int m), вывода этого массива output_mas2(int** mas, int n, int m, DataGridView^ grid), вычисление разности произведения нечетных элементов главной диагонали и суммы положительных элементов побочной диагонали razn(int** mas, int n, int m), функцию создания нового массива с элементами меньше найденной разности rezmas(int** mas, int* rezmas, int n, int m, int r, int& cnt) и функцию вывода этого результирующего массива output_mas(int* mas, int n, DataGridView^ grid).

2 Ход работы

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

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

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

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

Рисунок 2-Блок-схема функции rezmas осуществляющей формирование нового массива из элементов больше найденной разности

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

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

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

DLL

namespace DLL7 {

void Class1::enter_mas2(int** mas, int n, int m){

srand(unsigned(time(NULL)));

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

{

mas[i] = new int[m];

for (int j = 0; j < m; j++)

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

}

}

void Class1::output_mas2(int** mas, int n, int m, DataGridView^ grid)

{

grid->ColumnCount = m + 1;

grid->RowCount = n + 1;

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

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

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

for (int j = 0; j < m; j++)

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

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

for (int j = 0; j < m; j++)

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

}

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::razn(int** mas, int n, int m) {

int pr = 1;

int sum = 0;

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

for (int j = 0; j < m; j++) {

if (i==j && mas[i][j] /2==0) {

pr = pr * mas[i][j];

}

if (i + j == n - 1 && mas[i][j] > 0) {

sum = sum + mas[i][j];

}

}

}

int r = pr - sum;

return r;

}

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

cnt = 0;

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

for (int j = 0; j < m; j++) {

if (mas[i][j] > r) {

rezmas[cnt] = mas[i][j];

cnt++;

}

}

}

}

}

Событийная

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

int n, m, r, cnt;

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

String^ w = Interaction::InputBox("Введите количество столбцов", "Ввод", "", -1, -1);

n = Convert::ToInt16(g);

m = Convert::ToInt16(w);

int** mas = new int * [n];

int* rezmas = new int[cnt];

DLL7::Class1::enter_mas2(mas, n, m);

DLL7::Class1::output_mas2(mas, n, m, dataGridView1);

r = DLL7::Class1::razn(mas, n, m);

MessageBox::Show("Разность = " + Convert::ToString(r),

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

DLL7::Class1::rezmas(mas, rezmas, n, m, r, cnt);

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

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

delete[](mas[i]);

delete[] mas;

delete[] rezmas;

}

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

Результат вывода исходного двумерного массива и вычисления разности представлен на рисунке 4

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

Результат вывода результирующего массива представлен на рисунке 5

Рисунок 5-Результат вывода результирующего массива

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

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