Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика и программирование алгоритмизация – от проблемы к программе. Курс лекций

.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
416 Кб
Скачать

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, что приводит к трудностям восприятия текста программы.

Следует обратить внимание на форму описания типов переменных некоторые из них имеют описание вне текста главной программы.

Приведем еще один пример передачи информации в подпрограмму.

41

Пример 4.4. Подпрограмма Sub b (с передачей информации через список параметров) вычисляет элементы массива d (вектор d)

по формуле d(i) = k a(i) + q y.

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

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

Private Sub Command1_Click() 'ПРИМЕР 4_4 'Главная программа

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

4.2.3. Локальные переменные формы

Существует способ передачи значений переменных между про- граммными модулями, при котором не требуется использование спи- ска. Такие переменные объявляются вне текста главной программы и называются локальными переменными формы.

42

Пример 4.5. Приведены некоторые операции с использованием указанной выше формы обмена информацией. Подпрограммы Sub a() и Sub d() производят арифметические операции с данными, которые отсутствуют в списках этих подпрограмм.

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

Dim c As Integer: Dim d As Integer: Dim e As Integer: Dim f As Integer Dim ra As Integer: Dim rb As Integer

'Локальные переменные формы

Private Sub Command1_Click() 'Пример 4.5.

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

Cls

Open "F:\Tout_le_VB6\My_files\out\out4_7.txt" For Output As #12 c = 1: d = 3: e = 2: f = 5

Print #12, "c ="; c, "d ="; d, "e ="; e, "f ="; f a ' Это вызов подпрограммы

Print #12, "sub a: ra ="; ra; "e ="; e

b ' А это вызов другой подпрограммы

Print #12, "sub b: rb = "; rb; " c = "; c

Print " Все хорошо!" End Sub

Sub a() ra = c + d e = e + f

End Sub

Sub b() rb = e f c = c d

End Sub

Обратите внимание на способ передачи значений переменных, при которых списки отсутствуют. Это несколько затрудняет воспри- ятие текста программы, но зато позволяет продемонстрировать об- мен информацией в случае, когда описание переменных находится вне текста главной программы и они называются при этом локальными переменными формы.

43

5.ОПЕРАТОРЫ И ФУНКЦИИ, РАБОТАЮЩИЕ

ССИМВОЛЬНЫМИ ДАННЫМИ

5.1.Ввод символов с целью управления действиями

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

Пример 5.1. Запрос и ввод пароля «можно» из пяти символов. Знаки < > («меньше» и «больше») соответствуют смыслу «не равно».

Private Sub Command1_Click()

'Пример 5.1. Запрос и ввод пароля «можно» из пяти символов. 'Знаки <> ("меньше" и "больше") соответствуют символу "не равно". Print "Введите пароль!"

Do

Par$ = InputBox("???????") Loop While Par$ <> "можно" Print "Продолжайте"

End Sub

Пароль может не потребоваться. Зато может возникнуть необхо- димость приостановить счет, например, чтобы посмотреть на проме- жуточный результат.

Пример 5.2. Пауза до нажатия клавиши.

Private Sub Command1_Click()

'Пример 5.2. Пауза до нажатия клавиши

P$ = InputBox ("Для продолжения нажмите любую клавишу") Print "Спасибо! Программа пошла."

End Sub

Пример 5.3. Управление выходом из цикла (например, для за- вершения программы). Для выхода из цикла выбрана клавиша «s». Значение нажатой клавиши присваивается переменной a$.

Private Sub Command1_Click()

'Пример 5.3. Управление выходом из цикла '(например, для завершения программы) 'Для выхода из цикла выбрана клавиша "s".

44

Do

'Тело цикла (т.е. Ваша программа) a$ = InputBox(" ")

If a$ = "s " Then Exit Do

Loop

Print "Работа программы закончена" End Sub

Private Sub Command2_Click() 'Другой вариант

Do

' Тело цикла (т.е. Ваша программа) a$ = InputBox(" ")

Loop While a$ <> "s"

Print " Работа программы закончена " End Sub

Отметим, что в этом примере на форме находятся две кнопки управления, включающие тот или иной вариант программы.

5.2. Функции, работающие с таблицей ASCII-кодов

Эти функции также могут быть использованы для управления действиями в программе.

Функция SCREEN(x, y) определяет ASCII-код символа на экране, координаты которого x и y это номера строки и столбца.

Функция CHR$(код), аргументом которой является ASCII-код, определяет символ из таблицы, который соответствует этому коду. Обратная функция ASC(строка) определяет код первого символа строки, являющейся ее аргументом.

Употребление этих функций будет показано ниже в примерах.

5.3. Функции, работающие со строкой символов

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

LCASE$(строка) – переводит все латинские буквы строки в строчные. UCASE$(строка) – переводит все латинские буквы строки в заглавные. LEFT$(строка, n) – выбирает n символов слева из строки.

RIGHT$(строка, n) – выбирает n символов справа из строки.

45

MID(строка, m, n) – выбирает фрагмент строки из n символов, на- чиная с m-го.

LEN(строка) – вычисляет количество символов в строке. LTRIM$(строка) – удаляет пробелы слева от строки. RTRIM$(строка) – удаляет пробелы справа от строки. STR$(число или числовая переменная) – переводит число в сим-

вольную форму.

VAL(символьное представление числа) – переводит символы (цифры) в число.

Пример 5.4. Определение скан-кодов.

Таблица ASCII-кодов имеет ограниченный объем. Поэтому не все клавиши стандартной клавиатуры могут иметь ASCII-код. В связи с этим многие функциональные клавиши (например, стрелки пере- мещения курсора – Up, Down, Left, Right, клавиши движения страниц

– Page Up, Page Doun и др.) имеют так называемые скан-коды. Скан- код представляет собой строку из двух символов. Первый символ это пробел. Второй символ один из символов таблицы ASCII- кодов. В приведенной программе выводятся на экран символ нажа- той клавиши, а также ASCII-код символа:

Private Sub Command1_Click() 'Пример 5.4 ASCII-коды

Cls i = 1 Do

a$ = InputBox("Нажмите клавишу ") cod = Asc(a$)

Print a$; " --"; cod, i = i + 1

If i > 5 Then

Print i = 1

End If

Loop While a$ <> "S" End

End Sub

Обратите внимание на пустой оператор Print. Счетчик i отсчиты- вает число символов, выведенных в строку на форме. Размер формы здесь ограничен пятью символами. Поэтому после заполнения стро-

46

ки пятью символами пустой оператор Print переводит операцию «Вывод» на новую строку. Обратим внимание на то, что цикл закон- чится при нажатии клавиши «S». Служебные клавиши нажимать нельзя, так как они закодированы другим способом (скан-код).

Пример 5.5. Решается следующая задача: в бухгалтерии некото- рой фирмы ведется учет должников. Оператор заполняет файл дан- ных, не заботясь о правильности с точки зрения программирования. Между фамилией должника и суммой долга он оставляет произ- вольное количество пробелов. Если перед суммой стоит минус, то это долг бухгалтерии. Требуется написать программу, которая вы- дает отчет в заданном формате.

Для написания программы первоначальная информация из файла данных считывается построчно в символьный массив pot$(n), где n число строк в файле данных. Затем в подпрограмме Sub extraction каждая строка анализируется посимвольно. Для этого каждый сим- вол считывается функцией MID и присваивается переменной simb$. Пока в данной строке не встречается пробел, символы собираются (суммируются) в символьную переменную name$(i) – элемент массива. Таким образом, из строки выделяется фамилия. Когда встречается первый пробел, появляется сигнал о наличии конца фа- милии переменная flag, равная до этого нулю, становится равной единице. При этом значении переменной flag никаких действий не производится, пока в строке идут пробелы. Как только очередной символ будет отличен от пробела, фиксируется число прошедших символов в переменной jfix. Очевидно, что если теперь из длины строки (определенной раньше функцией LEN и зафиксированной в переменной k) вычесть значение jfix без единицы, то получится длина правой части исходной строки, содержащая сумму долга. Эта часть выделяется функцией RIGHT$ и преобразуется в число функ- цией VAL, а число фиксируется в переменной sum(i).

Private Sub Command1_Click() 'Работа с символьными строками 'Пример 5.5

'Файл данных inp5_5.txt '_____________________

'Гамалетдинов 550 'Андреев –200 'Мордюков 320 'Костюк 770

47

'Савва 980 'Парамонишвили 300 'Чен –440 'Главная программа

Cls

Dim n As Integer

n = InputBox("Число должников (7)")

Dim pot(100) As String: Dim sum(100) As Integer: Dim name(100) As String

Open "F:\Tout_le_VB6\My_files\inp\inp5_5.txt" For Input As #1 For i = 1 To n: Input #1, pot$(i): Next i

extraction n, pot, name, sum summ = add(n, sum)

Open "F:\Tout_le_VB6\My_files\out\out5_5.txt" For Output As #2 For i = 1 To n

Print #2, name$(i); Tab(20); sum(i) 'Tab – функция, определяющая

'координату x при выводе

Next i

Print #2, "*****************************" Print #2, "Сумма долга "; summ

Print "*****************************" Print "Сумма долга "; summ

End Sub

Private Function add(n, sum) s = 0

For i = 1 To n: s = s + sum(i): Next i add = s

End Function

Private Sub extraction (n, pot, name1, sum)

Dim summa(100) As String: Dim simb As String: Dim si As String

Dim k As Integer: Dim i As Integer: Dim j As Integer: Dim flag As Integer

Print "n ="; n For i = 1 To n k = Len(pot(i)) 'Print k

si = "" 'будущая фамилия flag = 0

48

For j = 1 To k + 1

simb = Mid(pot(i), j, 1)

If flag = 0 Then si = si + simb 'сборка фамилии по символам

If flag = 0 And simb = " " Then flag = 1

If flag = 1 And simb <> " " Then jfix = j: Exit For Next j

name1(i) = si summa(i) = ""

summa(i) = Right$(pot(i), k – jfix + 1) sum(i) = Val (summa(i))

‘Print k, summa(i), sum(i) – этот оператор применялся при отладке

Next i

End Sub

Файл результатов out5_5.txt:

Гамалетдинов 550 Андреев –200 Мордюков 320 Костюк 770 Савва 980

Парамонишвили 300

Чен –440

*************************

Сумма долга 2280

Значения sum(i) суммируются подпрограммой Function add. Сум- ма передается в главную программу и присваивается переменной summ, которая и выводится в файл результатов out5_5.txt вслед за фамилиями name$(i) и суммами sum(i), выведенными до этого c помощью функции разметки строки Tab.

49

6.ГРАФИКА

6.1.Воспроизведение цвета

Любое графическое изображение на экране монитора образу- ется движением светящейся точки, размер которой равен одному твипу. Точка движется по форме, начиная с верхнего левого угла, и постепенно строчка за строчкой засвечивает всю форму. Этот процесс происходит за очень малое время (доли секунды) и по- вторяется автоматически, т.е. независимо от программы. Про- грамма же обеспечивает задание цвета точки в определенных ко- ординатах формы.

Цвета закодированы. Имеется три варианта кодировки и, соответ- ственно, три способа воспроизведения цвета.

Первый способ указание цвета из основной палитры (табл. 6.1).

Таблица 6.1

 

 

Основная палитра

 

 

 

 

 

Цвет

 

Кодовое имя

1.

Черный

 

vbBlack

2.

Красный

 

vbRed

3.

Зеленый

 

vbGreen

4.

Синий

 

vbBlue

5.

Голубой

 

vbCyan

6.

Фиолетовый

 

vbMagenta

7.

Желтый

 

vbYellow

8.

Белый

 

vbWhite

Необходимо помнить, что цвета основной палитры указаны для черного фона. Если фон другой, то основной цвет меняет оттенок.

Второй способ смешивание красок с помощью функции RGB (по первым буквам названий цветов из основной палитры). Функция эта имеет вид RGB(c1, c2, c3), где в скобках указыва- ются три числа, устанавливающие пропорции красного, зеленого и синего цветов.

Каждое из чисел (c1, c2, c3) имеет предел от 0 до 255. Если все числа задать одинаковыми, то цвет будет одного из серых оттенков. Если все они равны нулю цвет черный, а если 255 – цвет белый.

Третий способ число от 0 до 16 777 215.

50

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