Лабораторная работа №9
.docxЛабораторная работа №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 с.