Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_VB_ч_1_МГУС.doc
Скачиваний:
45
Добавлен:
23.08.2019
Размер:
1.41 Mб
Скачать

Задание № 7. Программирование двумерных массивов

Постановка задачи

Вычислить сумму элементов столбцов двумерного массива MN(m1, n1) (матрицы).

Анализ задачи

Анализ постановки задачи показывает, что в алгоритме задачи должны быть элементы циклической структуры. Исходные данные – размерность массива m1 и n1, значения элементов массива MN(m1, n1). Результирующие данные – суммы столбцов, количество которых равно n1.

Алгоритм задачи

Для реализации цикла используем оператор цикла For … Next. Чтобы задача позволяла работать с двумерными массивами (матрицами) любой размерности предусматриваем ввод размерности матрицы. После этого матрицу, которую сначала объявляем как безразмерную, снова переопределяем.

З атем, используя вложенные циклы, вводим значение элементов матрицы по строкам с помощью окна ввода InputBox() и сразу выводим их на форму для контроля.

Просматривая элементы матрицы с помощью вложенных циклов For…Next по столбцам, определяем суммы элементов столбцов и сохраняем их в одномерном массиве размерности n1 (по числу столбцов матрицы).

Используя оператор цикла, выдаем суммы элементов всех столбцов матрицы.

Блок-схема алгоритма изображена на рис. 7.1.

Разработка пользовательского интерфейса

Один из вариантов разработки интерфейса формы может быть таким, каким изображен на рис. 7.2.

Откройте приложение Visual Basic и создайте новый проект, следуя технологии, изложенной в задании № 1. Проект сохраните в своей папке под именем Матрица_СвоиИнициалы.vbp.

Введите Имя (Name) формы frmMatr, а Название (Caption) – Сумма строк матрицы. Затем разработайте интерфейс новой формы.

Интерфейс связан с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

Ввод исходных данных. Ввод размерности массива m1 и n1 проще всего осуществлять с помощью двух Текстовых полей, Этикетка Введите размерность матрицы перед этими текстовыми полями, Этикетка x и Этикетка Матрица. Ввод элементов массива сделайте с помощью функции InputBox.

Блок вычислений. Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одну Кнопку с названием Выход необходимо построить на форме для завершения работы с формой.

Вывод результатов. Поскольку после ввода элементов матрицы они должны быть выданы для контроля на форму, а их количество не постоянное, то предусмотреть на форме постоянное место для вычисляемых конечных значений не представляется возможным. Переменным будет и количество вычисленных сумм строк матрицы. Поэтому выдачу этих величин на форму необходимо предусмотреть в программе.

Таким образом, на форме frmMatr должны быть объекты и их свойства, представленные в табл.7.1.

Таблица 7.1

Объект

Свойство

Установленное значение

Label1

Caption

Введите размерность матрицы:

BackColor

Светло-коричневый (из палитры)

ForeColor

Темно-коричневый (из палитры)

Label2

Caption

Матрица

BackColor

Голубой (из палитры)

ForeColor

Темно-синий (из палитры)

Label3

Caption

x

Text1

Имя

txtM1

Text

Пусто (для ввода m1)

Text2

Имя

txtN1

Text

Пусто (для ввода n1)

Command1

Имя

cmdВвод

Caption

Ввод элементов матрицы

Command2

Имя

cmdВычислить

Caption

Сумма элементов столбцов

Command3

Имя

cmdВыход

Caption

Выход

Для свойства Font всех надписей на Label и Command выберите размер шрифта в 10 пунктов.

Написание программного кода

Перед написанием программного кода в процедурах следует определить, какие переменные в этом проекте будут глобальными (Public). Поскольку ввод элементов матрицы и вычисления сумм элементов строк будет происходить в разных процедурах, то двумерный массив MN(m1, n1) должен быть объявлен как глобальный в стандартном блоке формы. Для этого в открывшемся Окне написания кода в разделе (General) ниже слов Option Explicit (явный выбор) введите Dim MN() As Double.

Для события Click кнопки cmdВвод (Ввод элементов матрицы) напишите следующий код:

Private Sub cmdВвод_Click()

Dim i As Integer, j As Integer

Dim m1 As Integer, n1 As Integer

m1 = Val(txtM1.Text)

n1 = Val(txtN1.Text)

‘переопределение массива MN():

ReDim MN(m1, n1) As Double

Cls ‘ чистка формы от вывода данных оператором Print

CurrentX = 200 ‘ координаты подбираются X, Y

CurrentY = 1500

For i = 1 To m1

For j = 1 To n1

MN(i, j) = Val(InputBox("Введите элемент MN(" _

& i & "," & j & ")", "Ввод матрицы", , 3700, 5050))

MN(i, j) = Format(MN(i, j), "0000.##;-0000.##")

Print " "; MN(i, j); " ";

Next j

Print

Next i

End Sub

Для события Click кнопки cmdВычислить (Сумма элементов столбцов) напишите следующий код:

Private Sub cmdВычислить_Click()

Dim s As Integer, i As Integer, j As Integer

Dim m1 As Integer, n1 As Integer, su() As Double

m1 = Val(txtM1.Text)

n1 = Val(txtN1.Text)

ReDim su(n1) As Double

For i = 1 To n1

su(i) = 0

For j = 1 To m1

su(i) = su(i) + MN(i, j)

Next j

Next i

Print

Print

Font.Size = 10 ‘ выбор размер шрифта 10 пунктов

Print " ";

Font.Underline = True ‘ ввод текста с подчеркиванием

Print "Сумма элементов:"

Font.Underline = False ‘ отмена ввода текста с

‘ подчеркиванием

For i = 1 To n1

Print “ “; i; " столбца = "; Format(su(i), "0.##")

Next i

End Sub

Для события Click кнопки cmdВыход (Выход) напишите следующий код:

Private Sub Command3_Click()

Unload Me ‘Закрытие формы frmMatr

End Sub

Изменение программного кода

Вычислительные задачи требуют соблюдения определенного порядка работы с элементами управления. В этой задаче необходимо сначала ввести размерность матрицы, затем элементы матрицы и только после этого можно вычислять сумму столбцов. Если этот порядок будет нарушен, то может быть аварийный останов задачи. Избежать этого можно, если сначала заблокировать кнопки, а затем, в нужные моменты, их разблокировать. Такая блокировка, например, для кнопки cmdВвод, осуществляется командой

cmdВвод.Enabled = False,

а разблокировка –

cmdВвод.Enabled = True

Самостоятельно сделайте следующие изменения проекта.

  1. В окне Свойств для кнопок Command1 и Command2 свойству Enabled задать значения False.

  2. Для текстового поля txtN1 написать процедуру Private Sub txtN1_LostFocus() (LostFocus – событие поля Потеря фокуса). В процедуре запрограммировать следующий алгоритм. Если текстовые поля txtM1 и txtN1 не пустые, то разблокировать кнопку cmdВвод (Ввод элементов матрицы) и установите на ней фокус, используя метод SetFocus, для чего напишите код cmdВвод. SetFocus

  3. В самом конце процедуры Private Sub cmdВвод_Click() записать код разблокирования кнопки cmdВычислить.

  4. В самом конце процедуры Private Sub cmdВычислить_Click() записать коды блокирования кнопок cmdВвод и cmdВычислить.

Если дополнения программы будут сделаны правильно, то после ввода размерности матрицы и нажатия клавиши Tab кнопка cmdВвод будет активизирована и получит фокус. Если же размерность не будет введена или введена не полностью, то после нажатия клавиши Tab кнопка cmdВвод разблокирована не будет, а фокус будет передан на кнопку END.