
Лабораторная работа №12
.docxЛабораторная работа №12
«Формирование и обработка двумерных массивов»
Содержание
1 Условие задачи 3
2 Ход работы 4
2.1 Разработка блок-схем 4
2.2 Код программы 6
2.3 Тестирование 7
Список использованных источников 8
1 Условие задачи
Сформировать произвольный двумерный массив. Из положительных элементов массива N сформировать массив M[n, max], где max-максимальное число положительных элементов строки массива N, располагая их в строках массива M подряд. Записать нули на место отсутствующих элементов массива M. Вывести полученный массив.
Для выполнения задачи необходимо:
• Дополнить dll библиотеку функцией enter_mas2(int** mas, int n, int m), которая заполняет двумерный массив случайными значениями.
• Дополнить dll библиотеку функцией output_mas2(int** mas, int n, int m, DataGridView^ grid), которая выводит двумерный массив.
• Дополнить dll библиотеку функцией rezmas22(int** mas, int** rezmas22, int n, int m, int& max), которая будет сформировывать результирующий массив согласно условию выше.
• Разработать событийную функцию, которая вызывает окно ввода размера исходного двумерного массива, функцию генерации исходного двумерного массива enter_mas2(mas, n, m), функцию вывода исходного двумерного массива output_mas2(mas, n, m, dataGridView1), функцию вычисления результирующего массива rezmas22(mas, rezmas22, n, m, max), и функцию вывода результирующего массива output_mas2(rezmas22, n, max, dataGridView2) и далее удаляет исходный и результирующий массив.
2 Ход работы
2.1 Разработка блок-схем
Блок схема функции rezmas22 представлена на рисунке 1
Рисунок 1-Блок схема функции rezmas22, осуществляющей вычисление результирующего массива
Блок-схема событийной функции представлена на рисунке 2
Рисунок 2-Блок-схема событийной функции
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];
}
int sum = 0;
for (int s = 0; s < grid->ColumnCount; s++) {
sum += grid->Columns[s]->Width;
if (sum > 1300) grid->Width = 1300;
else grid->Width = sum;
}
int h = 0;
for (int s = 0; s < grid->RowCount; s++) {
h += grid->Rows[s]->Height;
if (h > 1300) grid->Height = 1300;
else grid->Height = h;
}
}
void Class1::rezmas22(int** mas, int** rezmas22, int n, int m, int& max) {
int k = 0;
max = 0;
int l = 0;
int f = m-1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (mas[i][j] > 0) {
k++;
}
}
if (k > max)
max = k;
k = 0;
}
for (int i = 0; i < n; i++) {
rezmas22[i] = new int[m];
for (int j = 0; j < m; j++) {
if (mas[i][j] > 0) {
rezmas22[i][l++] = mas[i][j];
}
else {
rezmas22[i][f--] = 0;
}
}
l = 0;
f = m-1;
}
}
Событийная
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int n, m, max;
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** rezmas22 = new int* [m];
DLL7::Class1::enter_mas2(mas, n, m);
DLL7::Class1::output_mas2(mas, n, m, dataGridView1);
DLL7::Class1::rezmas22(mas, rezmas22, n, m, max);
DLL7::Class1::output_mas2(rezmas22, n, max, dataGridView2);
for (int i = 0; i < n; i++)
delete[](mas[i]);
delete[] mas;
for (int i = 0; i < n; i++)
delete[](rezmas22[i]);
delete[] rezmas22;
}
2.3 Тестирование
Результат работы программы представлен на рисунке 3
Рисунок 3-Результат работы программы
Список использованных источников
1) ГОСТ 7.32.2017 Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления. – М.: Стандартинформ, 2017, - 27 с.