Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabRabKonsPrilozh_2011.docx
Скачиваний:
207
Добавлен:
08.04.2015
Размер:
2.96 Mб
Скачать

Порядок выполнения работы (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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]