Задание № 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 проще всего осуществлять с помощью двух Текстовых полей, ЭтикеткаВведите размерность матрицы перед этими текстовыми полями, ЭтикеткаЭтикеткаМатрица. Ввод элементов массива сделайте с помощью функции 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 (явный выбор) введите Public 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(Text1.Text)

n1 = Val(Text2.Text)

ReDim MN(m1, n1) As Double ‘переопределение массива MN()

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(Text1.Text)

n1 = Val(Text2.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.








Дата добавления: 2015-02-05; просмотров: 1342;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.