1) Тема и название лабораторной работы:
Программирование алгоритмов формирования и обработки двумерных массивов.
Заполнение и преобразование двумерного массива различными
способами.
2) Фамилия, имя студента, номер группы, номер варианта:
Иванов И., БИН1405, вариант 13.
3) Задание на разработку проекта:
Введите двумерный массив натуральных чисел a(m,n) и, используя различные алгоритмы заполнения массива, сформируйте его. Обработайте сформированный массив, используя различные методы, и вычислите одну из характеристик сформированного массива.
4) Формализация и уточнение задания:
В разрабатываемом приложении ввод исходного массива может осуществляться одним из следующих способов:
· вводом с клавиатуры;
· с помощью датчика случайных чисел;
· формированием по формуле.
Обработка исходного массива осуществляться одним из вариантов:
· нахождение максимального элемента в двумерном массиве;
· нахождение суммы всех элементов двумерного массива;
· нахождение суммы элементов двумерного массива по строкам;
|
|
· нахождение суммы элементов двумерного массива по столбцам;
· нахождение суммы элементов главной диагонали двумерного массива;
· нахождение суммы элементов побочной диагонали двумерного массива.
5) Элементы, разрабатываемого проекта:
5.1) Графический интерфейс пользователя:
Форма приложения может иметь такой же вид, как на рис. 4.8.4-1.
Рис. П.1.8-1. Форма проекта Проект 8:
Заполнение и преобразование двумерного массива различными способами
5.2) Таблица свойств объектов:
Установите и сведите в табл. 4.8.4-2 свойства всех объектов.
Таблица. 4.8.4-2
Имя объекта | Свойство | Значение свойства |
Form1 | Text | Form1 |
Label3 | Font | Times New Roman, Bold (Жирный), 14-point (14 пунктов) |
ForeColor | Синий | |
Name | Label3 | |
Text | Изучение двумерных массивов | |
Label4 | Font | Times New Roman, Bold (Жирный), 10-point (10 пунктов) |
Name | Label4 | |
Text | Задание | |
Label5 | Font | Times New Roman, Bold (Жирный), 10-point (10 пунктов) |
Name | Label5 | |
Text | Ввести двумерный массив A(m, n) и преобразовать массив A(m,n), используя меню | |
Label6 | Font | Times New Roman, Bold (Жирный), 14-point (14 пунктов) |
ForeColor | Синий | |
Name | Label6 | |
Text | Исходный массив a(m,n) | |
Label7 | Font | Times New Roman, Bold (Жирный), 14-point (14 пунктов) |
ForeColor | Синий | |
Name | Label7 | |
Text | Результат: | |
Label8 | ForeColor | Red(Красный) |
Name | Label8 | |
Text | Задайте кол-во строк (m) и столбцов(n) массива | |
Label10 | Font | 10 пунктов |
Name | Label10 | |
Text | Заполнение массива | |
Label11 | AutoSize | False |
ForeColor | Синий | |
Name | Label11 | |
Text | Преобразование массива | |
Label12 | Font | Times New Roman, Bold (Жирный), 10-point (10 пунктов) |
Name | Label12 | |
Text | m= | |
Label13 | Font | Times New Roman, Bold (Жирный), 10-point (10 пунктов) |
Name | Label13 | |
Text | n= | |
ComboBox1 | Items (коллекция) | Ввод массива с клавиатуры Ввод массива по генератору случайных чисел Ввод массива по формуле |
Name | ComboBox1 | |
ComboBox2 | Items (коллекция) | Найти max элемент в массиве Найти сумму всех элементов Найти сумму элементов по строкам Найти сумму элементов по столбцам Найти сумму элементов главной диагонали Найти сумму элементов побочной диагонали |
Name | ComboBox2 | |
ListBox1 | Name | ListBox1 |
Text | ListBox1 | |
ListBox2 | Name | ListBox2 |
Text | ListBox2 | |
TextBox1 | Name | TextBox1 |
Text | ||
TextBox2 | Name | TextBox2 |
Text | ||
Button2 | Name | Button2 |
Text | Выход | |
Button3 | Name | Button3 |
Text | Повторить |
|
|
5.3) Схема алгоритма решаемой задачи:
Схемы отдельных алгоритмов представлены в Теме 4.8.
5.4) Программный код проекта:
Программный код проекта приведен на рис. 4.8.4-2
Public Class Form1 Dim a(,) As Integer 'Функция ввода данных (кол. строк и столбцов) из TextBox Function vvod(ByVal T As TextBox) As Integer Return CInt(T.Text) End Function 'Процедура вывода одномерного массива с заголовком z Sub PrintL(ByRef x() As Integer, ByVal z As String, _ ByRef LB As ListBox) Dim i As Integer LB.Items.Add(" ") LB.Items.Add(z) Dim y As String = "" For i = 0 To UBound(x) y = y + CStr(x(i)) + Space(4) Next i LB.Items.Add(y) End Sub ' Процедура вывода результата с заголовком z в ListBox Sub vivodlist(ByVal c As Integer, ByVal z As String, _ ByRef Lb As ListBox) Lb.Items.Add(" ") z = z + CStr(c) Lb.Items.Add(z) End Sub 'Процедура форматированного вывода матрицы в ListBox Sub PrintMatr(ByRef x(,) As Integer, ByRef LB As ListBox) Dim i, j, m, n As Integer Dim z, z1 As String m = x.GetLength(0) - 1 n = x.GetLength(1) - 1 LB.Items.Clear() For i = 0 To m z = "" For j = 0 To n z1 = Format(x(i, j), "000") If x(i, j) < 0 Then z1 = Space(2) + z1 Else z1 = Space(3) + z1 End If z = z + z1 Next j LB.Items.Add(z) Next i End Sub 'Процедура ввода матрицы (по индексу выбранной 'строки из ComboBox1) Sub vvodMatr(ByRef a(,) As Integer, _ ByVal index As Integer) Dim i, j, m, n As Integer Dim r1, r2 As String Dim y As String m = a.GetLength(0) - 1 n = a.GetLength(1) - 1 Select Case index Case 0 'Ввод элементов массива с клавиатуры For i = 0 To m For j = 0 To n r1 = Str(i): r2 = Str(j) y = InputBox("элемент массива a(" + r1 + _ "," + r2 + "=", _ "Ввод эначений элементов массива A()") a(i, j) = CInt(y) Next j Next i Case 1 'Формирование массива с помощью случайных чисел For i = 0 To m For j = 0 To n a(i, j) = CInt(Rnd(1) * 100 - 50) Next j Next Case 2 'Формирование массива по заданной формуле For i = 0 To m For j = 0 To n a(i, j) = (i + j) * 25 - 150 Next j Next i End Select End Sub ' Вычисление суммы эл-тов побочной диагонали матрицы Sub m5(ByRef a(,) As Integer, ByRef pob As Integer, _ ByRef flag As Integer) Dim RawCount, ColumnCount As Integer Dim i, mm, nn As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) pob = 0 flag = 0 mm = RawCount - 1 nn = ColumnCount - 1 If nn = mm Then For i = 0 To mm pob = pob + a(i, mm - i) Next i Else flag = 1 'количество строк и столбцов не равны End If End Sub ' Вычисление суммы эл-тов главной диагонали Sub m4(ByRef a(,) As Integer, ByRef Glav As Integer, _ ByRef flag As Integer) Dim RawCount, ColumnCount As Integer Dim i, nn, mm As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) Glav = 0 flag = 0 mm = RawCount - 1 nn = ColumnCount - 1 If nn = mm Then For i = 0 To mm Glav = Glav + a(i, i) Next i Else flag = 1 'количество строк и столбцов не равны End If End Sub 'Вычисление сумм элементов матрицы по столбцам ' (создание одномерного массива) Public Sub m3(ByRef a(,) As Integer, _ ByRef stolb() As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, nn, mm As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) mm = RawCount - 1 nn = ColumnCount - 1 ReDim stolb(0 To nn) For j = 0 To nn stolb(j) = 0 For i = 0 To mm stolb(j) = stolb(j) + a(i, j) Next i Next j End Sub ' Вычисление сумм элементов матрицы по строкам ' (создание одномерного массива) Public Sub m2(ByRef a(,) As Integer, _ ByRef strok() As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, mm, nn As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) mm = RawCount - 1 nn = ColumnCount - 1 ReDim strok(0 To mm) For i = 0 To mm strok(i) = 0 For j = 0 To nn strok(i) = strok(i) + a(i, j) Next j Next i End Sub ' Вычисление суммы всех элементов матрицы Public Sub m1(ByRef a(,) As Integer, ByRef sum As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, mm, nn As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) sum = 0 mm = RawCount - 1 nn = ColumnCount - 1 For i = 0 To mm For j = 0 To nn sum = sum + a(i, j) Next j Next i End Sub ' Поиск максимального элемента матрицы и его индексов Public Sub m0(ByRef a(,) As Integer, ByRef max As Integer,_ ByRef imax As Integer, ByRef jmax As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, nn, mm As Integer RawCount = a.GetLength(0) ColumnCount = a.GetLength(1) mm = RawCount - 1 nn = ColumnCount - 1 max = a(0, 0) imax = 0 jmax = 0 For i = 0 To mm For j = 0 To nn If a(i, j) > max Then max = a(i, j) imax = i jmax = j End If Next j Next i End Sub Private Sub Button1_Click(sender As Object, _ e As EventArgs) Handles Button1.Click ListBox1.Items.Clear() ListBox2.Items.Clear() TextBox1.Text = "" TextBox2.Text = "" End Sub Private Sub ComboBox1_SelectedIndexChanged _ (sender As Object, e As EventArgs) _ Handles ComboBox1.SelectedIndexChanged Dim index, m, n As Integer m = vvod(TextBox1) 'кол-во строк массива n = vvod(TextBox2) 'кол-во столбцов массива ReDim a(0 To m, 0 To n) ListBox1.Items.Clear() ListBox2.Items.Clear() index = ComboBox1.SelectedIndex 'индекс выбранного элемента из ComboBox1 ' (выбор способа ввода матрицы) vvodMatr(a, index) PrintMatr(a, ListBox1) End Sub Private Sub ComboBox2_SelectedIndexChanged _ (sender As Object, e As EventArgs) _ Handles ComboBox2.SelectedIndexChanged Dim s, f As Integer Dim imax, jmax As Integer Dim z As String = "" Dim mas() As Integer Select Case ComboBox2.SelectedIndex Case 0 ' Поиск максимального элемента в матрице m0(a, s, imax, jmax) z = " Max элемент массива а()=" vivodlist(s, z, ListBox2) z = " Номер строки элемента =" vivodlist(imax, z, ListBox2) z = " Номер столбца элемента =" vivodlist(jmax, z, ListBox2) Case 1 ' Вычисление суммы всех элементов массива m1(a, s) z = " Сумма элементов массива а()=" vivodlist(s, z, ListBox2) Case 2 ' Вычисление сумм элем. массива по строкам m2(a, mas) z = " Сумма по строкам массива а()=" PrintL(mas, z, ListBox2) Case 3 ' Вычисление сумм элем. массива по столбцам m3(a, mas) z = " Сумма элементов массива a() по столбцам " PrintL(mas, z, ListBox2) Case 4 ' Вычисление суммы элем.в главной диагонали m4(a, s, f) If f = 0 Then z = " Сумма элементов главной диагонали =" Else z = "Кол. строк не равно кол. столбцов" End If vivodlist(s, z, ListBox2) Case 5 ' Вычисление суммы элем. побочной диагонали m5(a, s, f) If f = 0 Then z = " Сумма элем. побочной диагонали =" Else z = "Кол. строк не равно кол. столбцов" End If vivodlist(s, z, ListBox2) End Select End Sub End Class |
|
|
Рис. 4.8.4-2. Программный код проекта Проект 4.8:
Заполнение и преобразование двумерного массива различными способами