
- •Информатика
- •Введение
- •1. Особенности вычислительного процесса в компьютере
- •1.1. Двоичная система счисления
- •1.2. Кодирование информации
- •2. Основы построения алгоритмов
- •2.1. Принципы описания алгоритмов
- •2.2. Примеры построения алгоритмов типовых задач
- •3. Вывод значений X и y
- •Конец цикла 2
- •3. Алгоритмический язык Visual Basic – основные сведения
- •3.1. Историческая справка
- •3.2. Среда программирования Visual Basic 6.0
- •3.3. Основные конструкции языка
- •3.3.1. Алфавит
- •3.3.2. Переменные
- •3.3.3. Константы
- •3.4. Типы переменных
- •3.4.1. Характеристики переменных
- •3.4.2. Способы задания типа
- •3.5. Основные функциональные операторы
- •3.5.1. Оператор присваивания.
- •3.5.2. Оператор условного перехода.
- •3.5.3. Операторы цикла.
- •3.6. Операторы ввода и вывода информации
- •3.6.1. Операторы ввода значений переменных с клавиатуры.
- •3.6.2. Операторы вывода значений переменных на экран.
- •3.7. Примеры типовых программ
- •4. Алгоритмический язык Visual Basic – более сложные структуры
- •4.1. Файловый ввод и вывод - общие сведения
- •4.2. Организация работы с файлом.
- •4.3. Подпрограммы и их использование для написания сложных программ
- •4.3.1. Назначение подпрограмм
- •4.3.2. Типы подпрограмм
- •4.3.3. Локальные переменные формы
- •5. Операторы и функции, работающие с символьными данными
- •5.1. Ввод символов с целью управления действиями
- •5.2. Функции, работающие с таблицей ascii-кодов
- •5.3. Функции, работающие со строкой символов
- •6. Графика
- •6.1. Воспроизведение цвета
- •6.2. Операторы (Методы) изображения стандартных фигур
- •6.3. Программирование движения фигур на экране.
- •9. Математические вычисления и встроенные функции.
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 "******************************************"
For i = 1 To 10
Input #1, b1(i) ' Ввод 3-й строки
Print b1(i);
Next i
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 "Вектор 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