Учебные материалы по математике | Лекции по visual basic | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Лекции по visual basic


Представление информации

Представление информации будет рассматриваться применительно к языку программирования Visual Basic (далее будет применяться сокращение VB).

Представление символов

Для записи символа отводится ячейка памяти длиной в 1 байт. Каждому символу в соответствии с таблицей ASCII поставлен в соответствие код из диапазона от 0 до 255, например:

Символ

Десятичный код

Содержание ячейки памяти

A

97

01100001

B

98

01100010

01100010

C

99

01100011

D

100

01100100

.

.

.

.

.

.

.

.

.

0

80

01010000

1

81

01010001

2

82

01010010

3

83

01010011

.

.

.

.

.

.

.

.

.

Пробел

32

00100000

Представление целых чисел (способ с фиксированной точкой)

Ячейка памяти может быть длиной 1, 2 или 4 байта.

Целые типы в VB

Название типа

Длина ячейки памяти в байтах

Диапазон значений

Byte (байт)

1

От 0 до 255

Integer (целый)

2

От -32 768 до 32 767

Long (длинный целый)

4

От -2 147 483 648 до 2 147 483 647

Пример представления целого числа 3 типа Byte (снизу указаны веса разрядов):

0

0

0

0

0

0

1

1

Значения разрядов

27

26

.

.

.

22

21

20

Веса разрядов

Следует сразу обратить внимание на принципиальное отличие символа от числа (например, символа 3 и числа 3). Несмотря на внешнее совпадение их изображений, они рассматриваются как разные объекты, между которыми нет никакой связи. Двоичный код символа 3 (01010011) отличается от двоичного кода числа 3 (00000011).

На запись знака не отведено места. Поэтому числа типа Byte могут быть только положительными. Максимальное значение, которое может быть записано по типу Byte равно 28 – 1 = 255.

Рассмотрим пример представления целого числа 21 типа Integer:

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

1

Знак

214

213

.

.

.

22

21

20

Знаковый разряд имеет значение 0 для положительных чисел и значение 1 для отрицательных чисел. Отрицательные числа записываются в так называемом дополнительном коде, но это выходит за рамки нашего рассмотрения.

Итак, один разряд отведен под знак и оставшиеся 15 разрядов – под значение числа. Максимальное значение абсолютного значения числа легко вычислить, для неотрицательных чисел это 215 – 1 = 32767, для отрицательных чисел это 215 = 32768.

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

Представление чисел с дробной частью (способ с плавающей точкой)

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

Поясним идею этого метода в привычной для нас десятичной системе счисления. Любое действительное число может быть записано в научном формате, например:

123456000000000 = 1,23456*1014 = 0,123456*1015 или

0,00000000123456 = 0,123456*10-8

Очевидно, что любое число z в десятичной системе счисления может быть записано в таком формате в виде:

z = + – 0,m* 10+ –p,

где:

m – дробная часть, называемая мантиссой;

p – целое число, называемое порядком.

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

Все это верно и для двоичной системы счисления:

z = + – 0,m* 2+ –p,

где z, m и p записаны в двоичной системе счисления.

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

Ячейка памяти для данных с дробной частью может быть длиной 4 или 8 байтов.

Типы для данных с дробной частью

Название типа

Длина ячейки памяти в байтах

Диапазон значений

Single

(с плавающей точкой обычной точности)

4

Абсолютное значение находится примерно в диапазоне от 1,4*10-45 до 3,4*1038. Значение 0 не может быть представлено точно.

Точность 6 – 7 десятичных разрядов

Double

(с плавающей точкой двойной точности)

8

Абсолютное значение находится примерно в диапазоне от 4,9*10-324 до 1,7*10308

Точность 14 – 15 десятичных разрядов

Посмотрим для примера, как могла бы быть использована для представления числа ячейка памяти длиной 4 байта.

0

0

0

0

0

1

0

1

0

1

0

1

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Знак порядка

Порядок

Знак числа

Мантисса

Байт

Байт

Байт

Байт

Один байт отведен под знак порядка и порядок. Оставшиеся три байта отведены под знак числа и мантиссу.

В качестве примера, посмотрим, как будет записано знакомое нам по прошлой лекции число 21,75.

21,75(10) = 10101,11(2) = 0, 1010111*25

Мантисса равна 1010111, порядок равен 5.

5(10) = 101(2)

На расположенном выше рисунке показано, как это число будет записано в ячейке памяти.

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

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

Некоторые важные итоги

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

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

3.  Арифметические операции с операндами целого типа выполняются быстрее, чем с операндами типа с плавающей точкой.

4.  Арифметические операции с операндами целых типов выполняются точно (кроме операции деления).

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

Программирование на языке Visual Basic

О Visual Basic (далее VB) в сравнении с другими языками.

VB — лидер в технологии программирования. Лидер ли? Давайте посмотрим на предмет трезвым взглядом. По быстродействию — слаб, по мощности используемых библиотек доступа к системным ресурсам — тоже не очень, по возможностям работы с графикой, совсем не весьма. Что же остается?

А остается то, что и сделало VB одной из платформ-лидеров :

1.  Стандартный пользовательский интерфейс пишется на нем очень быстро и непринужденно. Полученный результат выходит стандартным в применении, и каким угодно "навороченным" во внешнем виде. Это раз. Без этого VB не стал бы популярен, но не это так продвинуло его вперед.

2.  Доступ к базам данных. Удобный, быстрый, легко реализуемый.

3.  Глубокая интеграция с Микрософт Офис. Вот те коньки, на которых VB едет вперед, и не думает уступать пальму первенства другим.

Гигантский плюс — время разработки приложения минимально. И это ценится.

Там где требуются высокая скорость разработки приложения — для VB практически нет альтернативы.

Очень сильное преимущество VB в его, скажем так, распространенности или стандартизованности. VB внедрен в виде VBA во все офисные приложения, а также в некоторых других продуктах.

С выходом 5-й, 6-й и 7-й версий (VB. NET) даже самые стойкие скептики, озабоченные, однако, поиском профессионального инструмента разработки современных приложений, разобравшись во всех его обширных возможностях, скажут: "Да, это — то, что нам нужно".

Что такое Visual Basic сегодня?

Microsoft Visual Basic сегодня является чрезвычайно эффективным инструментом создания быстродействующих приложений, который удовлетворит любые потребности разработчика.

Шесть лет назад Microsoft Corporation инициировала революционные перемены в области создания приложений. С появлением системы программирования VB программисты получили возможность быстро разрабатывать приложения для Windows, что ранее было сопряжено со значительными трудностями. В результате, используя технологии VB, несколько миллионов разработчиков создают сегодня приложения с беспрецедентной производительностью и легкостью.

Более того, в последних версиях VB революция продолжается. Microsoft Corporation последовательно реа­лизует в нем доктрину "каждый компьютер — часть Internet". VB позволяет программисту, создавая компоненты ActiveX, осваивать новые технологические области, такие как Internet и внут­ренние сети, не отказываясь от существующего наработанного кода и навыков проектирования. Раз­работчики Web-приложений и систем клиент/сервер более не ставятся перед необходимостью делать выбор между себестоимостью и производительностью, масштабируемостью и быстрой разработкой приложения, между моделями локальных вычислительных сетей и технологиями Internet. Запустив VB, они попадают в мир реальных прогрессивных технологии, требующих лишь своего изучения и эффективного применения.

Правила присвоения имен в языке VB

При назначении имен переменным, константам, процедурам и аргументам в VB используются следующие правила:

*  имя должно начинаться с буквы;

*  имя может включать только буквы, цифры, символ подчеркивания (_), который на клавиатуре находится над знаком минус (-);

*  имя не должно содержать более 255 символов.

Обратите внимание, имя не может содержать пробел ( ), точку (.), запятую (,), восклицательный знак (!) или символы (@), (&), ($), (#). Очень распространенной ошибкой начинающих программистов является включение пробела в состав имени, например, имя Проект 1 является неправильным. Правильным будет имя Проект_1 или Проект1. Оба эти варианта отличаются от исходного неправильного варианта тем, что не содержат пробела.

Не следует использовать имена, совпадающие с зарезервированными словами языка.

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

Следует придерживаться определенных правил написания программ. Каждая инструкция должна начинаться с новой строки.

Print "Привет мир"

a = 1

Начиная с версии VB 6.0 допускается в одной строке помещать несколько инструкций, если их разделять символом двоеточие (:). Однако, не следует часто пользоваться этой возможностью.

Пример:

Print "Привет мир": Print "Привет Олег"

Начиная с версии VB 4.0, появилась возможность длинную инструкцию размещать не в одной строке, а в нескольких. Разделителем строк служит пара символов: пробел и следующий за ним символ подчеркивания ( _). Это дает возможность размещать длинные, трудно обозримые строки программного кода так, чтобы они полностью помещались на странице экрана.

Строка программы в VB может содержать максимум 1023 символа и не более десяти разделителей – этого обычно достаточно.

B VB, как и в большинстве языков программирования, могут быть использованы комментарии. Комментарии предназначены для пояснения отдельных фрагментов программы и игнорируются VB при выполнении программы. Для выделения начала комментария можно использовать или верхнюю запятую (‘), или инструкцию Rem – их действие одинаково. Rem представляет собой инструкцию и поэтому должна находиться в отдельной строке. Верхняя запятая может ставиться в любом месте строки, при этом текст комментария располагают справа:

Rem Это комментарий

Print "Привет мир" ‘Это тоже комментарий

Число строк кода (формы, модуля и т. п.) ограничивается 65534. Это ограничение не существенно, поскольку число строк в большинстве программ меньше.

Переменные и константы

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

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

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

Ячейка памяти под переменную отводится как результат объявления переменной в программе. В программном коде мы оперируем именем переменной. Но соответствующие действия на самом деле выполняются над содержимым ячейки памяти, которая отведена для этой переменной.

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

К константам относится все то, что сказано выше о переменных. Константа, как и переменная, может иметь имя, для хранения ее значения отводится ячейка памяти. Но есть одно существенное отличие. Константа в отличие от переменной не может изменить значение при выполнении программы. Переменные и константы – это данные.

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

Познакомимся с системой типов данных VB.

Основные типы данных VB

Тип данных

Размер ячейки в байтах

Диапазон значений

Byte (байт)

1

От 0 до 255

Integer (целый)

2

От -32 768 до 32 767

Long (длинный целый)

4

От -2 147 483 648 до 2 147 483 647

Single

(с плавающей точкой обычной точности)

4

Абсолютное значение находится примерно в диапазоне от 1,4*10-45 до 3,4*1038

Точность 6 десятичных разрядов

Double

(с плавающей точкой двойной точности)

8

Абсолютное значение находится примерно в диапазоне от 4,9*10-324 до 1,8*10308

Точность 14 десятичных разрядов

Currency

(денежный)

8

От -922 337 203 685 477,5808 до

922 337 203 685 477,5807

String (строка переменной длины)

10 байт + длина строки

Длина строки от 0 до приблизительно 2 миллиардов символов

Date (дата/время)

8

От 1 января 100 г. до 31 декабря 9999 г.

Boolean (логический)

2

True или False

Variant

(универсальный тип)

16 байт+ длина строки

Дата/время; числовые значения с тем же диапазоном, что и для Double; строки с тем же диапазоном, что и для String

Type (опреде-ляемый поль-зователем

тип)

Опреде-ляется компо-нентами

Диапазон каждого элемента определяется его типом данных.

Object (объект)

4

Любой указатель объекта

Если, к примеру, в программе имеется переменная типа Integer с именем КоличествоСтудентов, то где-нибудь в программе можно записать:

КоличествоСтудентов = 1000

и для всех инструкций, которые появятся после этого, переменная КоличествоСтудентов будет всегда равна числу 1000 – пока, возможно, не появится инструкция

КоличествоСтудентов = 1050

КоличествоСтудентов в этой инструкции является именем переменной, а 1000 в этом примере — её значением.

Инструкцию КоличествоСтудентов = 1000 называют инструкцией присвоения: переменная КоличествоСтудентов получает значение, равное 1000.

Эту инструкцию нельзя понимать в том смысле, что левая часть равна правой части. Присвоение – это действие, заключающееся в том, что значение правой части записывается в ячейку памяти, отведенную для хранения значения переменной, находящейся слева от знака равенства в инструкции присвоения. Будет ошибкой записать эту инструкцию так:

1000 = КоличествоСтудентов

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

Переменные типов Byte, Integer, Long, Single, Double, Currency принимают числовые значения.

Типы Byte/Integer/Long

Данные типа Byte, Integer, Long содержат лишь целые числовые значения из различных диапазонов. Если переменной такого типа присваивается 1.4, то возвращается 1, если 1.5 – возвращается 2:

Dim n As Integer

n =1.7 ‘Результат: 2

Типы Single/Double/Currency

Данные типа Single и Double содержат числа с плавающей точкой из разных диапазонов значений. Single – с 6 верными десятичными разрядами после запятой, Double – с 14 верными десятичными разрядами после запятой. Данные типа Currency также служат для представления чисел с плавающей точкой, но число разрядов после запятой ограничено четырьмя. Этого доста­точно при выполнении денежных расчетов:

Dim s As Single, a As Single

s =1.7 ‘Результат: 1.7

a = — 62.697

В VB в качестве разделителя целой и дробной частей используется точка.

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

Константы типа Single с порядком выглядят так:

Так выглядит константа с порядком

А вот чему равно ее значение

1.5Е-8

1.5*10-8 или 0.000000015

1E-6

0.000001

1.256578E5

125657.8

При записи констант типа Double вместо буквы E применяется буква D, что сигнализирует VB, что константа имеет тип с плавающей точкой, но не обычной, а двойной точности.

Так выглядит константа с порядком

А вот чему равно ее значение

1.5D-8

1.5*10-8 или 0.000000015

1D-6

0.000001

1.256578E5

125657.8

К числовым переменным можно применять арифметические операции сложения (+), вычитания (-), умножения (*), деления (/), возведения в степень (^) и некоторые другие, с которыми мы ознакомимся позже.

Тип String

Значением переменной типа String может быть символ или строка символов.

Для того чтобы VB отличал константу типа строки символов от имени переменной, константа заключается в парные кавычки:

Dim Переменная As String

Переменная = "Привет Мир" ‘Результат: Привет Мир

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

Dim a As String, b As String, c As String

a = “Петр”

b = “великий”

c = a+b ‘Значение: Петр великий

c = a&b ‘Значение: Петр великий

Тип Date

Значением переменной типа Date может быть, дата, время или дата и время.

Данные типа Date специально предназначены для обработки информации о дате и времени. Чтобы для VB было понятно, что под указанным значением подразумевается дата и/или время, нужно поместить его между двумя знаками #. При вводе следует пользоваться американским форматом (мм/дд/гг). Если же при вводе данных этого типа использовать кавычки ("), что допустимо, то следует применять установленный в системе формат даты и времени ( как правило – дд/мм/гг):

Dim d As Date

d = #10/16/95# ‘Результат: 16.10.95

d = #1:25:00 PM# ‘Результат: 13:25:00

d = "6.10.95" ‘Результат: 6.10.95

d = "13:25" ‘Результат: 13:25:00

Тип Boolean

Переменная типа Boolean может принимать всего два значения. Такая переменная может иметь значение True (истина) или значение False (ложь).

В VB значению True соответствует 1, а False — 0. Если переменной этого типа присваивается значение 0, то переменная содержит False. Все другие значения подразумевают True:

Dim nVar As Boolean

nVar = 5 ‘Результат: True

Тип Variant

Универсальный тип данных Variant — это хамелеон. Он устанавливает тип данных в зависимости от содержимого. Если в такой переменной содержится число, то переменная типа Variant принимает соот­ветствующий тип данных.

Если ее содержимое — число 5, то она принимает тип Integer;

если 1.2— Double; если текст, то String. Переменная типа Variant изменяет свой тип во время выполнения программы. Вот простой пример:

Dim V As Variant

V = "25" ‘V содержит "25" (String)

V = V +5 ‘V содержит 30 (Integer)

V = V & " штук" ‘V содержит "30 штук" (String)

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

Структура проекта

Проект обычно включает в свой состав один или несколько контейнеров (рис. 4.1).

Рис. 4.1. Структура проекта

Контейнером может быть форма или модуль.

Форма (см. рис. 4.2) может содержать объекты (надписи, кнопки и т. д.) и программный код. При выполнении приложения она отображается на экране монитора в виде окна. Модуль отличается от формы тем, что он может содержать программный код, но не может содержать объектов и никак не отображается при выполнении проекта.

Рис. 4.2. Структура формы

Рис. 4.3. Структура программного кода модуля

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

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

Объявления процедур и функций могут содержать как инструкции – объявления, так и выполняемые инструкции. Таким образом, весь выполняемый программный код в VB может быть только частью процедуры или частью функции.

Объявление процедуры состоит из заголовка, включающего зарезервированное слово Sub, тела и конечной строки End Sub:

Sub

Инструкции (тело процедуры)

End Sub

Объявление функции состоит из заголовка, включающего зарезервированное слово Function, тела и конечной строки End Function:

Function

Инструкции (тело функции)

End Function

Переменные

Переменные обладают типом. Тип переменной устанавливается либо в результате явного объявления, либо системой устанавливается тип Variant, когда тип явно не указан.

Синтаксис объявления переменной:

Static/Public/Private/Dim ИмяПеременной [As Тип]

В подобных определениях синтаксиса прямоугольные скобки […] означают, что конструкция, находящаяся внутри этих скобок, не обязательна. Символ (/) означает, что должно быть выбрано одно из слов, между которыми он поставлен. Сами же символы ([), (]), (/) в текст объявления не включаются.

Зарезервированное слово Dim (размерность) при объявлении переменных применяется чаще всего, например:

Dim b15 As Single, Количество As Integer

Dim S29 As String

Здесь явно объявлены три переменные: b15 типа Single, Количество типа Integer и S29 типа String.

Область видимости переменных

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

локальная: переменная доступна только внутри процедуры или функции, в которой она объявлена;

контейнера: переменная доступна только внутри той формы или того модуля, где она объявлена;

глобальная: переменная доступна во всем проекте.

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

Локальными являются переменные, объявленные внутри процедуры или функции. Они доступны только внутри этой процедуры или функции.

Переменные контейнера

Переменные контейнера определяются в главной секции (General) и доступны только внутри соответствующего контейнера, т. е. формы, или модуля.

Глобальные переменные

Глобальные переменные определяются в главной секции (General) модуля. При этом вместо оператора Dim используется зарезервированное слово Public. Глобальные переменные доступны во всех модулях и формах проекта.

Время жизни переменных

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

Статические переменные

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

Для объявления переменной как статической нужно просто вместо зарезервированного слова Dim использовать слово Static:

Private Sub Commandl_Click()

Static A As Integer

Dim В As Integer

A = A + 1

В = В + 1

.

.

.

End Sub

В одной строке можно объявить несколько переменных, но при этом следует для каждой указывать имя типа:

Dim a As Integer, b As Integer, c As Long

Dim e As Integer, f, g

В первой строке объявлены две переменные типа Integer и одна переменная типа Long. Во второй строке – одна переменная типа Integer, а две другие — типа Variant по умолчанию.

При объявлении переменной одного из числовых типов ей не только отводится ячейка памяти, но она еще получает значение 0.

При объявлении переменной типа Boolean она получает значение False.

При объявлении переменной типа String она получает значение пустой строки “”.

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

Однако такая практика является источником ошибок и ее следует избегать. Чтобы VB расценивал любую необъявленную явно переменную формы или модуля как ошибочную, в главной секции формы или модуля первой должна следовать инструкция Option Explicit. Эта инструкция налагает требование явного объявления всех переменных этой формы или модуля. Если модуль содержит инструкцию Option Explicit, при попытке использования неописанного или неверно введенного имени переменной возникает ошибка во время исполнения программы.

Можно так настроить среду VB, что инструкция Option Explicit будет автоматически помещаться системой VB в главной секции создаваемой формы или модуля. Для этого следует выполнить команды меню Tools (сервис), затем Options (свойства), затем на вкладке Editor (редактор) установить флажок в окошке Require Variable Declaration (требовать объявления переменных) и, наконец, щелкнуть на кнопке ОК. Но это следует сделать до создания формы или модуля.

Константы

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

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

Синтаксис объявления константы:

[Public/Private] Const ИмяКонстанты [As Тип] = Значение

Приведенное определение синтаксиса означает, что объявление константы содержит обязательное слово Const (константа). Перед Const может стоять Private (локальная) или Public (общая), то есть одно из слов, задающих область действия константы. Затем должно следовать имя константы. После имени может стоять слово As и наименование типа. Затем должен следовать знак равенства и значение константы.

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

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

Public Const Age As Integer = 54

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

В следующем примере описываются локальные константы Pi и Wg как Single.

Const Pi As Single = 3.14159, Wg As Single = 2.78

Примеры демонстрируют преимущество использования констант: например, при вычислениях с числом π в программе не нужно каждый раз вводить длинное число, а только имя константы Pi:

vCircle = Pi * vRadius ^ 2

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

Преобразование и совместимость типов

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

В отношении типов VB проявляет максимально возможную терпимость. Когда это возможно, преобразование одного типа в другой будет выполнено автоматически и программисту нет нужды об этом заботиться. Следует при этом иметь в виду:

*  При преобразовании числа с плавающей точкой в целое происходит округление до ближайшего целого.

*  При преобразовании целого числа в число с плавающей точкой дробная часть принимается равной нулю.

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

*  Строковые и числовые типы совместимы. Можно присвоить числовое значение строковой переменной и наоборот. Однако строка символов должна быть такой, чтобы она могла трактоваться как число.

Например, не возникнет ошибки периода выполнения при присвоении свойству Caption некоторой надписи, которое имеет тип String, значения 125 переменной типа Integer. Произойдет преобразование целого числового значения 125 в строку символов “125”.

И наоборот. При присвоении переменной целого типа значения свойства Text некоторого текстового поля, которое имеет тип String (пусть, например, в этом текстовом поле набрано три символа 125) произойдет преобразование строки символов “125” в целое число и целочисленная переменная получит значение 125.

Sub A

1: Dim i As Integer

2: i = Label1.Caption

3: Label1.Caption = 250

End Sub

В теле этой процедуры в строке 2 происходит преобразование значения свойства Caption из типа String к типу Integer. В строке 3 происходит преобразование значения целой константы 250 к типу String, который имеет свойство Caption.

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

Sub B

Dim i As Integer, str As String, _

r As Integer

i = 5

str = “25”

r = i * str ‘Результат: 125. String -> Integer

End Sub

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

В операции операнд1 + операнд2 символ (+) VB будет воспринимать как:

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

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

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

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

Пример.

Dim i As Integer

Dim r As Single

Dim st1 As String, st2 As String

Private Sub Command1_Click ()

i = 2

r = -1.3

st1 = r + i ‘Результат: “0.7”

‘Integer-> Single, Single -> String

End Sub

Остановимся подробнее на существенных, но на первый взгляд не заметных, особенностях выполнения инструкций процедуры Command1_Click. При выполнении этих трех инструкций два раза осуществляется преобразование типа.

В инструкции St1 = r + i при выполнении арифметической операции сложения тип Integer операнда i преобразуется к типу Single операнда r, так как арифметическая операция может быть выполнена над однотипными операндами.

Наконец, результат сложения типа Single преобразуется к типу String переменной St1.

Пример. Рассмотрим продолжение программного кода предыдущего примера.

Private Sub Command2_Click()

st1 = 25 ‘Результат: “25”

st2 = 15 ‘Результат: “15”

st2= st1 + st2 ‘Результат: “2515”

End Sub

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

Продолжим программный код, приведенный в двух предыдущих примерах. Введем следующий программный код:

Private Sub Command2_Click()

st1 = 2

st2 = 3

st1 = 25 + st1 + st2 ‘Результат: “30”

‘String -> Integer, String -> Integer

‘Integer -> String

End Sub

При выполнении вычисления значения выражения 25 + st1 + st2 первой выполняется операция 25 + st1. В этой операции один операнд (константа 25) имеет числовой тип, а другой (строка st1) имеет значение, которое может быть интерпретировано как число. Поэтому здесь символ (+) воспринят как операция сложения. Результат операции сложения (27) тоже имеет числовой тип, поэтому символ (+) в следующей операции 27+3 также воспринят как операция сложения и, в конце концов, получен понятный результат 30.

Изменим порядок следования операндов в инструкции присвоения st1 = 25 + st1 + st2, применив вместо нее инструкцию st1 = st1 + st2 + 25.

Переменная st1 на первый взгляд получит неожиданный результат вычислений “48”. Изменение порядка слагаемых привело к изменению значения результатов вычислений! Почему? Дело в том, что первой теперь выполняется операция st1 + st2, в которой символ (+) воспринимается как операция сцепления, поскольку оба операнда имеют строковый тип. Результат операции соответственно тоже имеет строковый тип и равен “23”. При выполнении следующей операции “23” + 25 символ (+) будет воспринят, как операция сложения, поскольку один операнд (константа 25) имеет числовой тип, а другой операнд (“23”) может быть интерпретирован как число.

Итак, в VB в отличие от математики сумма может зависеть от порядка слагаемых.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020