Программирование алгоритмов формирования и обработки двумерных массивов. ЗБИК2051_ГлиненкоАИ_ЛР7. Лабораторная работа 7 по теме Программиро ван ие а лгори тмов формирован ия и обработки д ву мерн ых масси вов
Скачать 1.39 Mb.
|
Мо ско вск ий Тех ническ ий Ун иверситет Связи и И нформати ки Лабораторная работа №7 по теме: «Программиро ван ие а лгори тмов формирован ия и обработки д ву мерн ых масси вов » Выполнил: Глиненко Арина Игоревна Вариант №3 Группа: БИК2051 Лектор к.т.н., доц.: Саркисова Ирина Олеговна Москва 2021 2 Общее задание Сформируйте произвольный двумерный массив L(m,m). Найдите в каждой строке наибольший элемент и поменяйте его местами с элементом главной диагонали. Создание блок-схемы 1) Перестановка максимума 2) Создание новой матрицы и главной диагонали в строке i=1; i *(b+i)=*(a+i) i=1; i 3 Разработка пр иложе ния 1 . Созд ание нового проекта 1) Запустить VS. 2) Выполнить команду Создать проект.... На экране появится диалоговое окно Создание проекта. 3) Выбрать шаблон CLR Приложения Windows Form и в диалоговом окне Создание проекта ввести в текстовом поле Имя (нижней части диалогового окна Создание проекта) имя проекта ЛР-ЯП-07-3 и указать местоположение файла проекта. 4) Щелкнуть на кнопке ОК диалогового окна Создание проекта. VS присвоит проекту имя ЛР-ЯП-07-3 и отобразит основное окно VS с различными панелями, среди которых присутствует окно конструктора форм с пустой формой Form1. Эта форма будет использоваться для создания интерфейса пользователя. 4 2. Разработка графического интерфейса пользователя 3. Таблица используемых объектов Тип объекта Класс объекта Свойство Значение свойства Форма Form Name Form1 Text Динамические двумерные массивы BackColor ActiveCaption Текстовое поле TextBox Name textM Текстовое поле TextBox Name textN Текстовое поле TextBox Name textA 5 Текстовое поле TextBox Name textB Список ListBox Name listBox1 Enabled False Список ListBox Name listBox2 Enabled False Кнопка Button Text Решение Кнопка Button Text Выход 4. Написание программного кода Текст заголовочного файла Header.h в котором прописаны прототипы функций. //Заголовочный файл "Header.h" using namespace System; using namespace System::Windows::Forms; int ** input( int m , int n , int a , int b ); bool GetInt( int &, TextBox ^, String ^); void output( int **, int m , int n , ListBox ^); int ** task( int **, int , int ); int * copy( int *, int , int ); void del( int **, int ); Текст файла GetPut.cpp содержащего функции ввода-вывода. //Файл ввода-вывода "GetPut.cpp" #include "Header.h" int ** input( int m , int n , int a , int b ) { int ** matr = new int *[ m ]; if ( a > b ) { int t = a ; a = b ; b = t; } Random ^ rnd = gcnew Random ; for ( int i = 0; i < m ; i++) { *(matr + i) = new int [ n ]; for ( int j = 0; j < n ; j++) *(*(matr + i) + j) = rnd->Next( a , b ); } return matr; } void output( int ** mas , int m , int n , ListBox ^ Lb ) { Lb ->Items->Clear(); for ( int i = 0; i < m ; i++) { String ^ s = "" ; for ( int j = 0; j < n ; j++) s = s + String ::Format( "{0,-5:D2}" , *(*( mas + i) + j)); Lb ->Items->Add(s); } } 6 bool GetInt( int & x , TextBox ^ Tx , String ^ s ) { if ( Tx ->Text->Length == 0) { MessageBox ::Show( s , "Ошибка ввода" , MessageBoxButtons :: OK , MessageBoxIcon :: Error ); Tx ->Focus(); return false ; } x = Convert ::ToInt16( Tx ->Text); return true ; } void del( int ** a , int m ) { for ( int i = 0; i < m ; i++) delete [] * ( a + i); delete [] a ; } Текст файла task.cpp с функцией нахождения локального минимума и присвоения значений новому массиву. //Файл функции "task.cpp" #include "Header.h" int * copy( int * a , int n , int m ) { int * b = new int [ n ]; for ( int i = 0; i < n ; i++) *(b + i) = *( a + i); int max = 0; int p = 0; for ( int i = 0; i < n ; i++) if (b[i] > max) { p = i; max = b[p]; } int o = b[ m ]; b[ m ] = a [p]; b[p] = o; return b; } int ** task( int ** matr , int m , int n ) { int ** newmas = new int *[ m ]; for ( int i = 0; i < m ; i++) *(newmas + i) = copy(*( matr + i), n , i); return newmas; } Часть текста файла MyForm.h после #pragma endregion с описанием событийных процедур. #pragma endregion private : System:: Void button1_Click(System:: Object ^ sender , System:: EventArgs ^ e ) { listBox1->Items->Clear(); listBox2->Items->Clear(); int m, n; int a, b; if (!GetInt(m, textM, "Введите число строк матрицы" )) return ; 7 if (!GetInt(n, textN, "Введите число столбцов матрицы" )) return ; if (!GetInt(a, textA, "Введите левую границу диапазона" )) return ; if (!GetInt(b, textB, "Введите правую границу диапазона" )) return ; int ** matr = input(m, n, a, b); output(matr, m, n, listBox1); int ** newmas = task(matr, m, n); if (newmas) { output(newmas,m, n, listBox2); } else MessageBox ::Show( "Новый массив не создан" ); del(matr, m); } private : System:: Void button2_Click(System:: Object ^ sender , System:: EventArgs ^ e ) { this ->Close(); } 5. Результат работы программы 8 При ошибке ввода данных. |