Лабораторная работа №9
«Базовые алгоритмы обработки двумерных массивов в Visual C++»
Y
1. Задание на лабораторную работу 3
2. Формализация 5
3. Заставка к лабораторной работе 6
4. Схема алгоритма решения задачи 7
5. Листинг программы 34
5.1 Листинг основной программы 34
.2 Листинг dll библиотеки 38
6 Тестирование программы 49
Список использованной литературы: 58
Задача: Разработать проект с двумя формами. Первая форма – заставка к приложению, вторая – решение задания лабораторной работы. Заставка в первой форме должна быть реализована при помощи надписи. Кроме этого разработать функцию entermas1, Del, kiks1, MaxMatrix, ProizvDvuhMatrix, NahodNumberMin, SmenColumn и outputmas типа void, которые будут находиться в dll библиотеке.
Дана целочисленный матрица, элементы которой могут принимать неотрицательные целые значения до 10000 включительно. Необходимо определить количество четных и нечетных чисел. Если количество четных чисел больше, чем количество нечетных, заменить каждое нечетное число на произведение нечетных цифр в его десятичной записи. Если количество нечетных чисел больше, заменить каждое четное число на произведение четных цифр в его десятичной записи. В качестве результата необходимо вывести измененную матрицу. Кроме этого нужно разработать алгоритмы: нахождение наибольшего элемента массива и его индексов, произведение двух матриц, нахождение номера столбца с наименьшим значением среди всех элементов массива, обмен столбцов матрицы
Для выполнения лабораторной работы требуется разработать:
Заставку в первой форме, которая должна быть реализована при помощи надписи.
Функцию kiks1 типа void с параметрами (int** a, int len), в которой будет происходить основные вычисления программы: нахождения количества четных и нечетных элементов, а также подсчет всех перемноженных значений четных цифр и отдельно нечетных цифр.
Функцию MaxMatrix() типа void с параметрами (int** arr, int len, int len1, int& ki, int& kj), в которой будет происходить нахождение наибольшего элемента матрицы и его индексов.
Функцию ProizvDvuhMatrix с параметрами (int** arr, int** arr1, int** rezmas, int len, int len2), в которой будет происходить произведение матриц.
Функцию NahodNumberMin с параметрами (int** arr, int m, int n, int& f), в которой будет происходить нахождение номера столбца с наименьшим значением среди всех элементов матрицы.
Функцию SmenColumn с параметрами (int** mass, int** mass3, int rowCount, int columnCount, int d, int f), в которой будет происходить смена столбцов матрицы.
Функцию Del типа void с параметрами (int** arr, int m), в которой будет происходить очищение памяти от данных матрицы.
Функцию outputmas1 типа void с параметрами (int** arr, int n, int m), в которой будет происходить вывод матрицы, а также будут вноситься дополнительные под настройки для datagridview1.
Функцию entermas1 типа void с параметрами (int** arr, int n, int m), в которой будет происходить генерация матрицы.
Разработать dll библиотеку, в которой будут находиться функция: kiks1, outputmas1, entermas1, Del.
Событийную button2_Click в которой будет происходить считывание данных через MessageBox и генерация матрицы, а также будет происходить запуск функции kiks1, Del и outputmas1.
Событийную button1_Click в которой будет происходить считывание данных через MessageBox и генерация матрицы, а также будет происходить запуск функции kiks1, Del, MaxMatrix,Vivod и outputmas1.
Событийную button3_Click в которой будет происходить считывание данных через MessageBox и генерация матрицы, а также будет происходить запуск функции kiks1, Del,ProizvDvuhMatrix и outputmas1.
Событийную button4_Click в которой будет происходить считывание данных через MessageBox и генерация матрицы, а также будет происходить запуск функции kiks1, Del,NahodNumberMin,Vivod и outputmas1.
Событийную button5_Click в которой будет происходить считывание данных через MessageBox и генерация матрицы, а также будет происходить запуск функции kiks1, Del, SmenColum и outputmas1.
В функции kiks1 происходят вычисления по определенным значение параметрам типа int «a», «n», «m», «i», «j», «CH», «NCH», «countCH», «countNCH», где «a» переменная матрицы
«dgv» - переменная типа DataGridView функции kiks1.
«dgv1» - переменная типа DataGridView функции outputmas1.
«width» - переменная типа int функции outputmas1.
«arr», «len», «len1», «ki», «kj», «im», «jm», «xm», «i», «j», - переменная типа int функции MaxMatrix.
«arr», «arr1», «rezmas», «len», «len2», «s», «i», «j», «r», - переменная типа int функции ProizvDvuhMatrix.
«arr», «m», «n», «f», «minitem», «i», «j», - переменная типа int функции NahodNumberMin.
«mass», «mass3», «rowCount», «columnCount», «d», «f», «n», «i», «j», - переменная типа int функции SmenColumn.
«arr», «n», «m», «n», - переменная типа int функции entermas1.
Заставка к
лабораторной работе №9 (рисунок 1).
Рисунок 1 – Заставка к лабораторной работе №9
Схема алгоритма решения задачи
Рисунок 2 – Схема алгоритма функции outputmas1 ()
Рисунок 3 – Схема алгоритма функции kiks ()
Рисунок 4– Схема алгоритма функции entermas1
Рисунок 5– Схема алгоритма функции Del
Рисунок 6– Схема алгоритма функции MaxMatrix
Рисунок 7– Схема алгоритма функции ProizvDvuhMatrix
Рисунок 8– Схема алгоритма функции NahodNumberMin
Рисунок 9– Схема алгоритма функции SmenColumn.
Рисунок 10– Схема алгоритма событийной Button2_Click
Рисунок 11– Схема алгоритма событийной Button2_Click
Рисунок 12– Схема алгоритма событийной Button3_Click
Рисунок 13– Схема алгоритма событийной Button4_Click
Рисунок 14– Схема алгоритма событийной Button4_Click
#pragma once
namespace someProject {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm4
/// </summary>
public ref class MyForm4 : public System::Windows::Forms::Form
{
public:
MyForm4(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~MyForm4()
{
if (components)
{
delete components;
}
}
#pragma endregion
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
label5->Text = "Результирующий массив (Лаб 8)";
String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
String^ а = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
int m = Convert::ToInt16(а);
int n = Convert::ToInt16(g);
int t = m * n;
int** b = new int* [t];
SomeProjectDLL::Class1::entermas1(b, n,m);
SomeProjectDLL::Class1::outputmas1(b, n,m, dataGridView1);
SomeProjectDLL::Class1::kiks1(b,n,m);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView2);
SomeProjectDLL::Class1::Del(b, m);
}
private: System::Void MyForm8_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void dataGridView2_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
label5->Text = "Нахождение наибольшего элемента массива и его интексов";
String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
String^ а = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
int ki = 0;
int kj = 0;
int m = Convert::ToInt16(а);
int n = Convert::ToInt16(g);
int t = m * n;
int** b = new int* [t];
SomeProjectDLL::Class1::entermas1(b, n, m);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView1);
SomeProjectDLL::Class1::kiks1(b, n, m);
SomeProjectDLL::Class1::MaxMatrix(b, m,n,ki,kj);
SomeProjectDLL::Class1::outputmas1(b,n,m,dataGridView2);
SomeProjectDLL::Class1::Del(b, m);
SomeProjectDLL::Class1::Vivod(ki, textBox1);
SomeProjectDLL::Class1::Vivod(kj, textBox2);
}
private: System::Void label5_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
label5->Text = "Произведение двух матриц";
String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov dlya 1 mas", "vivod", " ", -1, -1);
String^ а = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov dlya 1 mas", "vivod", " ", -1, -1);
String^ g1 = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov dlya 2 mas", "vivod", " ", -1, -1);
String^ а1 = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov dlya 2 mas", "vivod", " ", -1, -1);
int m = Convert::ToInt16(а);
int n = Convert::ToInt16(g);
int m1 = Convert::ToInt16(а1);
int n1 = Convert::ToInt16(g1);
int t = m * n;
int t1 = m1* n1;
int** b = new int* [t];
int** b1 = new int* [t1];
SomeProjectDLL::Class1::entermas1(b, n, m);
SomeProjectDLL::Class1::entermas1(b1, n1, m1);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView1);
SomeProjectDLL::Class1::outputmas1(b1, n1, m1, dataGridView3);
SomeProjectDLL::Class1::kiks1(b, n, m);
SomeProjectDLL::Class1::kiks1(b1, n1, m1);
SomeProjectDLL::Class1::ProizvDvuhMatrix(b,b1,b1,n,n1);
SomeProjectDLL::Class1::outputmas1(b1, n, m, dataGridView2);
SomeProjectDLL::Class1::Del(b, m);
SomeProjectDLL::Class1::Del(b1, m);
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
label5->Text = "Нахождение номера столбца с наименьшим значением среди всех элементов массива ";
String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
String^ а = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
int f = 0;
int m = Convert::ToInt16(а);
int n = Convert::ToInt16(g);
int t = m * n;
int** b = new int* [t];
SomeProjectDLL::Class1::entermas1(b, n, m);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView1);
SomeProjectDLL::Class1::kiks1(b, n, m);
SomeProjectDLL::Class1::NahodNumberMin(b,m,n,f);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView2);
SomeProjectDLL::Class1::Del(b, m);
SomeProjectDLL::Class1::Vivod(f, textBox3);
}
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {
label5->Text = "Обмен столбцов матрицы";
String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
String^ а = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);
String^ а1 = Microsoft::VisualBasic::Interaction::InputBox("VVdeite 1 stolbec, kotoriy nushno pomenat", "vivod", " ", -1, -1);
String^ a2 = Microsoft::VisualBasic::Interaction::InputBox("VVdeite 2 stolbec, kotoriy nushno pomenat", "vivod", " ", -1, -1);
int m = Convert::ToInt16(а);
int n = Convert::ToInt16(g);
int m1 = Convert::ToInt16(а1);
int m2 = Convert::ToInt16(a2);
int t = m * n;
int** b = new int* [t];
SomeProjectDLL::Class1::entermas1(b, n, m);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView1);
SomeProjectDLL::Class1::kiks1(b, n, m);
SomeProjectDLL::Class1::SmenColumn(b,b,n,m,m1,m2);
SomeProjectDLL::Class1::outputmas1(b, n, m, dataGridView2);
SomeProjectDLL::Class1::Del(b, m);
}}
}