- •Министерство образования и науки Российской Федерации
- •Основы проектирования консольных приложений на языке Visual Basic
- •Требования к выполнению работ
- •Лабораторная работа №1
- •Задания
- •Порядок выполнения работы
- •Лабораторная работа №2
- •Задание (1 уровень)
- •Задание (2 уровень)
- •Задание (3 уровень)
- •Порядок выполнения работы первого уровня
- •Пояснения
- •Пояснения
- •Пояснения к выполнению задания второго уровня
- •Лабораторная работа №3
- •Задание (1 уровень)
- •Задание (2 уровень)
- •Задание (3 уровень)
- •Порядок выполнения задания (1 уровень)
- •Пояснения к выполнению задания второго уровня
- •Пояснения к выполнению задания третьего уровня
- •Лабораторная работа №4
- •Порядок выполнения работы (2 уровень)
- •Лабораторная работа №5
- •Порядок выполнения работы (II-III уровни)
- •Перечень вариантов заданий к лабораторной работе № 5
- •Список рекомендованной литературы
- •1. Зиборов в. Visual Basic 2010 на примерах / в. Зиборов - сПб: бхв-Петербург, 2010. - 336 с.
- •Содержание
Порядок выполнения работы (II-III уровни)
Задание II – III уровней требует использования в программе функции FUNCTION и/или процедуры SUB. Процедуры и функции применяются для выполнения повторяющихся задач и их можно вызывать из разных частей кода, поэтому их можно использовать в качестве элементарных структурных блоков при создании приложения. Структурирование кода с помощью процедур позволяют разбить программу на отдельные логические блоки. Отлаживать такие отдельные блоки легче, чем всю программу целиком. Кроме того, процедуры, разработанные для одной программы, можно в том же виде (или после внесения незначительных изменений) использовать в другой программе. Это помогает избежать дублирования кода.
Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:
Sub name [(список_аргументов)]
[здесь некий код]
[Exit Sub]
[здесь тоже может быть некий код]
End Sub
Всё, что заключено в квадратные скобки - является необязательным. Процедура возвращает управление вызывающему коду после завершения работы оператором End Sub или Exit Sub (досрочный выход из процедуры).
В большинстве случаев процедуре необходимо работать с различными данными при каждом ее вызове. Можно передать эти сведения в процедуру как часть вызова процедуры. Процедура определяет ноль или более параметров, каждый из которых представляет значение, ожидаемое ею для приема. Каждому параметру в определении процедуры соответствует аргумент в вызове процедуры. Аргумент представляет значение, которое передается соответствующему параметру в вызове данной процедуры. Список аргументов представляет собой набор элементов, каждый из которых имеет следующий вид:
[ByVal | ByRef] varname[( )] [As type]
Здесь указаны :
способ передачи значений аргументов (ByVal – передача значения аргумента, ByRef – передача указателя на адрес памяти, по которому размещается значение или массив значений аргумента),
Varname – имя передаваемого аргумента,
As type – тип данных, в соответствии с которым можно интерпретировать переданные значения аргументов.
Пример описания процедуры показан ниже:
Sub ShowMessage(message As String)
MsgBox message
End Sub
Здесь указано имя процедуры ShowMessage, содержащей один параметр с именем message, у которого тип данных String соответствует понятию текстовая строка.
Для вызова процедуры используется оператор Call. Пример вызова процедуры ShowMessage с одним параметром показан ниже:
Call ShowMessage ("Первая процедура").
Результатом выполнения такой процедуры будет вывод на экран сообщения: "Первая процедура". Здесь вызывается процедура ShowMessage, которой передаётся строка "Первая процедура". Фактически в процедуре происходит присвоение переменной message значения "Первая процедура". Далее происходит вызов функции MsgBox и вывод сообщения на экран. Если количество параметров, передаваемых при вызове процедуры не совпадёт с количеством параметров в объявлении процедуры, то Visual Basic сгенерирует ошибку.
Функция - это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:
Function имя функции (список_аргументов)] [As type]
[здесь некий код]
[имяфункции = выражение]
[Exit Function]
[здесь тоже может быть некий код]
[имяфункции = выражение]
End Function
Пример описания функции показан ниже:
Function Square(number As Integer) As Long
Square = number * number
End Function
Вызвать функцию можно так:
b = Square (5).
Здесь функция Square возвращает квадрат переданного ей параметра (значение переменной b будет равно 25).
1. Входные данные: двумерный массив A (N,M).
Выходные данные: наибольший элемент (AMAXN) в последней строке матрицы A, массив B(), элементы которого равны суммам соответствующих строк матрицы A, массив D(), элементы которого равны суммам соответствующих столбцов матрицы A.
2. Глобальная блок-схема.
Рис. 5.3. Блок-схема с использованием функций и процедур
3. Текст программы.
Module Module1
‘ Заголовок программной секции, относящейся к категории программных модулей
Sub Main()
‘ Заголовок программной секции, относящейся к категории головного модуля программы
Dim N, M, I, J As Integer
Dim A(,) As Single = {{7,-1,2,0}, {4,5,-3,1}, {-6,11,8,-4}}
‘ Явный способ задания двумерного массива А(,) с вещественными (Single) элементами, значения которым присваиваются после символа = построчно, то есть три строки по 4 элемента в каждой
N = A.GetUpperBound(0)
‘ Параметру N присвоено значение верхней границы 1-ой (0) размерности двумерного массива А(,)
M = A.GetUpperBound(1)
‘ Параметру M присвоено значение верхней границы 2-ой (1) размерности двумерного массива А(,)
Console.WriteLine("N={0} M={1}", N, M)
Console.WriteLine("Количество строк матрицы A равно N+1={0}", N + 1)
Console.WriteLine("Количество столбцов матрицы A равно M+1={0}", M + 1)
‘Количество строк (K1) и столбцов (K2) матрицы A равны, соответственно, N+1 и M+1, так как стандартная нумерация элементов ведется для строк с 0 до K1-1, для столбцов – с 0 до K2-1.
Dim B(N), D(M) As Single
Dim Z As Single
Z = AMAXN(N, M, A)
‘ Осуществляется обращение к процедуре – функции AMAXN(N, M, A)
Console.WriteLine("")
Console.WriteLine("НАИБОЛЬШИЙ ЭЛЕМЕНТ ПОСЛЕДНЕЙ СТРОКИ AMAXN ={0}", Z)
Console.WriteLine("")
Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТРОК МАТРИЦЫ A():")
Call BSUM(N, M, A, B)
‘ Осуществляется обращение к процедуре BSUM(N, M, A, B)
For I = 0 To N
Console.WriteLine("B({0})={1}", I, B(I))
Next I
Console.WriteLine("")
Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТОЛБЦОВ МАТРИЦЫ A():")
Call DSUM(N, M, A, D)
‘ Осуществляется обращение к процедуре DSUM(N, M, A, D)
For J = D.GetLowerBound(0) To M
Console.WriteLine("D({0})={1}", J, D(J))
Next J
Console.ReadLine()
EndSub
Function AMAXN(ByRef N As Integer, ByRef M As Integer, _
ByRef A(,) As Single) As Single
‘ Заголовок процедуры – функции AMAXN(N, M, A), при обращении к которой все аргументы (N, M, A) передаются по ссылке (ByRef), а сама функция возвращает в качестве результата вещественное число (Single)
Dim J As Integer
Dim MAX As Single
MAX = A(N, 0)
For J = 0 To M
If A(N, J) > MAX Then MAX = A(N, J)
Next J
AMAXN = MAX
‘ Осуществляется формирование результирующего значения функции AMAXN
EndFunction
‘ окончание текста программы для процедуры – функции
Sub BSUM(ByRef N As Integer, ByRef M As Integer, _
ByRef A(,) As Single, ByRef B() As Single)
‘ Заголовок процедуры BSUM(N, M, A, B), при обращении к которой все аргументы (N, M, A, B) передаются по ссылке (ByRef)
Dim I, J As Integer
Dim S As Single
For I = 0 To N
S = 0
‘ Переменной S присваивается начальное значение, равное 0.
For J = 0 To M
S = S + A(I, J)
‘ Значение переменной S увеличивается на величину, равную значению элемента A(I, J)
Next J
B(I) = S
‘ Элементу B(I) массива B() присваивается значение переменной S.
Next I
EndSub
‘ окончание текста программы для процедуры BSUM(N, M, A, B)
Sub DSUM(ByRef N As Integer, ByRef M As Integer, _
ByRef A(,) As Single, ByRef D() As Single)
‘ Заголовок процедуры DSUM(N, M, A, D), при обращении к которой все аргументы (N, M, A, D) передаются по ссылке (ByRef)
Dim I, J As Integer
Dim S As Single
For J = A.GetLowerBound(1) To M
S = 0
‘ Переменной S присваивается начальное значение, равное 0.
For I = A.GetLowerBound(0) To N
S = S + A(I, J)
‘ Значение переменной S увеличивается на величину, равную значению элемента A(I, J)
Next I
D(J) = S
‘ Элементу D(I) массива D() присваивается значение переменной S.
Next J
EndSub
‘ окончание текста программы для процедуры DSUM(N, M, A, D)
EndModule
‘ Конец программной секции, относящейся к категории программных модулей
4. Результаты работы программы аналогичны представленным на рис. 5.2.