1432
.pdf1. ЯЗЫК ПРОГРАММИРОВАНИЯ VISUAL BASIC
1.1. Основы языка
Правила написания текста простой программы на языке Visual Basic во многом совпадают с правилами тех версий языка Basic, которые были разработаны специально для обучения студентов. Каждый оператор занимает одну строку. Окончание оператора можно перенести на следующую строку, указав в конце текущей строки пробел и символ подчеркивания « _». В идентификаторах не различаются прописные и строчные буквы. Имена, определенные пользователем, не должны совпадать с зарезервированными именами. Имя должно начинаться с латинской буквы или символа подчеркивания «_», причем подчеркивание не может быть единственным символом имени. Имя может содержать также и цифры. Максимальное количество символов в имени 1023, но для удобства в реальной программе не рекомендуется использовать имена длиннее 30 символов. Заметим, что полное имя объекта может содержать идентификаторы пространства имен, метод, параметры и т.д. В среде программирования применяетя специальная технология перевода кода, благодаря которой программист получает подсказки непосредственно в процессе ввода кода программы. Файл, содержащий текст программы, должен иметь расширение .vb.
Структура программы
Программа на языке Visual Basic построена из стандартных блоков. Решение состоит из одного или нескольких проектов. Проект в свою очередь может содержать одну или несколько сборок. Каждая сборка компилируется из одного или нескольких исходных файлов. Исходный файл включает в себя определения и реализацию классов, структур, модулей и интерфейсов и в конечном счете содержит весь код.
Структура текста простой программы, выполняющей вывод одной строки на экран, представлена ниже.
‘Пример 1.1
Module Module1
Sub Main()
9
Console.WriteLine(“Пример простой программы”)
Console.ReadLine()
End Sub
End Module
Программа состоит из одного модуля и одной процедуры. Процедура имеет имя Main. Все Visual Basic-приложения начинают выполняться с вызова процедуры Main. В программе использованы парные операторы: Module - End Module, Sub - End Sub. Модуль может содержить несколько процедур. Процедура содержит несколько строк программного кода. В пример 1.1 включены однострочные операторы «вывод строки»
Console.WriteLine и «ввод строки» Console.ReadLine. Последний оператор использован для задержки экрана до нажатия клавиши
Enter.
Элементы программирования уровня файла
При создании проекта или файла и открытии редактора кода пользователю предоставляется уже готовая часть кода, расположенная в правильном порядке. Любой код должен создаваться в следующей последовательности:
1.Операторы Option.
2.Операторы Imports.
3.Операторы Namespace и элементы уровня пространства имен.
Размещение операторов в иной последовательности может вызвать ошибки компиляции.
Операторы Option устанавливают основные правила для последующего кода, способствуя предотвращению синтаксических и логических ошибок.
Оператор Imports позволяет ссылаться на классы и другие типы, определенные в импортированном пространстве имен, без их уточнения. Можно использовать столько операторов Imports, сколько необходимо. Пространства имен помогают организовывать и классифицировать элементы программирования для облегчения их группировки и доступа к ним.
10
Элементы программирования уровня пространства имен
Классы, структуры и модули содержат весь код исходного файла. Они являются элементами уровня пространства имен и могут отображаться в пространстве имен или на уровне исходного файла. Они содержат описания всех других элементов программирования. Интерфейсы, которые определяют подписи элементов, но не выполняют реализацию, также отображаются на уровне модуля. Элементы данных на уровне пространства имен являются перечислениями и делегатами.
Элементы программирования уровня модуля
Процедуры, операторы, свойства и события являются единственными элементами программирования, которые могут содержать исполняемый код (то есть выполняются во время выполнения). Они являются элементами уровня модуля программы. Элементами данных на уровне модуля являются переменные, константы, перечисления и делегаты.
Элементы программирования уровня процедуры
К элементам уровня процедуры относятся в основном исполняемые операторы, которые составляют код времени выполнения программы. Весь исполняемый код должен находиться в пределах некоторой процедуры (Function, Sub, Operator, Get, Set,
AddHandler, RemoveHandler, RaiseEvent). Элементы данных на уровне процедуры ограничиваются локальными переменными и константами.
Процедура Main
Каждое приложение Visual Basic должно содержать процедуру с именем Main. Эта процедура служит начальной точкой программы и осуществляет общее управление работой приложения. Платформа
.NET Framework вызывает процедуру Main при загрузке приложения и готовности передачи управления. При создании приложения Windows Forms для приложений, которые выполняются самостоятельно, необходимо написать процедуру Main.
11
Объявление переменных
При задании имени элемента необходимо соблюдать следующие правила:
имя должно начинаться с латинской буквы или знака подчеркивания «_»;
имя может содержать только символы латинского алфавита, десятичные цифры и знаки подчеркивания;
имя должно содержать хотя бы один символ латинского алфавита или десятичную цифру, если оно начинается со знака подчеркивания;
длина имени не должна превышать 1023 символа.
Регистр в именах элементов не учитывается. Это означает, что при сравнении двух имен AаA и aАa, которые отличаются только регистром буквенных символов, компилятор воспринимает их как одно и то же имя. Однако использовать подобный «разнобой» в одних
итех же именах не рекомендуется.
Впростом примере, показанном выше, используется одна текстовая константа и нет ни одной переменной. Если есть переменные, которые требуются в обычной программе, то они должны быть обязательно объявлены до их использования, например:
‘Пример 1.2
Module Module1
Sub Main()
Dim k, m, n As Integer Dim S As String
m = 20 n = 7
k = m \ n
S = "Частное " & Str(m) & " /" & Str(n) & " =" & Str(k) Console.WriteLine(S)
Dim x, y, z As Double x = 10.0
y = 3.0 z = x / y
S = "Частное " & Str(x) & " /" & Str(y) & " =" & Str(z) Console.WriteLine(S)
12
Console.ReadLine()
End Sub
End Module
В примере с помощью ключевого слова Dim объявлены три целочисленные (тип Integer) переменные k, m, n, три вещественные (тип double) переменные x, y, z, а также строковая (тип string) переменная S. Значения четырех переменных определяются с помощью числовых констант. Две переменные определяются с помощью арифметических выражений. Отметим, что символ “\” означает целочисленное деление, например, k=m\n. Значение строковой переменной определяется с помощью объединения (символ & обозначает объединение строк) строковых констант со строковым представлением чисел. Функция Str преобразовывает значение числа в его строковое представление.
Арифметические операции
Подобно другим языкам программирования, Visual Basic поддерживает арифметические операции:
+ и –
*и /
\
mod
^
сложение и вычитание; умножение и деление; целочисленное деление; остаток от деления возведение в степень.
Условный оператор
Для построения сложных программ необходимы инструкции управления, которые позволяют реализовать ветвление, цикл и другие алгоритмические структуры. Ветвление осуществляется с помощью инструкции If.
If Условие1 Then
Первая группа операторов
ElseIf Условие2 Then
Вторая группа операторов
ElseIf Условие3 Then
Третья группа операторов
. . .
13
Else
Последняя группа операторов
End If
Условие1, условие2 и др. представляют собой булево выражение, принимающее значения true и false. Если условие1 равно true, то выполняется Первая группа операторов, следующих за If. В противном случае проверяется Условие2, и если оно равно true, то выполняется Вторая группа операторов и т.д. Если все условия равны false, то выполняется Последняя группа операторов,
следующая за Else. Инструкции ElseIf, Else и соответствующие им группы операторов не обязательны в условном операторе. Для построения условных выражений можно использовать следующие операторы отношения:
<меньше
<= меньше либо равно
>больше
>= больше либо равно
=равно
<> не равно
В примере, предложенном ниже, определяется некоторое целое число. Это число сравнивается с тем, что пользователь вводит с клавиатуры.
‘Пример 1.3
Module Module1
Sub Main()
Dim m, n As Integer n = 7
Console.Write(“Угадайте целое число между 0 и 10 = ”) m = Convert.ToInt32(Console.ReadLine())
if m<n Then
Console.WriteLine(“Ваше число меньше”) ElseIf m>n Then Console.WriteLine(“Ваше число больше”) Else
Console.WriteLine(“Угадали”) End If
Console.ReadLine() End Sub
End Module
14
В примере применены два условных оператора, один из которых вложен в другой. Для вывода первой строки использован метод Console.Write, который выводит список вывода, но не переходит в следующую строку на экране. Метод ToInt32 класса Convert преобразовывает введенную с клавиатуры строку символов в целое число.
Для сравнения кроме оператора «=» можно использовать функцию Equals, например, следующие две строки для переменных a и b выводят на экран одинаковый результат true, если переменные равны, или false в противном случае.
Console.WriteLine(a = b) Console.WriteLine(a.Equals(b))
Для сравнения числовых переменных a и b можно также использовать функцию a.CompareTo(b), которая возвращает точно такое значение, как и функция Math.Sign(a-b) (знак числа).
Отметим, что сравнивать можно только переменные одного и того же типа. Если требуется преобразовать один тип данных в другой, то это нужно указывать явно, например, в приведенных ниже строках кода функции string.Format и ToString помещают строковое представление величины d, сохраняя 3 знака после десятичной точки. Заметим, что вещественные числовые константы должны указываться с дробной частью, иначе выражение из целых констант 1 / 29 равно нулю.
Dim d As Double
Dim s1, s2 As String d = 1.0 / 29.0
s1 = String.Format("{0:F3}", d))
s2 = d.ToString("F3")
Обратное преобразование из строкового типа в вещественный выполняется с помощью метода ToDouble класса Convert.
d = Convert.ToDouble(s2)
Цикл со счетчиком
При обработке данных необходимо повторять некоторые операции, то есть организовывать циклические вычисления. Простейший оператор, выполняющий повторения команд, – это цикл со счетчиком for.
15
For счетчик=нач To кон Step шаг Группа операторов
Next счетчик
Перед первым выполнением цикла устанавливается начальное значение нач управляющей числовой переменной – счетчика. Если это значение превышает конечное значение кон, то цикл не работает ни разу. Шаг – это значение, на которое изменяется счетчик после каждого исполнения цикла. Элементы нач, кон и шаг – это числовые константы, переменные или математические выражения. В следующем примере вычисляется факториал N, то есть произведение целых чисел от 1 до N.
‘Пример 1.4
Module Module1
Sub Main()
Dim i, P, N As Integer Console.Write(“Введите целое число = ”) N = Convert.ToInt32(Console.ReadLine()) P = 1
For i=2 To N Step 1 P = P * i
Next i
Console.WriteLine(Str(N) & "! = " & Str(P)) Console.ReadLine()
End Sub
End Module
При первом повторении значение счетчика равно 2. Одна строка, находящаяся в цикле, будет повторяться до тех пор, пока счетчик не превышает N. Значение счетчика изменяется после каждого повторения на величину шага. Отметим, что если шаг равен 1, то его можно не указывать.
Цикл может быть закончен до того момента, когда условие станет равным false. Эта возможность реализуется с помощью инструкции Exit For, помещенной в теле цикла, например:
If i>10 Then
Exit For
End If
После команды Exit For никакие команды в теле цикла больше не выполняются, а управление передается инструкции, следующей за концом цикла.
16
1.2. Создание консольного приложения на языке Visual Basic
При выполнении готового консольного приложения его окно имеет вид, подобный тому, что изображен на рис. 1.1.
File:///C:/prog1/bin/debug/prog1.exe |
_ |
|
|
Введите целое число = 8 8! = 40320
Рис. 1.1. Окно консольного приложения
Консольное приложение может быть создано в среде Visual Studio последовательностью команд: Файл – Создать – Проект –
Visual Basic – Консольное приложение. В появившемся окне (рис. 1.2) необходимо указать каталог для размещения папки проекта, а также ввести имя проекта. Введенное имя будет использовано для именования всех файлов проекта, в том числе исполняемого файла. После подтверждения имени проекта автоматически создаются все строки, необходимые в структуре программы: создается модуль, а также процедура main. После создания нового проекта программисту остается добавить в созданную структуру необходимый программный код.
Рис. 1.2. Создание консольного приложения
17
Впервой практической работе исходные данные будем получать
спомощью генератора случайных чисел, например, для получения очередного случайного числа используем функцию Rnd, которая генерирует случайное число в диапазоне от 0 до 1:
x= Rnd()
Первая программа на языке Visual Basic должна определить площадь плоской фигуры методом Монте-Карло. Фигура ограничена снизу прямой y = 0, слева и справа – прямыми x = a и x = b, а сверху
– кривой y = f(x). Функции, которые требуются в программе, принадлежат классу Math, например, Math.Sin. Некоторые функции, необходимые для разработки программ, приведены в табл. 1.1.
Таблица 1.1
Классы и методы, используемые в программах
Класс, |
Назначение |
|
метод |
||
|
||
Console |
Встроенный класс, поддерживающий консольные операции |
|
ввода вывода |
||
|
||
WriteLine |
Вывод строки на экран с переводом курсора в следующую |
|
строку экрана (метод класса Console) |
||
Write |
Вывод строки на экран без перевода строки, то есть курсор |
|
остается в той же строке экрана (метод класса Console) |
||
|
||
ReadLine |
Ввод строки с клавиатуры (метод класса Console) |
|
|
|
|
Convert |
Встроенный класс, поддерживающий преобразования одного |
|
базового типа данных в другой базовый тип |
||
|
||
ToInt32 |
Преобразование строки (тип String) в целое число (метод класса |
|
Convert) |
||
|
||
Random |
Встроенный класс – генератор случайных чисел |
|
|
|
|
NextDouble |
Случайное число от 0 до 1 (метод класса Random) |
|
|
|
|
Math |
Встроенный класс математических функций |
|
|
|
|
Sin |
Синус (метод класса Math) |
|
|
|
|
Cos |
Косинус (метод класса Math) |
|
|
|
|
Tan |
Тангенс (метод класса Math) |
|
|
|
|
Sqrt |
Квадратный корень (метод класса Math) |
|
|
|
|
Round |
Округление до указанного количества знаков после запятой |
|
(метод класса Math) |
||
|
||
new |
Создает новый экземпляр класса |
|
|
|
18
