Индексы в двумерном массиве указывают
1) первый - номер строки, второй – номер столбца
2) первый - номер столбца, второй – номер строки
3) не имеет значения
4) все зависит от программиста
Укажите размер данного двумерного массива A(2,3)
1) 6
2) 12
3) 2
Ввод и обработка двумерных массивов производится при использовании
1) вложенных разветвлений
2) вложенных процедур
3) вложенных циклов
4) любых конструкций языка программирования
Значениями параметров цикла в операторе For при вводе, обработке и выводе массивов являются
1) значения элементов массива
2) максимальные значения индексов массива
3) номера строк и столбцов
4) минимальные значения индексов массива
Если данные представлены в табличной форме, то для их обработки удобнее использовать
1) одномерный массив
2) двумерный массив
3) трехмерный массив
4) любой массив
Первый индекс в двумерном массиве указывает
1) номер столбца
2) номер строки
3) не имеет значения
4) все зависит от программиста
При вводе и обработке массива по столбцам внешний цикл должен быть организован
1) по любому из индексов
2) по второму индексу
3) по первому индексу
4) все зависит от программиста
Определите, как будет отображен двумерный массив после выполнения следующего фрагмента программы (2)
For i = 0 To 7 For j = 0 To 5 TextBox1.Text= TextBox1.Text &a(i) & ” ” Next j TextBox1.Text= TextBox1.Text & vbCrLf Next i |
1) в строку
2) в виде таблицы
3) в столбец
4) будет выдано сообщение об ошибке
Dim A (3,5) As Single
1) статический
2) динамический
3) фактический
4) вещественный
После выполнения программы на форму будет выведено значение
Dim a (0 To 3,0 To 4), i, j As Single For i = 0 To 3 For j = 0 To 4 a(i,j) = i*j Next j Next i TextBox1.Text = CStr(a(i,j)) |
1) сообщение об ошибке
2) 12
3) 20
4) 0
Фрагмент программы выполняет алгоритм (2)
For i =0 To 4 r = a(i,2) : a(i,2) = a(i,4) : a(i,4) = r Next i |
1) обмена элементов главной и побочной диагоналей
2) присваивания 2-ому и 4-ому столбцам одинаковых значений
3) обмена 2-го и 4-го столбцов матрицы
4) обмен 2-й и 4-й строк матрицы
Фрагмент программы выполняет операцию (2)
s = 0 For i = 0 To 5 For j = 0 To i -1 s = s + a(i,j) Next j Next i TextBox1.Text =”s=” & CStr(s) |
1) вывода суммы элементов ниже главной диагонали
2) вывода суммы элементов выше главной диагонали
3) вывода суммы элементов главной диагонали
4) вывода суммы элементов побочной диагонали
Фрагмент программы выполняет операцию (2)
For i = 0 To 5 For j = 0 To 5 If j Mod 2 = 0 Then a(i,j) = 0 End If Next j Next i |
1)заполнения четных строк нулями
2)заполнения нулями четных элементов матрицы
3)заполнения нулями элементов четных столбцов
4)обнуления элементов побочной диагонали
16.
4.8.4. Лабораторная работа по теме
«Программирование алгоритмов формирования и обработки двумерных массивов»
Цель работы:овладение практическими навыками разработки и программирования вычислительного процесса, связанного с программированием алгоритмов ввода, заполнения и вывода двумерных массивов, классических приемов обработки двумерных массивов.
Вопросы, подлежащие изучению
1)Способы описания двумерных массивов.
2)Способы задания значений элементам двумерного массива: присваиванием; инициализацией; вводом по запросу с клавиатуры; заполнением массива данных случайными числами в заданном диапазоне.
3)Использование вложенных циклов для ввода и вывода элементов двумерного массива.
4)Методы обработки элементов двумерного массива по строкам и по столбцам.
Общее задание на разработку проекта
1) Изучите вопросы программирование алгоритмов формирования и обработки двумерных массивов (Тема 8).
2) Создайте приложение с именем Проект-8.
3) Выберите вариант задания из таблицы табл. 4.8.4-1.
4) Разработайте графический интерфейс пользователя.
5) Разработайте схемы алгоритмов процедур пользователя в соответствии с индивидуальным заданием, предварительно проведя формализацию.
6) Напишите программный код процедур в соответствии с разработанными схемами алгоритмов.
7) Разработайте проект приложения, решающий поставленную задачу, который состоит из интерфейса пользователя и соответствующего программного кода, а также написанных ранее процедур обработки и процедур ввода и вывода элементов массива. Все пользовательские процедуры должны находиться в модуле формы. Обмен данными между пользовательскими процедурами должен осуществляться через параметры, без использования глобальных переменных.
8) Подготовьте массивы чисел для решения задачи, если исходные данные не заданы.
9) Выполните приложение и получите результат.
10) Докажите правильность результата.
Варианты индивидуальных заданий
Таблица 4.8.4-1
№ | Задача |
1) | Сформируйте произвольный двумерный массив N(10,10). Из положительных элементов массива N сформировать массив M(10,max), где max – максимальное число положительных элементов строки массива N, располагая их в строках массива M подряд. Запишите нули на место отсутствующих элементов массива M. Выведите полученный массив. |
2) | Сформируйте двумерный массив L(10,8) по правилу: где r – случайное число из отрезка [0;1]. Поменяйте местами левую и правую половины этого массива. Выведите полученный массив. |
3) | Сформируйте произвольный двумерный массив L(9,9). Найдите в каждой строке наибольший элемент и поменяйте его местами с элементом главной диагонали. Выведите полученный массив. |
4) | Сформируйте произвольный двумерный массив N(12,12) по правилу: Вычислите и выведите сумму и количество положительных элементов массива, находящихся под главной диагональю. Преобразуйте матрицу, уменьшив каждый ее элемент на найденную сумму. |
5) | Сформируйте двумерный массив N(15,10) из случайных чисел, принадлежащих отрезку [-5;10]. Найдите строки с наибольшей и наименьшей суммой элементов. Выведите найденные строки и суммы их элементов. |
6) | Сформируйте двумерный массив K(8,8) по правилу: Kij=8∙(i - j)+j. Транспонируйте массив (поменяйте местами строки и столбцы), и выведите элементы главной диагонали и диагонали, расположенной под главной, разместив их в двух строках экрана |
7) | Сформируйте двумерный массив K(6,3) по правилу , где r – случайное число из отрезка [0;1]. Получите и выведите массив L(6,3), получаемый из массива K перестановкой строк: первой с последней, второй с предпоследней и т.д. |
8) | Сформируйте произвольный двумерный массив N(12,12).Вычислите и выведите сумму и кол. положительных элементов массива, находящихся под побочной диагональю. Преобразуйте матрицу, увеличив каждый ее элемент на найденную сумму. |
9) | Сформируйте произвольный двумерный массив M(8,8). Найдите в каждой строке массива максимальный и минимальный элементы и поменять их местами соответственно с первым и последним элементами строки. Выведите полученный массив. |
10) | Сформируйте двумерный массив K(10,12) из случайных чисел, принадлежащих отрезку [-5;10]. Определите в каждом столбце количество простых чисел и запишите их в соответствующий элемент одномерного массива L.Выведите массив L. |
11) | Сформируйте произвольный двумерный массив L(7,9). Поменяйте местами левую верхнюю и правую нижнюю четверти матрицы. Выведите полученный массив. |
12) | Сформируйте двумерный массив М(4,5) по правилу: , где r – случайное число из отрезка [0;1]. Вставьте после столбца с заданным номером k (0<= k <=5) столбец из единиц (значение k вводится с клавиатуры). Выведите полученный массив M. |
13) | Сформируйте двумерный массив t(4,4) по правилу: Удалите из него столбцы, содержащие элементы, меньше, чем число 10. |
14) | Сформируйте произвольный двумерный массив Z(10,4). Вычислите максимальное значение суммы модулей элементов в столбцах массива и выведите этот столбец. |
15) | Сформируйте двумерный массив A(9,3) по правилу: . Определите наименьший элемент в каждой строке массива и запишите его в соответствующий элемент одномерного массива B. Выведите массив B. |
16) | Сформируйте двумерный массив M(6,5) из случайных чисел, принадлежащих отрезку [-15;5]. Преобразуйте массив перестановкой столбцов: первого с последним, второго с предпоследним и т.д. |
17) | Сформируйте произвольный двумерный массив B(4,4). Преобразуйте матрицу, перестановкой в каждой строке наибольшего по абсолютной величине элемента с диагональным. |
18) | Сформируйте произвольный двумерный массив N(10,10). Получите и выведите одномерный массив K(10), где Ki– наименьшее из значений элементов, находящихся в начале i-ой строки массива N до элемента, принадлежащего главной диагонали включительно. |
19) | Сформируйте произвольный двумерный массив X(4,4). Получите и выведите одномерный массив Y(4), где Yi – значение первого по порядку положительного элемента i-ой строки; если такого элемента нет, то примите Yi=1. |
20) | Сформируйте двумерный массив Z(10,3) из случайных чисел, принадлежащих отрезку [-2;15]. Получите и выведите одномерный массив P, где Pi – сумма элементов, расположенных за первым отрицательным элементом в i-й строке; если все элементы строки неотрицательны, то примите Pi=100. |
21) | Сформируйте произвольный двумерный массив F(10,3). Получите и выведите одномерный массив R, где Rj – сумма элементов, предшествующих последнему отрицательному элементу j-го столбца; если все элементы столбца неотрицательны, то примите Rj= -1. |
22) | Сформируйте произвольный двумерный массив R(8,3) Найдите и выведите значение и индексы элемента, являющегося одновременно наименьшим в своей строке и наибольшим в своем столбце. При отсутствии такого элемента выведите сообщение. |
23) | Сформируйте двумерный массив N(5,7) по правилу: Вставьте после строки с заданным номером k (0<= k <=5) строку из нулей (значение k вводится с клавиатуры). |
24) | Сформируйте произвольный двумерный массив M(5,7) Поменяйте местами строки, содержащие максимальный и минимальный элементы. Если минимум и максимум принадлежат одной строке, то поменяйте местами соответствующие столбцы. |
25) | Сформируйте произвольный двумерный массив K(8,4).Преобразуйте массив путем удаления из массива K строки и столбца, на пересечении которых находится наибольший элемент. |
26) | Сформируйте двумерный массив M(7,7) по правилу: , где r – случайное число из отрезка [0;1]. Введите одномерный массив K = {-5, -3, -1, 1, 3}. Замените нулями в массиве M те элементы, для которых имеются равные среди элементов массива K. Выведите полученный массив M. |
27) | Сформируйте произвольные двумерные массивы K(3,3) и L(3,3). Получите массив M путем прибавления к элементам каждого столбца массива K произведения элементов соответствующей строки массива L. Выведите массив M. |
28) | Сформируйте двумерный массив X(4,4) по правилу: . Вставьте столбец из единиц перед столбцом, содержащим минимальный элемент матрицы. |
29) | Сформируйте двумерный массив K(7,8) по правилу: где r – случайное число из отрезка [0;1]. Вставьте строку из нулей перед строкой, содержащей максимальный элемент матрицы. |
30) | Сформируйте произвольные двумерные массивы A(4,4) и B(4,4). Получите массив R(4,4) путем умножения элементов каждой строки массива A на наибольший из элементов соответствующей строки массива B. Выведите массив R. |
4.8.4.4.Содержание отчёта
1)Тема и название лабораторной работы.
2)Фамилия, имя студента, номер группы, номер варианта.
3)Задание на разработку проекта.
4)Формализация и уточнение задания.
5)Элементы, разрабатываемого проекта:
5.1) графический интерфейс пользователя;
5.2) таблица свойств объектов;
5.3) схема алгоритма решаемой задачи;
5.4) программный код проекта.
6)Результаты выполнения проектов.
7)Доказательство правильности работы программы.
Пример выполнения задания
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:
Заполнение и преобразование двумерного массива различными способами