Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть_1.doc
Скачиваний:
23
Добавлен:
20.04.2015
Размер:
462.85 Кб
Скачать

4.3. Подпрограммы и их использование для написания сложных программ

4.3.1. Назначение подпрограмм

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

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

4.3.2. Типы подпрограмм

Основными типами подпрограмм являются подпрограмма общего вида SUBи подпрограмма-функцияFUNCTION. Необходимыми элементами подпрограммы, кроме указания типа (SUBилиFUNCTION), являются имя подпрограммы и список переменных, с которыми она работает. При этом главная программа, как было показано в предыдущих примерах, также имеет формальный видSub:

Private Sub Command1_Click()

Текст программы

End Sub

Оформление подпрограммы состоит из двух компонент:

а) Вызов подпрограммы по формату:

CallИмя (Список переменных) – для подпрограмм типаSub. Возможен также вызов без словаCall.

Переменная = Имя (Список переменных) - для подпрограмм типа Function.

в) Текст подпрограммы, который заключен между следующими двумя строками:

Sub(илиFunction) Имя (Список переменных)

Текст подпрограммы

EndSub(илиFunction)

Как было сказано выше, подпрограммы обмениваются между собой и с главной программой значениями переменных. Различие между типами SubиFunctionсостоит в том, что подпрограммаSubможет передавать значения многих переменных, а подпрограммаFunction– только одной переменной: значения функции. Употребление двух типов вызвано желанием ускорить обмен информацией:Functionимеет преимущество передSub, если нужно передать значение только одной переменной.

В приведенном ниже примере показано употребление обоих типов.

Пример 4.4. Текстовый файлvector.txtсодержит исходные данные – три строки по десять чисел. Из первой строки числа поочередно присваиваются элементам массивовa(i) иb(i), так что в массивеaсодержатся числа от 1 до 5, а в массивеb– числа от 11 до 15. ПодпрограммаFUNCTIONsumabвычисляет сумму произведенийa(i)*b(i) (то есть скалярное произведение указанных векторов) и передает эту сумму в главную программу через свое имя –sumab. Значение суммы присваивается переменнойsum. ПодпрограммаSUBvectorcпроизводит массивc, элементы которого вычисляются по формулеc(i)=a(i)+b(i).

Числа из второй и третьей строк файла vector.datприсваиваются соответственно элементам массивовa1(i) иb1(i) (каждый из массивовa1иb1 состоит из десяти элементов). С числамиa1(i) иb1(i) производятся те же операции, что и раньше с числамиa(i) иb(i). При этом сумма произведенийa1(i)*b1(i) присваивается переменнойsum1, а суммыa(i)+b(i) присваиваются элементам массиваc1.

Файл vector.txt

1,11,2,12,3,13,4,14,5,15

6,7,8,9,10,21,22,23,24,25

31,32,33,34,35,36,37,38,39,40

Dim a(1 To 5) As Integer: Dim b(1 To 5) As Integer: Dim c(1 To 5) As Integer

Dim a1(1 To 10) As Integer: Dim b1(1 To 10) As Integer: Dim c1(1 To 10) As Integer

Dim n1 As Integer: Dim n2 As Integer

Private Sub Command1_Click()

'Пример 4_4

'Файл vector.txt

'1,11,2,12,3,13,4,14,5,15

'6,7,8,9,10,21,22,23,24,25

'31,32,33,34,35,36,37,38,39,40

'Открытие файла для ввода

Open "F:\Tout_le_VB6\My_files\inp\vector.txt" For Input As #1

Print "Входные данные"

For i = 1 To 5

Input #1, a(i) 'Ввод 1-й строки

Input #1, b(i)

Print a(i), b(i) ‘ Это сигнальный вывод

Next i

Print "============================"

For i = 1 To 10

Input #1, a1(i) ' Ввод 2-й строки

Print a1(i);

Next i

Print

Print "******************************************"

For i = 1 To 10

Input #1, b1(i) ' Ввод 3-й строки

Print b1(i);

Next i

Print

Print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"

n1 = 5: n2 = 10

Sum1 = sumab(a, b, n1) 'Вызов FUNCTION sumab

Sum2 = sumab(a1, b1, n2)

vectorc a, b, c, n1 'Вызов SUB vectorc

vectorc a1, b1, c1, n2

Print "++++++++++++++++++++++++++++++"

'Вывод результатов на экран (в форму)

Print "Sum1="; Sum1, "Sum2="; Sum2

Print "Вектор c _________"

For i = 1 To 5

Print c(i);

Next i

Print

Print "Вектор c1 _______________________"

For i = 1 To 10

Print c1(i);

Next i

End Sub

'Тексты подпрограмм

Private Function sumab(u, v, n) As Integer

Dim s As Integer

s = 0

For i = 1 To n

s = s + u(i) * v(i)

Next i

sumab = s

End Function

Private Sub vectorc(u, v, w, n)

For i = 1 To n

w(i) = u(i) + v(i)

Next i

End Sub

Результат работы программы на экране

+++++++++++++++

205 5710

12 14 16 18 20

37 39 41 43 45 57 59 61 63 65

Вызов Subв этом примере сделан без словаCall. Но кажется, что это не очень эстетично. Обратите внимание на форму описания типов переменных. Часть из них имеют описание вне текста главной программы.

Пример 4.5. Это еще один пример передачи информации в подпрограмму. Подпрограмма SUB b (с передачей информации через список параметров) вычисляет элементы массива d (вектор d) по формуле: d(i) = k*a(i)+q*y.

Здесь элементы вектора a(i) вводятся присваиванием в тексте, число k вводится с помощью InputBox, значение q присваивается в тексте программы, а число у задано в списке фактических параметров (равно 5).

Private Sub Command1_Click()

'ПРИМЕР 4_5

'Главная программа

Dim a(3) As Integer: Dim d(3) As Integer

Dim k As Integer: Dim q As Integer

Cls

Open "F:\Tout_le_VB6\My_files\out\out4_5.txt" For Output As #1

a(1) = 1: a(2) = 2: a(3) = 3

Print #1, Spc(10);

Print #1, "Вектор a() ----------"

Print #1, Spc(20);

For i = 1 To 3: Print #1, a(i);: Next i: Print #1,

k = InputBox("k= ")

q = 2

Print #1, "k="; k; " q="; q

b 5, a, k, d, q 'Операция: d(i)=a(i)*k+q*y – вызов подпрограммы

Print #1, Spc(10);

Print #1, "Вектор d() ----------"

Print #1, Spc(20);

For i = 1 To 3: Print #1, d(i);: Next i

End Sub

Private Sub b(y, a, k, d, q)

'Подпрограмма

For i = 1 To 3: d(i) = k * a(i) + q * y: Next i

End Sub