Информатика и программирование алгоритмизация – от проблемы к программе. Курс лекций
.pdfТаким же образом могут использоваться символьные константы, представляющие собой строку символов.
Имеется специальный вид констант – именованные константы. Они используются в программах с целью защитить постоянное зна- чение от случайного изменения. Именованные константы объявля- ются специальным словом: CONST. Например,
Const pi = 3.141592
Кроме того что именованную константу нельзя случайно изме- нить (при этом появляется сообщение об ошибке), ее значение ста- новится доступным всем процедурам данного программного модуля.
3.4.Типы переменных
3.4.1.Характеристики переменных
Числовые переменные могут быть четырех типов: целые, длинные целые, дробные обычной точности, дробные двойной точности. Их характеристики, определяющие особенности вычислительного про- цесса, приведены в табл. 3.4.
Таблица 3.4
Характеристики числовых переменных
|
Наименование |
Требуемый |
Значение |
|
|
|
объем |
|
|
||
Тип |
пол- |
|
|
||
памяти |
минимальное |
максимальное |
|||
|
ное/сокращенное |
||||
|
(байт) |
||||
|
|
|
|
||
|
|
|
|
|
|
Целые |
INTEGER |
2 |
–32 768 |
32 767 |
|
Длинные |
LONG |
4 |
–2 147 483 648 |
2 147 483 647 |
|
целые |
|||||
|
|
|
|
||
|
|
|
Отрицательные числа |
–1.40129E – 45 |
|
Обычной |
|
|
–3.402823E + 38 |
||
SINGLE |
4 |
|
|||
точности |
Положительные числа |
3.402823E + 38 |
|||
|
|
||||
|
|
|
1.40129E-45 |
||
|
|
|
|
||
|
|
|
Отрицательные числа |
–4.94965D – 324 |
|
Двойной |
DOUBLE |
8 |
–1.797693134862316D + 308 |
||
точности |
Положительные числа |
1.797693D + 308 |
|||
|
|
||||
|
|
|
4.94965D–324 |
||
|
|
|
|
Буквы E и D, которые можно видеть в таблице, используются в языке для обозначения степени числа 10 в константах. Таким обра- зом, D–324 обозначает десять в степени минус 324.
21
Символьные переменные могут содержать любые символы из таблицы ASCII и могут быть двух типов.
1.Строка переменной длины (полное наименование – STRING, со- кращенное – STR). Может состоять из 32 567 символов. Занимает в памя- ти столько байт, сколько имеет символов, плюс 4 байта (на описание).
2.Строка фиксированной длины (наименование STRING n, где n – число символов). Объем памяти также определяется числом символов.
Массивы могут быть тех же типов, что и простые переменные. Объем требуемой памяти вычисляется как произведение числа эле- ментов массива на объем памяти под один элемент.
3.4.2. Способы задания типа
Тип переменных можно задать одним из указанных ниже двух способов.
1. Задание типа оператором описания DIM. Этот оператор чаще всего употребляется в случае, когда нужно переопределить (т.е. из- менить) тип переменной внутри программного блока. Например:
DIM yes AS INTEGER
DIM up AS LONG
DIM soon AS SINGLE
DIM pink AS DOUBLE
DIM verb AS STRING
DIM word AS STRING 10
В приведенном примере для четырех переменных (yes, up, soon, pink) назначен соответствующий тип. Переменная verb – строка переменной длины. Переменная word – строка фиксированной длины 10.
2. Явное задание типа с помощью суффикса. В этом случае доста- точно к имени переменной в конце добавить соответствующий суф- фикс. Например:
Alfa%, Beta&, Gamma!, Delta#, Epsilon$
Здесь переменная Alfa% – обычная целая, переменная Beta& – длинная целая, переменная Gamma! – дробная обычной точности, пе- ременная Delta# – дробная двойной точности, переменная Epsilon$ – символьная переменной длины.
Второй способ задания типа может привести к случайной ошибке, поэтому рекомендуется пользоваться оператором DIM.
22
Тип массива задается оператором описания DIM. Этим оператором назначается не только тип, но и размер массива, т.е. число его элементов:
DIM a(10) AS INTEGER
DIM b(20,30) AS LONG
DIM c(20,30,40) AS SINGLE
DIM Alfa(1 to 10) AS DOUBLE
DIM Beta&(1 to 40, 1 to 20) AS STRING
DIM Epsilon(100) AS STRING
DIM Gamma (1 to 5, 1 to 5) AS STRING 20
Число элементов массива (его размер) определяется произведени- ем чисел, находящихся в скобках. Число индексов массива называет- ся его размерностью. Например, размерность массива «c» в примере равна трем, а размер равен 20 30 40.
3.5. Основные функциональные операторы
3.5.1. Оператор присваивания
Оператор присваивания служит для размещения в ячейке памя- ти, соответствующей данной переменной, ее значения в виде числа или символьной строки. Формат оператора виден из приведенных ниже примеров:
b = 123.57 bob = 1.2E – 23
Alfa(2) = 5759 Gamma(3,2) = "Name" Epsilon$(51) = "Любая строка символов"
Следует обратить внимание на то, что строка символов должна быть в кавычках. Справа от знака равенства для числовых перемен- ных может стоять не только число, но и арифметическое выражение. При этом арифметическое выражение есть комбинация любых ариф- метических операций над числами и встроенными функциями с чи- словыми значениями.
3.5.2. Оператор условного перехода
Этот оператор служит для реализации перехода к той или иной операции программы при выполнении определенных условий и представляет собой логическое предложение типа «если – то» раз- личной степени сложности. Оператор условного перехода имеет сле-
23
дующий формат: if (условие) then (операция 1) else (операция 2). Указанная форма оператора называется строчной. Кроме нее сущест- вует так называемая блочная форма, имеющая вид
if (условие 1) then (операция 1)
elseif (условие 2) then
(операция 2) elseif (условие3) then
(операция 3)
...........................
elseif (условие n) then
(операция n)
else
(операция n + 1) end if
Оператор условного перехода может иметь сокращенный формат:
if (условие ) then (операция 1).
При невыполнении условия в этой форме действие переходит к следующей по порядку строке программы.
Нужно отметить, что во всех версиях языка Basic имеется опера- тор принудительного (т.е. безусловного) перехода goto (метка) к строке программы, имеющей указанную метку. Однако метки
впрограмме нежелательны. Поэтому, как правило, безусловный пе- реход практически не применяется.
Кроме блочной формы оператора if существует еще один опера- тор, предназначенный для выбора одной операции из заданного множества. Называется он Select case n. Он употребляется для выбо- ра некоторой операции при условии, что число n принимает некото- рое значение. Различные формы контроля значения n приведены
вследующем примере: требуется вычислить функцию y(x), опреде- ленную для целых значений x. Содержание операций показано ниже:
'Пример Select Case
Private Sub Command1_Click()
Dim x As Single: Dim y As Integer
Do
x = InputBox("x =")
If x < 0 Then Exit Do
Select Case x
24
Case Is = 1 y = 2
Case 2 To 6 y = 5
Case Is = 7, Is = 8 y = 3
Case Is = 0 y = 0 Case Else y = 1
End Select
Print "x ="; x, "y ="; y Loop
Print "Operation is terminated" End Sub
Следует отметить, что условие может быть как простым, так и сложным. Простое условие состоит в сравнении значений двух пе- ременных или переменной и некоторого числа (или строки). Слож- ное условие состоит в логическом объединении или пересечении простых условий. Объединение условий означает, что результат про- верки положителен – «да» при выполнении хотя бы одного из ука- занных в группе условий (логическая сумма). При этом простые ус- ловия в группе соединяются союзом or (или). Пересечение условий означает, что результат проверки положителен при выполнении од- новременно всех условий в группе (логическое произведение). При этом простые условия в группе соединяются союзом and (и).
Операторы условного перехода обеспечивают логику программ любой сложности, если они комбинируются с операторами цикла.
3.5.3. Операторы цикла
При построении алгоритмов часто требуется так называемое вы- числение в цикле, т.е. повторение некоторой группы операций. Среди операторов цикла имеются две основные формы: циклы с фиксиро- ванным числом повторений и циклы с числом повторений до выпол- нения заданного условия.
Цикл первого вида имеет следующий формат:
for x = xmin to xmax step dx
(Группа операций) next x
25
Переменная x называется счетчиком цикла и изменяется от xmin до xmax с шагом dx. Выход из цикла, т.е. продолжение программы после оператора next x (следующий x), происходит при x = xmax + dx. Выход из цикла может быть сделан принудительно при выполнении некоторого условия. Тогда среди повторяющейся группы операций ставится следующий оператор: if (условие) then exit for. Если шаг переменной счетчика dx имеет значение +1, то ука- зание размера шага step dx может отсутствовать. Шаг dx может быть отрицательным. В этом случае говорят, что имеется обратный цикл, и тогда начальное значение счетчика x должно быть больше его ко- нечного значения.
Цикл второго вида имеет следующий формат:
do
(Группа операций) loop while (условие)
Этот цикл не имеет заданного количества повторений. Число по- вторений определяется выполнением условия, стоящего после опера- тора loop while («...петля, пока...»). Оператор проверки выполнения условия может стоять также в первой строке цикла. Тогда формат цикла выглядит следующим образом:
do while (условие) (Группа операций) loop
Так же как и в цикле for...next, в цикле do...loop предусмотрено преждевременное прерывание, которое обеспечивается оператором if (условие) then exit do. Если такой оператор предусмотрен по смыслу программы, то основное условие (while (условие)) может от- сутствовать. Тогда этот цикл имеет следующую форму:
do
(Группа операций 1)
if (условие) then exit do
(Группа операций 2) loop
Отметим, что кроме цикла do...loop существует цикл аналогич- ной формы:
while (условие) (Группа операций) wend
26
В этом цикле основное условие не может быть опущено.
Внутрь одного цикла может быть вложен другой цикл любого формата. Однако, если цикл for...next вложен внутрь другого цикла for...next, переменные счетчиков цикла должны быть разные.
3.6.Операторы ввода и вывода информации
3.6.1.Операторы ввода значений переменных
склавиатуры
Для ввода значений переменных с клавиатуры имеется несколько операторов, употребляемых в зависимости от содержания вводимой информации и ее использования в программе. Простейший ввод де- лается с помощью оператора InputBox, имеющего следующий фор- мат: InputBox (″Комментарий″).
Пример 3.1
a = InputBox (″Введите значение a″)
Комментарий в операторе InputBox полностью копируется на эк- ран и не является обязательным, однако без него экран будет пустым. Пользователю придется вспоминать, что он хотел вводить. Решайте сами, удобно это или нет.
Пример 3.2
a$ = InputBox (″Введите значение строки a$″)
Для ввода значений массива нужно использовать цикл, как пока- зано ниже в примере 3.3, где вводятся 15 значений одномерного чи- слового массива.
Пример 3.3
Private Sub Command1_Click()
'Pr3_3 Поиск максимального элемента массива
Dim Vect(100) As Integer
Dim i As Integer: Dim c As Integer: Dim j As Integer: Dim n As Integer: MsgBox ("Введите число элементов n массива Vect")
n = InputBox("n =") 'Пусть n = 15 For i = 1 To n
Vect(i) = InputBox("Vect(i)") Print "i ="; i, "Vect(i) = "; Vect(i)
27
Next i
Max = Vect(1)
For i = 1 To n
If Vect(i) > Max Then Max = Vect(i)
Next i
Print " А вот и результат: max ="; Max
End Sub
В следующем примере показан ввод двумерного числового мас- сива (матрицы). Матрица вводится по строкам.
Пример 3.4
Private Sub Command1_Click() 'Ex3_4.
Cls
Dim Matrix(1 To 4, 1 To 3) As Integer Dim i As Integer
Dim j As Integer For i = 1 To 4
For j = 1 To 3 Print i; j,
Matrix(i, j) = InputBox("Matr") Next j
Print "Строка "; i Next i
Print "______________________" Print
For i = 1 To 4 For j = 1 To 3
Print Matrix(i, j); Next j
Print Next i End Sub
Кстати, в среде программирования Visual Basic 6.0 строчные и про- писные буквы в операторах можно перепутать, но в этом случае они бу- дут автоматически восстановлены в соответствии с форматом языка. В именах переменных прописные буквы можно ставить для оформления текста. Ошибки в записи операторов сразу не определяются. Но они вид- ны, так как ошибочный оператор не переводится в стандартный формат.
28
3.6.2. Операторы вывода значений переменных на экран
Простейший вывод значений переменных на экран (в нашем слу- чае – на форму) осуществляется с помощью оператора print, кото- рый имеет следующий формат:
print "(Комментарий 1)";a,"(Комментар. 2)";b$,"(Коммент. 3)"; t&,"(Ком. 4)"
Параметрами строки оператора print являются комментарии (они не обязательны) и имена переменных, разделенные запятой или точкой с запятой. Эти разделители дают различное число пробелов между параметрами на экране (соответственно шесть и один), что сделано для удобства чтения строки. Если нужно расположить объекты вывода на экране в другом формате, чем это позволяют стандартные разделители, применяются специаль- ные операторы размещения информации.
Пример 3.5. Стандартные разделители.
Private Sub Command1_Click() 'Ex 3_5.
subj$ = "Компьютер" country$ = "США" firm$ = "IBM"
price = 974.45
Print " Изделие:"; subj$; " Фирмы "; firm$; " из "; country$; " по цене $"; price End Sub
Сообщение на экране:
Изделие: компьютер IBM из США по цене $ 974.45
Ниже представлен форматный вывод элементов матрицы, элементами которой являются числа различной длины. Вывод по заданному формату делается с помощью операторов:
Form1.CurrentX = Координата по оси x, Form1.CurrentY = Координата по оси y.
Значения координат измеряются в твипах. Чаще всего исполь- зуется следующий размер окна вывода (это вывод на форму): 8000 × 7000. Точка начала отсчета координат – левый верхний угол формы.
29
Пример 3.6
Private Sub Command1_Click() 'Ex 3_6
Cls
Dim matr(4, 4) As Long
Dim i As Integer: Dim j As Integer
'Data 113, 2, 2341, 564328, -2, 9, -5, 11, 4333, 77, 432, 78, 4, 4, 4, 4 MsgBox ("Введите матрицу")
For i = 1 To 4 For j = 1 To 4
Print i; j,
matr(i, j) = Val(InputBox("Матрица")) Next j
Print Next i
Print "__________________________________" Print
Y1 = 800
For i = 1 To 4 For j = 1 To 4
Form1.CurrentX = 500 j Form1.CurrentY = Y1 + 200 i
Print matr(i, j); Next j
Print Next i
End Sub
На экране появится следующая информация:
113 |
2 |
2341 |
564328 |
–2 |
9 |
–5 |
11 |
4333 |
77 |
432 |
78 |
4 |
4 |
4 |
4 |
Отметим, что в этой программе оператор
matr(i, j) = Val(InputBox("Матрица"))
можно записать без функции Val. В данном случае эта функция подчер- кивает, что число, которое вводится в окно, имеет текстовую форму, а переменная matr(i, j) определена оператором Dim как число. Но если функцию Val удалить, то изменение типа будет сделано автоматически.
30
