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

ОСНОВЫ

ПРОГРАММИРОВАНИЯ

Синтаксис языка

Программа в VB формируется из элементов –

лексем, минимально значимых единиц программы. В их число входят: ключевые (зарезервированные)

слова (Dim, Const, While, For, Sub, Case, If…),

специальные символы (+, –, /, *) и идентификаторы. Код программы состоит из последовательности операторов, состоящих из ключевых слов языка и выражений. Выражения – это объединение идентификаторов и спецсимволов, например, «А+В».

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

Имена должны начинаться с буквы (латинской или русской), иметь длину не более 255 символов.

Имя не должно содержать пробел, точку или следующие символы: %, !, @, &, $, #.

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

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

Регистр букв в имени для компилятора значения не

имеет.

Правильные идентификаторы: Октава,

Площадь_Треугольника, Private15, Date1, mod_1, Err.Number, Debug.Assert – обращения к стандартным объектам Err и Debug.

Неправильные идентификаторы: _ввв

(подчеркивание), date, mod, private, Integer

(использование зарезервированных слов), a.sys (если объект а с методом или свойством sys не существует), Площадь Треугольника (пробел между словами). Ошибку сразу покажет компилятор в окне программного кода.

Программные метки используются в операторах перехода GOTO <метка> для передачи управления на оператор, помеченный меткой. В качестве метки могут использоваться числа от 0 до 2099999999 или правильный идентификатор.

Константы могут быть обычными (целые,

вещественные, логические, строковые) и именованные. Пример обычных констант: 7, -9, 12.54, 16.2е-3, False, True, ″строка символов″;

шестнадцатеричные константы, например, &H200, которая представляет собой десятичное число

512.

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

Программно можно менять значения свойств формы и элементов, размещенных на ней, с помощью оператора присваивания. Например,

Form1.WindowState = 2

'Распахнуть форму во весь экран

Label1.Caption = "Привет студент!« 'Изменить надпись Label1

Label2 = "Привет в ответ"

'Изменить надпись Label2 Shape1.Shape = Circle

'Изменить вид фигуры 1 на окружность

Shape2 = Rnd*5

'Изменить вид фигуры 2 случайно

Text1.Text = “Visual Basic”

'Изменить поле Text1

Text2 = Rnd*5

'Изменить поле Text2 случайным числом

Для всех объектов на форме существует

единственное свойство, определяемое по умолчанию, которое можно не записывать после имени объекта. Например, это свойство Text у объекта Text1, свойство Caption у объекта Label1, свойство Shape у объекта Shape1 и т.д.

Текст после знака апострофа ( ' ) представляет собой комментарий

Выражения

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

Арифметические: ^,+,,*,/, \ (целочисленное

деление, остается только целая часть), mod (деление по модулю, остается остаток от деления).

Логические: Not (логическое отрицание), And (логическое умножение), Or (логическое сложение), Xor (логическое исключающее сложение), Eqv (логическая эквивалентность), Imp (логическая импликация).

Строковые: + (только со строками), & (в выражении могут встречаться строки и числа, которые преобразуются в строку). Обе эти операции предназначены для объединения строк.

Операции сравнения: =, <,>,<=,>=,<>, Like

(удовлетворение маске), is (принадлежность к типу).

Логические операции имеют наименьший приоритет, а арифметические – наибольший. Порядок выполнения операций равного приоритета осуществляется всегда слева направо. Скобки и вызов функции имеют наивысший приоритет. Например,

A = 123 \ 4

:

Print A

‘РезультатÆA=30

 

B = 22 mod 5

:

Print B

‘РезультатÆB=2

 

С = 14 Mod 5 + 4

:

Print C

‘РезультатÆC= 8

 

D = 14 Mod 5 * 4

:

Print D

‘РезультатÆD=14

 

F = 14 Mod 8 \ 4

:

Print F

‘РезультатÆF=0

 

E = 5 + 2 * Atn(0.761) :

Print E

‘РезультатÆE=6.3

 

Следует соблюдать осторожность при использовании в одном выражении переменных различных типов. Прежде чем выполнить операцию над ними, VB преобразует их к одному из типов. Например,

Dim A, B, C, D

‘Объявление переменных типа Variant

A = 3

& 9^2

:

Print A

‘РезультатÆA=”381”

B = 3

+ 9^2

:

Print B

‘РезультатÆB = 84

C =“3” + 9^2 :

Print C

‘РезультатÆC = 84

D = “3” + “9”

:

Print D

‘РезультатÆD = “39”

Операция & предназначена только для работы со строками. В первом выражении происходит возведение второго числа в

квадрат, преобразование каждого из чисел в строку и

объединение этих строк. Во втором выражении

встречаются два целых числа (3 и 81), разделенных знаком плюс. Знак плюс имеет больший приоритет, чем знак &, поэтому числа складываются. В третьем выражении

необ-ходимо сложить строку и число (81). Так как их разделяет оператор +, то компилятор считает данную операцию числовой и превращает строку ″3″ в число, и

затем складывает его со вторым числом. В четвертом выражении компилятор видит две строки, и так как они имеют один тип, то происходит объединение их в одну строку.

Чтобы быть уверенным в типе результата операции над переменными различных типов, используйте функции CInt, CLng, CStr, CSng, CCur, CDec,

CBool, CByte.

Если необходимо проанализировать данные, требуется операция сравнения. Она выполняется с целью выяснить истинность отношения между данными. Например, выражение А>В имеет результат True (Истина), если А больше В, в противном случае результат будет False (Ложь). True и False – это логические (булевы) значения выражения. Выражение, в котором используются операции сравнения, является примером простого логического выражения (условия). Можно сравнивать не только числа, но и строки.

Логические операции And, Or, Not, Xor, Eqv, Imp

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

Выражение типа А>В And A>C имеет значение True, если справедливы оба отношения - А больше В и А больше С, то есть оба простых выражения имеют значение True. Если же хотя бы одно из них имеет значение False, то все выражение также будет иметь значение False. Выражение типа А>В Or A>C имеет значение True, если справедливо хотя бы одно отношение.

Выражение Not A>B имеет значение True, если условие A>B имеет значение False. Приведем фрагмент программы вычисления сложных логических выражений:

Dim А, В, С, Mk

'Объявление переменных типа Variant

А =10 : В =8 : С =6

 

 

Mk = А > В And В > С : Print Mk

' Значение True

Mk = В > A And В > С : Print Mk

' Значение False

Mk=A>B Or B>C :

Print Mk

' Значение True

Mk=B>A Or B>C :

Print Mk

' Значение True

Mk = Not(A > В) :

Print Mk

' Значение False

Mk = Not(B > A) :

Print Mk

' Значение True

Mk = A > B Eqv B > C : Print Mk

' Значение True.

Mk = B > A Eqv B > C : Print Mk

' Значение False

Mk = A > B Imp B > C

: Print Mk

' Значение True

Mk = A > B Imp C > B

: Print Mk

' Значение False

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

Например,

 

 

 

f = 11

And 6

:

Print f

'Результат 2

f = 11

Or 6

:

Print f

'Результат 15

f = 13

Xor 9

:

Print f

'Результат 4

f = 10

Eqv 8

:

Print f

'Результат -3

f = 8 Imp 10

:

Print f

'Результат -1

f = Not 5 * 4

:

Print f

'Результат -21

Операция Not выполняет инверсию разрядов операнда. Так, число 20 в двоичной форме есть 00010100, тогда как Not(20) – есть двоичное 11101011 или десятичное 21.

f = 11 Or –6 : Print f 'Результат -5

Здесь два числа в двоичной форме 00001011 и 11111010 объединяются операцией Or. В результате получится число 11111011, которое будет отрицательным, так как содержит 1 в 7- весовом разряде (восьмом по порядку справа). Чтобы получить десятичное число, используем операцию «двойного» отрицания, то есть Not(11111011)=100, а это десятичное число 4. Инвертируем его еще раз: Not(4)= -5. Результат всего выражения будет число -5.

f = 11 And –6 : Print f ‘Результат 10

Основываясь на результате предыдущего решения, можно запи-сать, что -6=Not(5), а это двоичное число 11111010. Десятичное число 11 в двоичной форме есть число 00001011. Следовательно, результат поразрядной операции And будет двоичное число 1010 или десятичное 10.

Операторы языка

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

Оператором присваивания Вы уже научились пользоваться. Так, например, чтобы поменять местами значения в ячейках А и В, можно воспользоваться одним из трех способов (убедитесь в этом сами):

1. Tmp = A

2. A = A + B

3. A = A Xor B

A

= B

B = A – B

B = A Xor B

B

= Tmp

A = A – B

A = A Xor B

Оператор вызова процедуры инициализирует

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

Безусловная передача управления осуществляется оператором перехода GOTO <метка>. Область действия метки локализована только той процедурой или функцией, где она используется. Нельзя передавать управление между функциями или процедурами. Перед оператором, на который передается управление, ставится метка. Если метка – целое число, то двоеточие после метки может не ставится. Если метка – правильный идентификатор, то двоеточие после метки ставится всегда.

Составные операторы содержат в своем теле некоторую последовательность дополнительных операторов, которые должны выполняться последовательно (один или заданное число раз) либо согласно условию в определенном порядке.

К числу составных операторов относят:

условный оператор IF и оператор выбора

Select Case;

операторы цикла: For, Do, While;

оператор присоединения With.

Условный оператор IF

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

Условие – это выражение логического типа Boolean, которое может принимать одно из двух значений True или False. Вы уже познакомились с простыми и сложными условиями.

Впрограмме выбор действия в зависимости от выполнения или не выполнения условия определяется операторами IF и Select Case.

Условный оператор IF имеет два формата: однострочный синтаксис и многострочный.

Однострочный синтаксис оператора IF:

IF <условие> Then <Операторы1>[Else < Операторы2>].

Например,

IF Сумма>150000 Then Процент=0.08 Else Процент=0.05

IF x>0 And x<10 Then y=x^3 : Text1=y Else y=Abs(x) : Text2=y

Во многих реальных ситуациях требуется выполнить

несколько операторов, в зависимости от условия. Для этого

удобно использовать многострочный синтаксис оператора: IF <условие1> Then

<Операторы1>

[ElseIF <условие2> Then <Операторы2>

………………]

[Else <ОператорыN>]

End IF

Здесь, если условие1 истинно, то выполнятся Операторы1, после чего произойдет завершение работы оператора IF. Иначе будет проверяться условие2 и, если оно будет истинным, то выполнятся Операторы2, и т.д. В противном случае, если ни одно из условий не будет истинным, то выполнятся ОператорыN. В этом структуре необязательная часть ElseIF используется для задания дополнительных условий, а необязательная часть Else – для полной альтернативы.

Например,

IFСумма >=100000 And Срок>=1 Then

Процент = 0.07

:

Rating1 = Rating1 +1

ElseIF

Сумма >= 500000 And Срок>=2 Then

Процент = 0.1

:

Rating2 = Rating2 +1

ElseIF

Сумма >= 1000000 And Срок>=3 Then

Процент = 0.18

:

Rating3 = Rating3 +1

Else

 

 

 

Процент = 0.05

:

Rating4 = Rating4 +1

End IF

 

 

 

Для принятия более сложных решений с большим количеством вариантов можно использовать вложенные конструкции. При этом каждый многострочный оператор IF всегда заканчивается словами End IF. В однострочном варианте такого окончания нет.

Пример. Вычислить выражение

z = sin(ax2 bx c) +cos(ax2 +bx +c) ln(ax2 bx c)

Переменные a,b,c,x,z опишем типом Double, и будем вводить и выводить их значения в текстовых полях

Text1, Text2, Text3, Text4, Text5. На форме разместим элементы Метки с именами переменных и кнопку для получения результата. Процедура обработки события Click будет выглядеть следующим образом.

Private Sub Command1_Click()

Dim a As Double, b As Double, x As Double, _

z As Double, c As Double

a = Text1

b = Text2

c = Text3

x = Text4

z = a * x ^ 2 - b * x - c If z > 0 Then

z = (Sin(z) + Cos(-z)) / Log(z) Text5 = z

Else

MsgBox "Значение z<=0, введите новые значения", _ vbOKOnly + vbQuestion

Debug.Print "Знаменатель= "; z End If

End Sub

'Результат будет равен нулю

Встроенный диалог MsgBox покажет окно сообщения. Оператор Debug.Print "Знаменатель= "; z откроет окно Immediate отладчика с распечаткой значения переменной z. Оператор If…Then…Else…End If проверяет истинность условия z>0.

Если Вы ввели переменную в программу без описания или неверно записали переменную, то компилятор присвоит новой переменной тип Variant. Например,

Sub Command1_Click()

Dim Ancker as Double Ancker =0.15

Ancker = Anker * sin(1/Ancker)

MsgBox Ancker

End Sub

VB рассматривает переменную Anker как

переменную типа Variant, которая определяется в середине процедуры, и присваивает ей значение 0 (для строковых переменных – пустая строка). В результате обновленная переменная Ancker также примет значение, равное нулю, при этом ошибка не будет сгенерирована. Если же после добавления буквы с в слово Anker Вы опять не получили желаемого результата, то это означает только одно: Вы ввели русскую букву, а не

английскую, так как они имеют различные машинные кода.

Явно описывая переменные можно исключить возникновение подобных ошибок. Оператор Option Explicit, записанный в области GD модуля формы, запретит использование необъявленных переменных, констант и префиксов при определении переменных.

Пример 5. Определить y по заданному значению x. Зависимость y=f(x) представлена графически и состоит из трех парабол.

В общем случае уравнение параболы записывается в виде: y=ax^2+bx+c. Для определения коэффициентов a, b, c необходимо построить систему из трех уравнений для каждой параболы. Например для y1 по известным из графика трем точкам можно записать: 0 =36a 6b + c

8 = 25a 5b + c0 =16a 4b + c

Решая ее получаем, что y1=-8(x+5)^2+8. Аналогично получают уравнения для y2 и y3.

DefSng y, x

Private Sub Command1_Click()

x = InputBox("Введите значение аргумента")

Y1 = -8 * (x + 5) ^ 2 + 8

 

'Зависимость y1=f(x)

Y2 = -x ^ 2 + 16

 

 

'Зависимость y2=f(x)

Y3 = -13 / 4 * (x - 6) ^ 2 + 13

 

'Зависимость y3=f(x)

IF x >= -6 And x <= -4 Then

 

 

y = Y1

 

 

 

 

Else

 

 

 

 

IF x > -4 And x <= 4 Then

 

 

y = Y2

 

 

 

 

Else

 

 

 

 

IF x > 4 And x <= 8 Then

 

 

y = Y3

 

 

 

 

Else

 

 

 

 

y = 0

 

 

 

 

End If

:

End If

:

End If

Print y

 

 

 

 

End Sub

 

 

 

 

Вместо вложенных конструкций IF можно

использовать четыре однострочных оператора:

IF x >= -6 And x <= -4

Then y = Y1

IF x > -4 And x <= 4

Then y = Y2

IF x > 4 And x <= 8

Then y = Y3

IF x <-6 Or x > 8

Then y = 0

или один многострочный оператор с частью ElseIF: IFx <-6 Or x > 8 Then

y = 0

 

ElseIF

x<= -4 Then

y = Y1

 

ElseIF

x<= 4 Then

y = Y2

 

Else

 

y = Y3

 

End IF

 

Пример. Определить принадлежность точки (x, y) заштрихованной области, представленной графически.

Private Sub Command1_Click()

Dim x As Single, y As Single, a As Boolean, _

b As Boolean

x= InputBox("Введите X-координату точки")

y= InputBox("Введите Y-координату точки")

a= x ^ 2 / 25 + y ^ 2 / 4 <= 1

'a - область внутри эллипса

b= x ^ 2 + y ^ 2 >= 4

'b - область за пределами окружности

'And – логическая операция для определения пересекающейся области

'Xor – логическая операция для исключения пересекающейся области

If a And b Then

Print "Точка (" & x & "," & y & ") принадлежит области"

Else

Print "Точка (" & x & "," & y & ") не принадлежит области"

End If

End Sub

Тот же результат можно получить, если использовать логическую операцию Xor вместо логической операции And, но тогда b должна определять область в пределах окружности:

…………………………..

a = x ^ 2 / 25 + y ^ 2 / 4 <= 1 b = x ^ 2 + y ^ 2 <= 4

If a Xor b Then ……………

Соседние файлы в папке Лекции по информатике [Лебедев]