Основы программирования на Visual Basic Кафедра экономической информатики МГУ Андрей Олегович Медников
История создания ЯП FORTRAN Algol 60 Simula Algol-68 Cobol Lisp Pascal C SmallTalk Ada C++Miranda BASIC Prolog Modula-2
Требования к алгоритмам Наличие ввода исходных данных Наличие вывода результата выполнения Однозначность Общность Корректность Конечность Эффективность.
Создание компьютерной игры Создание трехмерного графического движка. Написание модуля искусственного интеллекта созданий, населяющих уровень. Реализация управления с различных игровых манипуляторов. Создание звукового оформления....и так далее.
Сложение 2 чисел Считать число А Считать число В Выполнить суммирование А + В Вывести результат сложения Закончить работу
Решение уравнения ax=b Считать число А Считать число В Если число А = 0 и число В равно 0, то вывести на экран ответ (х – любое) и закончить программу. Если число А = 0 и число В не равно 0, то вывести на экран ответ (решений нет) и закончить программу. Вывести ответ В/А. Закончить программу
Переменные в ЯП Переменная – это одна или несколько ячеек оперативной памяти компьютера, которым присвоено определенное имя, то есть просто некое место в памяти компьютера, причем чаще всего, определенного размера, в котором хранятся какие-то данные.
Замечание об именах переменных Сравните: х1, у1 и MaxXResolution, MaxYResolution
Обязательное объявление переменных до использования В VB для того, чтобы включить обязательное объявление переменных, необходимо в начале модуля поставить строку Option Explicit
Объявление переменных Dim As Private As Public As Static As
Если слово As опущено Dim MaxXRes, MaxYRes as Integer Переменной MaxXRes будет присвоен тип не Integer, как мы бы могли ожидать, а Variant
Простые типы в VB BooleanTrue, False2 байта Byte0…2551 байт Integer байта Long~ … байта DecimalПримерно 30 десятичных цифр12 б. Single-3.4Е38…-1.4Е-45,1.4Е-45…3.4Е384 байта Double-1.7Е308…-4.9Е-324, 4.9Е-324…1.7Е3088 б. StringДо 2 16 символов Dateот 1 января 100 г. до 31 декабря 9999 г.8 б. ObjectСсылка на объект (указатель)4 байта Variant> 16 б.
Примеры объявлений перем. Dim MaxXRes As Integer, MaxYRes as Integer Dim Count As Long Dim CellIsEmpty As Boolean Dim QuestionText As String
Оператор присваивания х=х+1 Этот оператор решает 3 важные задачи: Вычисление значения выражения в правой части оператора. Вычисление выражения в левой части оператора присваивания, выражение должно определять адрес ячейки памяти. Копирование значения, вычисленного на шаге 1, в ячейки памяти, начиная с адреса, полученного на шаге 2.
Оператор присваивания [Let] =. MaxXRes = 1024 MaxYRes = 768 Count = CellIsEmpty = True QuestionText = "Who am I?" Count = Count + 1 MaxNumbOfPoints = MaxXRes* MaxYRes NumbOfBits = NumbOfBytes*8
Модуль в VB Sub Name1() … End Sub
Ввод информации в VB stringvar = InputBox (Prompt [, Title]) MaxXRes = InputBox (Введите макс. разр. по оси Х)
Вывод информации в VB MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Программа сложения 2 чисел 'Option Explicit Sub SumExamp() Dim A as Integer, B As Integer, Sum As Integer A = InputBox("Введите первое слагаемое") B = InputBox("Введите второе слагаемое") Sum = A + B MsgBox ("Сумма " & A & и " & B & = " & Sum) End Sub
Обмен значений Dim A As Integer, B As Integer, Temp As Integer A = 5 B = 10 Temp = A A = B B = Temp
Обмен значений в случае целых Dim A As Integer, B As Integer A = 5 B = 10 A = A + B B = A – B A = A – B
Константы Const ИмяКонст [As ТипКонст] = ЗначКонст Const Pi As Double = Const Tax As Single = 0.13 Const Greeting = "Привет"
Процедурная область действия Sub Sum() Dim A As Integer, B As Integer, C As Integer A = 5 B = 7 C = A + B MsgBox "Сумма А и В = " & C End Sub Sub Difference() Dim A As Integer, B As Integer, C As Integer A = 5 B = 7 C = A - B MsgBox " Разность А и В = " & C End Sub
Модульная область действия Option Explicit Const Pi = Sub CircleLength() Dim Radius As Double Dim Length As Double Radius = InputBox("Введите радиус…") Length = Radius * 2 * Pi MsgBox "Длина окружности радиуса " & Radius & " равна " & Length End Sub
Переменные с один. именами в разных областях действия Option Explicit Const Test As Integer = 100 Sub Test1() Dim Test As Double Test = MsgBox Test End Sub Sub Test2() Dim Test As String Test = "aaaaaaaaa" MsgBox Test End Sub Sub Test3() MsgBox Test End Sub
Время жизни переменных Время жизни переменных определяет, как долго переменная сохраняет свое значение. Переменная, объявленная внутри процедуры при помощи Dim, теряет свое значение при выходе из нее. Для объявления переменной на процедурном уровне, но со временем жизни модуля – Static. Static NumberOfCalls as Integer
Математические операции ^ Возведение в степень * / Умножение и деление \ Целочисленное деление Mod Нахождение остатка + - Сложение и вычитание
Операции сравнения > Больше, чем < Меньше, чем >=Больше или равно, чем
Сравнение строк "фио"="фио" "фио"" фио" "фио" < "фио " "фиот" > "фио"
Сравнение строки с шаблоном StrExpr Like Templ Символы в шаблоне: # * ? [list] [!list] В квадратных скобках также можно указать и диапазон ([a-z])
Сравнение строки с шаблоном - пример Sub TemplateExamp() Dim MyCheck MyCheck = "aBBBa" Like "a*a" ' Возвращает True. MyCheck = "F" Like "[A-Z]" ' Возвращает True. MyCheck = "F" Like "[!A-Z]" ' Возвращает False. MyCheck = "a2a" Like "a#a" ' Возвращает True. MyCheck = "aM5b" Like "a[L-P]#[!c-e]" ' Возвращает True. MyCheck = "BAT123khg" Like "B?T*" ' Возвращает True. MyCheck = "CAT123khg" Like "B?T*" ' Возвращает False End Sub
Логические операции NotЛогическое Не AndЛогическое И OrЛогическое Или
Таблица истинности ХTRUETRUEFALSEFALSE YTRUEFALSETRUEFALSE NOT XFALSEFALSETRUETRUE X AND YTRUEFALSEFALSEFALSE X OR YTRUETRUETRUEFALSE
Порядок вычисления 1. Вначале всегда части выражения, заключенные в круглые скобки, если выражение в круглых скобках само сложное, то применяем эти же правила. 2. Затем выполняем в соответствии с приоритетом (смотри таблицу ниже) 3. Если равный уровень приоритета, то вычисляем слева направо.
Приоритет операций Dim A As Integer, B As Integer A = 6+5*4 B = (6+5)*4 Внимание, A не равно B!!!
Приоритет операций - Знаки арифметических операций - Знаки конкатенации строк - Операторы сравнения - Логические операторы
Приоритет операций ^ - возведение в степень - - унарный минус */ - умножение и деление \ - целочисленное деление Mod - остаток +, - & =, Like, Not And Or Xor Eqv
Найти значение Result Dim Result As Boolean, X As Boolean Dim Y As Boolean, Z As Boolean Dim A As Integer, B As Integer A = 5: B = 10 X = FALSE: Y = TRUE: Z = FALSE Result = X AND (Y OR (Z AND Y) AND _ (NOT (X OR Z))) OR ( A > B)
Оформление программы Символ разделения 2 операторов в одной строке - двоеточие: A = 5: B = 7 Если оператор не помещается в одной строке, пробел и подчеркивание: MyAddr = "Город:"& City&", улица:"&Street _ &"дом:"&Number Комментарий – все, что после апострофа Dim Count As Integer Count – cчетчик числа элем.
Оператор простого выбора If Условие Then Операторы [Else Операторы] Пример 1: If Balance - Check < 0 Then MsgBox На вашем счету перерасход Пример 2: Sub TestIf() Dim Number as Integer Number = InputBox(Введите число) If Number > 0 Then MsgBox (Положительн.) Else MsgBox (Отрицат.) End Sub
Многострочный оператор простого выбора If Условие Then Оператор1 … ОператорN End If Или же, при необходимости второй ветви: If Условие Then Оператор1 … ОператорN Else Оператор1 … ОператорN End If
Многострочный оператор простого выбора If Balance - Check < 0 Then MsgBox "Ваши средства израсходованы!" MsgBox "Банк уведомлен!" Else Balance = Balance - Check End If
Вложенные операторы If… Then Option Explicit Sub DiscountCalculation() Dim InitialPrice As Double, PriceToPay As Double InitialPrice = InputBox("Введите цену покупки") If InitialPrice > Then PriceToPay = InitialPrice * 0.9 Else If InitialPrice > 5000 Then PriceToPay = InitialPrice * 0.95 Else If InitialPrice > 1000 Then PriceToPay = InitialPrice * 0.9 Else PriceToPay = InitialPrice End If MsgBox "С вас - " & PriceToPay & " руб." End Sub
Решение уравнения ax=b Option Explicit Sub LinearEq() Dim A as Double, B as Double, X as Double A = InputBox(Введите коэф. А) B = InputBox(Введите коэф. B) If (A = 0) And (B=0) Then MsgBox Х – любое число Else If A=0 Then MsgBox Решений нет Else X = B / A MsgBox X = & X End If End Sub
Решение квадратного уравнения (не полн.) Option Explicit Sub SqrEq() Dim A as Double, B as Double, C as Double, D As Double Dim X1 as Double, X2 as Double A = InputBox(Введите коэф. А) B = InputBox(Введите коэф. B) C = InputBox(Введите коэф. C) D = B*B –4*A*C If D < 0 Then MsgBox Решений нет Else If D = 0 Then X = - B / (2*A) MsgBox Решение – х = & X Else X1 = (-B – SQRT(D)/(2*A) X2 = (-B + SQRT(D)/(2*A) MsgBox Решения: х1 = & X1 & x2 = & X2 End If End Sub
Оператор множественного выбора Select Case Case Case … [Case Else ] End Select Пример: Select Case Argument Case Is < 0 … Case 0 To 10 … Case 100, 1000, … Case Else … End Select
Встроенные функции преобразования данных Asc(S) – код первого символа строки S Chr(X) – строка из 1 символа, соотв. коду Х Str(X) – строка, представляющая число Х Val(S) – число, соотв. числу, представленному строкой S, если строка содержит не только цифры и 1 точку, но возвращает 0.