Пример 4.2.2-2.Создать проект, показывающий использование фундаментальных (базовых) типов данных.

1)Запустить VS.

2)Выполнить команды, позволяющие создать проект Пример-2.2-2.

В окне Конструктор формпоявится пустая форма Пример2.2-2.

На ней необходимо создать форму проекта Пример 2.2-2(рис.4.2.2-4).

Проект Фундаментальные типы данных – это учебный проект, который будет демонстрировать работу основных типов данных. Необходимо обратить внимание, на то, где должны рас­полагаться объявления переменных так, чтобы они были доступны для всех процедур событий проекта.

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

ListBox – это список, в который можно записывать и из которого можно выбирать одно из предложенных значений. Значения в списке могут размещаться в одну или несколько колонок в зависимости от значения свойства MultiColumn. Если элементы списка расположены в нескольких колонках, с помощью свойства ColumnWidth можно изменить заданную по умолчанию ширину колонок.

 

 

Рис. 4.2.2-4. Форма проекта Пример 4.2.2-2

 

Элементы в списке могут добавляться во время разработки проекта и программой – во время выполнения программы.

При формировании списка во время проектирования с помощью свойства Itemsвручную задается весь необходимый список. После задания всех элементов нужно нажать кнопку OK, окно редактора элементов управления закроется, а элемент управления ListBoxбудет отображать указанные значения.

3)В окне Редактор кода дописатьпрограммный код (рис. 4.2.2-5).

 

Public Class Form1 Dim Birds AsShort Dim Insects AsInteger Dim WorldPop AsLong Dim Price As Single Dim Pi As Double Dim Debt As Decimal Dim RetKey AsByte Dim UnicodeChar As Char Dim Dog As String Dim Flag As Boolean Dim Birthday As Date Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles ListBox1.SelectedIndexChanged Select Case ListBox1.SelectedIndex Case 0 Birds = 12500 Label3.Text = Birds Case 1 Insects = 37500000 Label3.Text = Insects Case 2 WorldPop = 4800000004 Label3.Text = WorldPop Case 3 Price = 899.99 Label3.Text = Price Case 4 Pi = 3.1415926535 Label3.Text = Pi Case 5 Debt = 7600300.5 Label3.Text = Debt Case 6 RetKey = 13 Label3.Text = RetKey Case 7 UnicodeChar = "Д" Label3.Text = UnicodeChar Case 8 Dog = "pointer" Label3.Text = Dog Case 9 Flag = True Label3.Text = Flag Case 10 Birthday = #3/1/1963# Label3.Text = Birthday End Select End Sub     Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) HandlesMyBase.Load ListBox1.Items.Add("Short") : ListBox1.Items.Add("Integer") ListBox1.Items.Add("Long") : ListBox1.Items.Add("Single") ListBox1.Items.Add("Decimal") : ListBox1.Items.Add("Byte") ListBox1.Items.Add("Char") : ListBox1.Items.Add("String") ListBox1.Items.Add("Boolean") : ListBox1.Items.Add("Date") End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click End End Sub End Class

 

Рис. 4.2.2-5. Программный код проекта Пример 2.2-2

 

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

Необходимо также отметить, что в процедуре событий

PrivateSubListBox1_SelectedIndexChanged(…) используется оператор SelectCase, который подробно будет рассмотренв Теме 4.4.

4)Щелкнуть по кнопке Начать отладку на стандартной панели инструментов.

 

Рис. 4.2.2-6. Форма проекта Пример.2.2-2после загрузки формы

 

Появится окно приложения, изображенное на рис. 4.2.2-6.

Программа Фундаментальные типы данныхпозволяет проводить эксперименты с 11 типами данными. При щелчке на имени типа в поле спис­ка программа отображает пример данных этого типа.

5)Щелкнуть в поле списка на типе Integer.

В поле формы Пример данных появится число 37 500 000. Заметьте, что ни один из типов, данных Short, Integer и Long не позволяет вводить или отображать в их значениях десятичные точки.

6)Щелкнуть в поле списка на типе Date.

В поле формы Пример данных появится дата 3/1/1963.

7)Чтобы увидеть, как VB отображает типы данных в поле Пример данных, необходимо щелкнуть в поле списка на каждом из них.

8)Чтобы остановить программу, щелкните на кнопке формы Выход

9)Теперь необходимо посмотреть, как в форме объявляются базовые типы данных и как они используются в процедуре ListBox1_Selected_IndexChanged(…).

10)Рассмотрим процедуру события Form1_Load(…) (рис.4.2.2-5).

Операторы этой процедуры добавляют значения в элемент управления ListBox при загрузке формы в начале отладки.

11)Процедуру ListBox1_SelectedIndexChanged(…) обрабатывает вы­бор, сделанный в поле списка. Основой этой процедуры события является условная конструкция SelectCase. Обратите внимание, как каждый выбор блока SelectCase присваивает заданное значение од­ной из переменных базового типа данных, а затем присваивает зна­чение этой переменной свойству Text объекта Label3 формы.

Попробуйте изменить данные в нескольких операторах присвоения пе­ременных и запустить эту программу, чтобы увидеть, как изменились данные. В частности, вы можете попробовать присвоить переменным значения, которые находятся вне области допустимых значений, пока­занных в таблице типов данных. Если вы сделаете такую ошибку, VB в окне Редактор кода подчеркнет некорректное значение волнистой ли­нией, и программа не запустится до тех пор, пока вы не исправите это значение. Чтобы узнать об ошибке поподробнее, поместите мышь над подчеркнутым волнистой линией значением и прочтите всплывающую подсказку, содержащую сообщение об этой ошибке.

12)Если были сделаны какие-то изменения, которые необходимо записать на диск, то щелкнуть на кнопке Сохранить на Стандартной панели инстру­ментов.

 


Константы. Рассмотрим правила объявления констант. Если переменная в программе содержит значение, которое никогда не меняется (такое, например, как число π, являющееся фиксированной математичес­кой величиной), то целесообразно хранение такого значения не в переменной, а в виде константы.

Имя константы– это осмысленное имя, которое заменяет неизменяемое при выполнении программы число или тестовую строку. Константы увеличивают читаемость кода программы, снижают количество программных ошибок и облегчают внесение в код глобальных изменений. Константы действуют как переменные, но при работе программы их значение не изменяется. Они объявляются с помо­щью ключевого слова Const, в соответствии со следующим правилом:

 

Constимя_константыASтип =значение_константы

 

Например,

 

Const Pi As Double = 3.14159265 Label1.Text = CStr(Pi)

 

Этот оператор создает константу с именем Pi, которая может быть ис­пользована в коде программы вместо значения 3.14159265. Чтобы сделать констан­ту доступной для всех объектов и процедур формы, по­местите этот оператор в верхней части кода формы вместе с другими объявлениями переменных и структур, область видимости которых рас­пространяется на все процедуры формы.

Инициализаторы– это значения, которые присваиваются переменным во время ее объявления. Это позволяет упростить код и облегчить его чтение.

 

DimWdAs Single = 100 DimFnAs String = "Петров" Dim Eps As Double= 0.0001

 

Инициализировать переменную можно только тогда, когда это единственная переменная, объявляемая в выражении Dim, Public или Private:

 

Dimx, y, zAsDouble= 1' оператор вызовет ошибку

 


4.2.3. Выражения,
встроенные функции и методы

 

Выражение – это единица программного кода, которая определяет способ вычисления некоторого значения. Выражения в языке программирования формируются в соответствии с определенными правилами из констант и перемен­ных, компонент массивов, полей записей, функций и знаков операций. Запись в тексте программного кода отличается от обычной математической записи. Операции подразделяются на следующие типы:

· арифметические;

· логические;

· строковые.

 

Здесь подробно рассмотрим только арифметические операции, строковые операции кратко, а логические операции будут рассмотрены в Теме 4.4.

 

Таблица 4.2.3-1

перация Название
+ Сложение
- Вычитание
* Умножение
/ Деление
\ Целочисленное деление (без остатка)
Mod Остаток от деления
^ Возведение в степень

 

Таблица 4.2.3-2

Операция Приоритет Тип действий
() Вычисление в круглых скобках
Функция Вычисление значения функции
^ Возведение в степень
Унарный + или – Унарные операции  
*; / Операции умножения и деления
\ Целочисленное деление
Mod Остаток от деления
+; - Сложение и вычитание

 

Принято различать унарные и бинарные операции. Унарный знак плюс «+» перед величи­ной не изменяет ее значения. Унарный знак минус «-» перед величиной изменяет ее знак на противоположный. К бинарным арифметическим операциям относятся сложение, вычитание, умножение, деление, целочисленное деление (без остатка), остаток от деления, возведение в степень.

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

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

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

Пример 4.2.3-1. Создать проект,демонстрирующий использование операций +, -, * и /.

1)Запуститt VS.

2)Выполнить команды, позволяющие создавать новый проект с именем Пример 2.3-1. Базовые математические операции.

В окне Конструктор форм появится пустая форма.

3)Создать форму проекта Пример 2.3-1(рис.4.2.3-1).

 

 

Рис.4.2.3-1. Исходная форма проекта Пример 4.2.3-1

 

4)Проект Пример 2.3-1демон­стрирует, как с вводимыми числами работают операторы сложения, вычитания, умножения и деления. Он также демонстрирует, как ис­пользовать для обработки в программе ввода пользователя объекты текстового поля, переключателя и кнопки.

5)В форме проекта Пример 2.3-1используются элементы управления RadioButton(переключатели). Так как обычно эти элементы располагаются в группах, то они позволяют выбрать одно из нескольких значений. Установка одного переключателя в группе (присвоение его свойству Checked значения True) автоматически сбрасывает другие переключатели, присваивая аналогичным свойствам значение False.

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

7)Для написания программного кода этого проекта необходимо дважды щелкнуть на кнопке Вычислитьформы. Окно Редактор кода отобразит пока пустую процедуру события Sub Button1_Click(…). Ввести в нее код, приведенный на рис.4.2.3-3.

8)Дважды щелкнуть на кнопке Выходформы и в появившуюся процедуру события Sub Button2_Click(…)ввеcти оператор End(рис. 4.2.3-3).

9)Щелкнуть на кнопкеНачать отладку, наГлавной панели инструмен- тов.

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

10)В текстовом поле Переменная1 ввести число 100, а затем нажать на

11)<Tab>клавиатуры. Курсор ввода переместится во второе текстовое

12)поле (это поле получит фокус ввода).

13)В текстовом поле Переменная2 ввести число 17.

 

 

Рис. 4.2.3-2. Результат работы проекта Пример 2.3-2

 

14)К двум значениям применить любой из математических операторов. Например, щелкнуть на переключателе Сложение, а затем щелкнуть на кнопке Вычислить.

В поле Ре­зультат появится число 117, как показано на рисунке 4.2.3-2.

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

Результат появляется в поле Результат. Также поэксперимен­тируйте с другими числами, введя их в текстовые поля переменных. (Если хотите, можете попробовать использовать числа с десятичны­ми точками.) Для объявления соответствующих переменных исполь­зован тип данных Double, так что можете использовать очень боль­шие числа.

11) Далее ввести в текстовом поле Переменная1 число 100, в текстовом поле Переменная2– число 0, щелкнуть на переключателе Деление, а затем щелкнуть на кнопке Вычислить.

12) Деление на ноль при математических вычислениях запрещено, так как оно дает бесконечный результат. Но VB может справить­ся с таким вычислением и отобразить в текстовом поле Результат значе­ние Infinity (Бесконечность). Способность обрабатывать некоторые ус­ловия деления на ноль является автоматически предоставляемой функцией VB.

13) Когда закончится процесс изучения щелкнуть на кнопке Выход.

Программа остановится.

14) Теперь, чтобы узнать, как были получены такие результаты, необходимо проанализировать код программы (рис.4.2.3-3). Код использует несколько стандартных элементов управления ввода и содержит процедуру события, которая использует переменные и операторы для вычисления простых математических формул. Программный код объявляет переменные в верхней части кода формы, и, таким образом, они могут быть использованы во всех процедурах событий Form1.

15) В верхней части кода также записан оператор, который объяв­ляет две переменные типа Double:

 

'ОбъявляемпеременныеFirstNumиSecondNum DimFirstNum, SecondNumAs Double

 

Тип Doubleбыл использован для того, чтобы использовать тип пере­менных общего назначения, который может работать с различными числами - целыми, числами с десятичной точкой, очень большими чис­лами, маленькими числами и тому подобным. Переменные объявле­ны в одной и той же строке с помощью сокращенной записи. Обе пере­менные FirstNum и SecondNum имеют тип Double, и они используются для хранения значений, вводимых в первом и втором текстовых по­лях соответственно.

 

Public Class Form1 Dim FirstNum, SecondNum As Double Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button4.2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click FirstNum = TextBox1.Text SecondNum = TextBox4.2.Text If RadioButton1.Checked = True Then TextBox3.Text = CStr(FirstNum + SecondNum) End If If RadioButton4.2.Checked = True Then TextBox3.Text = CStr(FirstNum - SecondNum) End If If RadioButton3.Checked = True Then TextBox3.Text = CStr(FirstNum * SecondNum) End If If RadioButton4.Checked = True Then TextBox3.Text = CStr(FirstNum / SecondNum) End If End Sub End Class

 

Рис. 4.2.3-3. Программный код проекта Пример 2.3-1

 

Первые два оператора этой процедуры события передают данные, вве­денные в объектах текстовых полей, в переменные FirstNum и SecondNum.

 

'Присваиваем значения текстовых полей переменным FirstNum = TextBox1.Text SecondNum = TextBox4.2.Text

Элемент TextBoxосуществляет передачу с помощью свойства Text, которое принимает текст, введенный пользо­вателем, и делает его доступным для использования в программе.

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

 

'Определяемвыбраннуюкнопкуивычисляем If RadioButton1.Checked = True Then TextBox3.Text = CStr(FirstNum + SecondNum) End If

 

В каждый момент времени из группы объек­тов может быть выбран только один объект переключателя. Чтобы определить, был ли выбран переключатель, проверьте значение свой­ства Checked. Если оно равно True, то переключатель был выбран. Если свойство Checkedравно False, то переключатель не был выбран.

 

Часто возникает необходимость выполнить в программе более сложные действия с числами. Например, может понадобиться округлить число, вычислить сложное математическое выражение или использовать в про­грамме случайные числа. Математические методы (функции), показанные в табл. 4.2.3-3, могут помочь в работе с числами в ваших формулах. Эти методы (процедуры) предоставляются MS .NETFramework– библиотекой клас­сов, которая позволяет выполнить множество часто возникающих задач программирования, требуемых реализовать в проекте.

Известно, что платформа .NETFrameworkорганизована в виде библиотек классов, которые могут быть включены в проекты программирования по их именам с помощью опера­тора Imports. Этот процесс достаточно прост, и далее мы поэкспериментируем с мате­матическими методами (процедурами) из класса System.Math.

 

В табл. 4.2.3-3 представлен неполный список математических методов класса System.Math. Аргумент xв этой таблице представляет число, переменную или оператор, которые требуется передавать в метод для обработки. При использовании каких-либо из этих методов необходимо убеди­ться, что оператор ImportsSystem.Mathнаходится в окне Редактор кодав самом начале программного кода.

 

 


 

Таблица 4.2.3-3

Функция (метод) Возвращаемое значение
Abs(x) Абсолютное значение x (т.е. игнорируется знак, Abs(-5)=5 )
Acos(x) Значение арккосинуса х
Asin(x) Значение арксинуса х
Atan(x) Значение арктангенса x.
Ceiling(x) Целое число, которое больше или равно аргументу
Cos(x) Значение косинуса x
DivRem(x,y,r) Значение остатка (r) от целочисленного деле­ния
E е - oснованиенатуральногологарифма – 4.2.71828182845905
Exp(x) Экспонента - ех
Fix(x) Целую часть числа (дробная часть отбрасывается)
Floor(x) Целое число, которое меньше или равно аргументу
Int(x) Значение целой части х (ближайшее меньшее)
Log(x[,n]) Логарифм по основанию n
Log10(x) Десятичный логарифм
Max(x, y) Максимальное из двух чисел
Min(x, y) Минимальноеиз двух чисел
PI π – 3.1415265358979
Pow(x, y) Возведение x в степень y
Rnd( ) Равномерное случайное число на отрезке [0;1]
Round(x, n) Округление до n знаков после запятой
Sign(x) Знак числа х
Sin(x) Значение синуса x
Sqrt(x) Квадратный корень из х
Tan(x) Значение тангенса x
Truncate(x) отбрасывает дробную часть

 

Прокомментируем некоторые методы.

Функция Log(x[, n]) поддерживает один аргумент (натуральный логарифм) или два аргумента (логарифм по основанию n):

 

Dim result As Double = Math.Log(10)' = 4.2.30258509299405 result = Math.Log(1000,10) ' = 3 result = Math.Log10(1000)'=3

 

Методы Min(x,y)и Max(x,y)вычисляют минимальное и максимальное значения, соответ­ственно, и используются для работы со всеми числовыми типами данных.

Метод Floor(x) возвращает целое число, которое меньше или равно аргументу мето­да, в то время как метод Ceiling(x) возвращает целое число, которое больше или равно аргументу метода. Метод Truncate(x)просто отбрасывает дробную часть и, следовательно, работает отлично от метода Ceiling(x), если аргумент отрицателен:

 

result = Math.Ceiling(4.2.5)' = 3 result = Math.Floor(-1.5)' = -2 result = Math.Truncate(-1.5)' = -1

 

Метод DivRem(x,y,r)выполняет целочисленное деле­ние и возвращает остаток (r) в третий аргумент:

 

Dim remainder As Long Dim result As Long= Math.DivRem(20, 3, r)' = 2

 

Напомним, если логарифм имеет не натуральное основание, то его можно преобразовать к натуральному логарифму – Logab=Log(b)/Log(a).

Значение аргумента х в тригонометрических функциях дается в радианах.

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

Обращение ко всем функциям всегда происходит по их именам, за которыми в скобках следуют аргументы. Вычисле­ние функций в арифметическом выражении предшествует выполне­нию арифметических операций. Аргументом встроенной функции может быть любое ариф­метическое выражение. Кроме того, если в начале программного кода отсутствует оператор ImportsSystem.Math, то перед обращением к функциям необходимо указать имя класса с точкой, например, Math.Sin(x).

Обратите внимание, что в табл.4.2.3-3 описаны две системные константы (Eи PI).

 

Пример 4.2.3-2. Создать проект, использующий метод класса
System.Math для вычисления квадратного корня.

1)В меню Файл выполнить команду Создать проект.

Появится диалоговое окно Создать проект.

2)Создать новый проект типа с именем Пример 4.2.3-2 (Встроенные математические функции).

В окне Конструктор появится пустая форма.

3)Щелкнуть на элементе управления Buttonокна Панель элементови создать в верхней части формы объект кнопку.

4)Щелкнуть в окне Панель элементовна элементе управления TextBoxи отобразитьпод объектом кнопка два объекта текстового поля.

5)Установить свойство Textобъекта кнопки равным Квад­ратный корень.

6)Вызвать окно Редактор кода.

7)В самом верху окна Редактор кода, над оператором PublicClassForm1, ввести оператор программы: ImportsSystem.Math

Оператор Importsдобавляет в проект библиотеку объектов, свойств и методов. Этот оператор должен быть первым оператором программы - он должен идти даже перед переменными, которые объявляются для всей формы, и перед оператором PublicClassForm1, который в VB создается автоматически. Конкретной библиотекой классов, которую мы выбрали, является System.Math, которая является коллекцией объек­тов, свойств и методов, предоставляемой .NETFrameworkдля выпол­нения математических операций.

8)Спуститься в окне Редактор кодавниз и в процедуру события
Button1_Click(…)между операторами PrivateSubи EndSubдобавить следующий код:

 

Dim rg As Double Dim Result As Double Arg = TextBox2.Text Result = Sqrt(Arg) TextBox1.Text = Result

 

Эти операторы объявляют переменную типа Doubleс именем Result, используют метод Sqrt()для вычисления квадратного корня из числа, введенного в поле TextBox2.Text, и присваивают значение переменной Resultсвойству Textобъекта текстового поля TextBox1так, что в нем отображается результат вы­числения.

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

10)Щелкнуть на кнопке Начать отладку на стандартной панели инструментов.

11)Введите число 625 в поле TextBox2.Text.

12)Щелкнуть на кнопке формы Квадратный корень.

VB вычислит квадратный корень из 625 и отобразит в тек­стовом поле

результат этого вычисления (рис. 4.2.3-8).

 

 

 

Рис. 4.2.3-4. Форма проектаПример 2.3-2

 

Рассмотрим члены базовых числовых классов, а именно, методы и поля (свойства), которые будут полезны при разработке проектов лабораторных работ.

Для всех числовых типов VBи всех соответствующих классов
(табл. 4.2.2-1) определены статические поля MinValue и MaxValue. Эти поля возвращают наименьшее и наибольшее значение, которое можно присвоить переменной соответствующего типа:

 

'Наибольшее значение, которое можно хранить 'в переменной типа Double. TextBox1.Text= Double.MaxValue' = 1.79769313486232Е+308

 

Числовые классы, которые поддерживают значения с плавающей точкой, а имен­но, классы Single и Double, имеют несколько дополнительных статических свойств, предназначенных только для чтения.

Свойство Epsilon возвращает наименьшее по­ложительное (не равное нулю) число, которое можно хранить в переменной данно­го типа:

 

TextBox1.Text= Single.Epsilon'= 1.401298E-45 TextBox4.2.Text= Double.Epsilon'= 4.94065645841247E-324

 

В классах Singleи Double, к тому же, определены статические методы, которые позволяют проверять то, что переменные их типа содержат специальные значения, такие как IsNegativelnfinity(), IsPositivelnfinity() и IsNaN( ).

В классе Microsoft.VisualBasic.Interactionопределено множество полезных команд и методов взаимодействия программ, включая Beep(),
InputBox(), MsgBox()
и другие. Эти методы определены глобально, поэтому при их использовании можно не указывать имя класса.

Кроме числовых данных, при написании программного кода активно используются строковые и символьные данные. Подробно они будут рассмотрены в Теме 4.9, где будут описаны свойства и методы классов System.Stringи System.StringBuilder.NET. Здесь кратко рассмотрим строковые типы данных, так как они будут использоваться почти во всех программных кодах проектов для ввода и отображения данных на форме.

Основная операция со строка – это операция конкатенации – & (+):

 

Dim s As String = "ABC" s = s&"D"'Результат строка - ABCD

 

Объявленная строковая переменная, которой еще не присвоено никакое значение, содержит значение Nothing или, точнее, не указывает на какую-либо последовательность символов в памяти. Такая переменная отличается от переменной, которая равна пустой строке:

 

Dim s AsString ="" 'Длина строки равна 0 Dim t AsString'Длина строки не определена, 'а значение = Nothing

 

Необходимо обратить внимание, что VB не предлагает способа ввода в строку непечатных символов, например, символов табуляции или новой строки. Строковые константы, такие как vbCrLf, vbTabи другие, поддерживаются как свойствами класса Microsoft.VisualBasic.Constants. Этот класс обозначен как глобальный, поэтому в программный код необязательно включать имя этого класса.

В качестве альтернативы можно использовать свойства класса
Microsoft.VisualBasic.ControlChars. Поскольку этот класс не объявлен как глобальный, имя класса нужно указывать в программном коде (если только не использовалось выражение Imports для импорта всего этого класса). Имена констант в этом классе такие же, как и в классе
Microsoft.VisualBasic.Constantsза исключением того, что в них не используется префикс vb.

Класс ControlChars содержит константы Back, Cr, CrLf, FormFeed, NewLine, NullChar, Quote, TabиVerticalTab. Наиболее используемые константы представлены в табл.4.2.3-4.

 


 

Таблица 4.2.3-4

Константы Класса Constants Константы Класса ControlChars Код символа Описание
vbCrLF CrLF Chr(13)+Chr(10) Символы возврата каретки и перевода строки
vbCr Cr Chr(13) Символ возврата каретки
vbLf Lf Chr(10) Символ перевода строки
vbNewLine NewLine Chr(13)+Chr(10) Символ новой строки

 

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

 

Dim s As String = "МТУСИ"&ControlChars.NewLine s = s&"Кафедра" &"ВМ и П" &vbCrLF

 

Класс Microsoft.VisualBasic.Stringsсодержит большинство строковых функций язы­ка VB, включая Asc, Chr, ChrW, Filter, Format, FormatCurrency, FormatDateTime, FormatNumber, FormatPercent, InStr, InStrRev, Join, LCase, Left, Len, LTrim, Mid, Replace, Right, RTrim, Space, Split, StrComp, StrReverse, Trimи UCase. Эти методы определены глобально, поэтому для их вызова необязательно указывать полное имя класса, хотя нужно указывать полное имя связанных с ними констант. Подробнее эти функции будут рассмотрены в Теме 4.9.

 

 

4.2.4. Преобразование данных в выражениях
и операторе присваивания

 

У многих программистов при работе на VBчасто возникают проблемы с правильным преобразованием вещественных чисел или же строк, содержащих числа, к целым числам.

Рассмотрим более подробно проблему преобразования данных в выражениях и операторах присваивания.

В процессе рассмотрения примеров мы уже встречались с проблемой преобразования данных. При работе с данными в VBнужно иметь в виду поддерживаемые в VS преобразования.

Во-первых, это расширяющие, не приводящие к потерям данных, преобразования, например,

Integer → Long, Decimal, Single, Double.

Во-вторых, это сужающие – преобразования (с возможностью потерей данных) в тип данных, содержащий меньшие значения данных, например,

Single → Integer;

Double → Integer.

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

Option Strict On

Option Explicit On.

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

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

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

· CBool(x) - возвращает логическое значение. В качестве параметра xфункции может быть передано условие или числовое значение.

· CByte(x)- возвращает значение типа Byte. В качестве параметра xпередается соответствующая строка или числовое значение.

· CChar(x) - возвращает символ. В качестве параметра x передается целое число, находящееся в промежутке от 0 до 65 535.

· CDate(x) - возвращает значение типа Date. В качестве параметра x можно использовать любое принятое обозначение даты.

· CDbl(x) - преобразовывает значение параметра x к типу Double.

· CDec(x)- применяется для преобразования параметра x к типу Decimal.

· CInt(x)- преобразовывает значения параметра x к целочисленному типу Integer. Если в качестве параметра xпередано дробное число, то дробная часть просто округляется по правилам математики.

· CLng(x) - возвращает значение типа Long. Обработка параметра x производится по образцу функции CInt(x).

· CShort(x) - преобразовывает значение параметра x к типу Short.

· CSng(x) - применяется для преобразования значения параметра x к типу Single.

· CStr(x) - используется для преобразования данных в строковый тип String.

 

Кроме «внутренних» функций языка VB для явных преобразований можно использовать классы и модули как VB, так и .NET.

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

· Int()иFix() – функции возвращают целую часть числа. Предполагается, что аргумент имеет тип Double или является числовым выражением. Возвращается тип Double. А уже этот Double затем можно преобразовать в IntegerилиLong. Главное, чтобы число уместилось в диапазон нужного вам типа. Разность при использовании Int()и Fix()заметна только лишь при отрицательном значении аргумента. Дело в том, что Int() всегда возвращает ближайшее меньшее целое число, а Fix() просто отбрасывает дробную часть. То есть, для Int(4.5)иFix(4.5) возвращает 4, тогда как для Int(-4.5) возвращает – 5, а для Fix(-5) – -4.

· Val(x) – преобразует значение параметра xстрокового типа String к числовому значению типа Double.

· Str(x)– преобразует число в строку, причем перед положительным числом вставляется пробел.

 

Dim Number As Single Number = Int(99.8)' Возвращает -99 Number = Fix(99.8)' Возвращает -99 Number = Int(-99.8)' Возвращает -100 Number = Fix(-99.8)' Возвращает -99 Number = Int(-99.2) ' Возвращает -100 Number = Fix(-99.2)' Возвращает -99

 

Эти функции преобразовывают числовые аргументы в целое число типа Long и Integer соответственно. Дробная часть при этом округляется по правилам математики. Таким образом, результатом преобразования CInt(1.5) или CLng(1.5) будет целое число 4.2. А если аргументом будет 1.4, то в результате получим 1. Знак числа при этом роли не играет, то есть -1.5 будет преобразовано в -2, а -1.4 – в -1.

При преобразовании из строки, содержащей число, важно помнить, что функции преобразования используют национальные настройки для получения символа разделения целой и дробной частей числа. Поэтому, если у вас разделителем целой и дробной частей числа является точка «.», а в строковом представлении числа будет фигурировать запятая, то вы получите ошибку несовпадения типов при попытке преобразовать такую строку в целое число (кстати, эта ошибка возникнет и при попытке использования CDbl()или CSng() для преобразования строки в вещественное число, а также и при использовании Int() или Fix()).

Функции Val(), CDbl()иCSng(). При использовании этих функций имеются свои нюансы. CDbl() и CSng()аналогичны CLng()и CInt().
CDbl()
преобразовывает аргумент в вещественное число типа Double, а
CSng() соответственно в Single. Естественно, надо обращать внимание на попадание аргумента в диапазон представления и на правильность разделителя целой и дробной частей. Для функций CDbl() и CSng()разделителем целой и дробной части числа обязательно должен быть символ запятая «,», а для функции Val() разделителем целой и дробной частей числа является точка «.». Функция Val() возвращает число, содержащееся в строке - аргументе как числовое значение типа Double. Данная функция будет пытаться преобразовать строку до тех пор, пока не встретит символ, который не может быть распознан как часть числа. В частности, функция прекрасно принимает точку в качестве разделителя, а вот пробелы просто игнорирует.

Таким образом, функция Val()преобразует строки в соответствии с табл.4.2.4-1.

Ещё раз обратите внимание, что функции Val(x) и Str(x) при преобразовании в качестве разделителя целой и дробной частей числа функции Val(x) распознают только точку, а функция СDbl(x) и ей подобные – запятую, но та и другая функция игнорирует пробелы в числе.

 

Рассмотрим несколько примеров:

DimaDblAs Double DimanIntAs Integer aDbl = 2345.5678 anInt = CInt(aDbl)' ПеременнаяanIntбудетравна 2346. Dim aDbl1, aDbl2 As Double Dim aLng1, aLng2 As Long aDbl1 = 25427.45 : aDbl2 = 25427.55 aLng1 = CLng(aDbl1)' ПеременнаяaLng1 будетравна 25427. aLng2 = CLng(aDbl2)' Переменная aLng2 будет равна 25428. Dim aDouble1, aDouble2 As Double Dim aSingle1, aSingle2 As Single aDouble1 = 75.3421105 : aDouble2 = 75.3421567 aSingle1 = CSng(aDouble1) 'Переменная aSingle1 будетравна 5.34211. aSingle2 = CSng(aDouble2) ' Переменная aSingle2 будет равна 75.34216. DimaDoubleAs Double Dim aStringAs String aDouble = 437.324 aString = CStr(aDouble) 'ПеременнаяaStringбудетравна 437.324. aDouble = CDbl("437,324") 'Переменная aDouble будет равна 437,324. aDouble = Val("437.324") 'Переменная aDouble будет равна 437.324.

Таблица 4.2.4-1

Строка Число Примечания
" 1 2 34569" После отбрасывания пробелов получаем целое число 1234569.
" 1 2 345,69" После отбрасывания пробелов функция пытается разобрать число и останавливается на символе «,», и возвращает 12345.
" 1 2 345.69" 12345.69 В отличие от предыдущего случая, здесь символ «.» является законным разделителем целой и дробной частей числа, поэтому результатом будет 12345.69.
" 12 34569number" Здесь разбор числа будет остановлен на первой встреченной букве «n», а все, что до нее, преобразовывается в число 1234569.

Округление. Для округления используется функция Round(). Она возвращает число с заданным количеством цифр после запятой. Однако есть один нюанс. Функция Round() именно округляет (что собственно видно из названия). То есть, вызов Round(1.15,1)даст результат 1.4.2. Иногда возникает ситуация, когда необходимо отбросить лишние цифры, то есть для числа 1.15 получить 1.1. Тогда надо пользоваться конструкцией вида: Fix(10*n)/10.

Здесь вместо 10 должна использоваться степень 10, соответствующая количеству оставляемых цифр после запятой. Универсальный вариант будет таким: Fix(10^ЧислоЦифрПослеДесТочки*n)/10^ЧислоЦифрПослеДесТочки.

Обратите внимание, что здесь используется именно функция Fix(), а не Int(), которая для отрицательных чисел будет работать некорректно.

В модуле Microsoft.VisualBasic.Stringопределенно множество методов работы со строками, в том числеFormat(x, строка символов) - преобразует числовое значение параметра x в заданный формат, который определяется строкой символов. Любое числовое значение преобразовывается в символьное представление данного числа.

 

Таблица. 4.2.4-2

Символы Пояснение
# Число в обычном виде и без дробной части
Число в обычном виде и без дробной части
#.### Число в обычном виде. После запятой пользователь видит не больше 3 знаков, целая часть дроби будет показана полностью
0.000 Число в обычном виде. После запятой пользователь видит не больше 3 знаков, целая часть дроби будет показана полностью
E Число показывается в экспоненциальной форме

Возможные значения строки символов функции Format()и их описание приведены в табл. 4.2.4-2.

 

Если параметр функцииFormat() – строка символов опущен, то функция производит тоже действие, что и функция СStr() для численного выражения. Положительные числа, преобразуемые в строки, теряют пробел слева, зарезервированный для знака. Если положительное число преобразовано в строку функцией СStr(), то пробел слева сохраняется. Например,

 

Format(2, "000000")'возвращает 000002 Format(10, "0.00")'возвращает 10.00

 

Для всех числовых типов VB и всех соответствующих классов .NET определен метод ToString(x), который преобразует числовое значение в строку. Этот метод особенно по­лезен, когда строковое представление числа нужно добавить к другой строке, например,

 

DimmyValueAs Double = 123.45 Dim res As String = "The final value is"&myVaIue.ToString()

 

Метод ToString(x) по умолчанию используются настройки, связанные с текущим потоком символов. Например, в качестве десятичного разделителя он использует точку, если национальные настройки – это русский язык.

 

'Вывод PI с 5 знаков после десятичной точки (всего 6 цифр) Dm d As Double = Math.PI TextBox1.Text= d.ToString("G6")'рез-т 3.14159 - всего 6 цифр

 

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

 

DimintValueAs Integer = 12345 TextBox1.Text = intValue.ToString("##,##0.00")'= 12 345.00 Dim sngValueAs Single = 12345.5 TextBox4.2.Text = sngValue.ToString("##,##0.00")'= 12 345.50

 

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

Для явного преобразования любого числового типа в строку, кроме функций Str() и CStr(), можно использовать метод ToString()класса Convert:

Dim ЧислоAs Double Число = 3.14 Dim СтрокаAs String = Convert.ToString(Число)

 

Напомним также, что обратное преобразование из строки в число можно выполнить или с помощью функций Val(), CDbl(), CInt(), или с помощью соответствующих методов класса Convert – ToDouble(),
ToInt32()
и других. Причем список методов можно увидеть с помощью технологии IntelliSense при вводе точки после Convert.

 

 

4.2.5. Пример создания и отладки проекта
«Вычисление периметра и площади треугольника»

 

1) Название работы:

Вычисление периметра и площади треугольника.

2) Задание на разработку проекта Проект 4.2.5:

Сформулируем содержательную постановку задачи:

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

Задано: А, В, С – значения сторон треугольника.

Требуется определить: Р – периметр треугольника,

S – площадь треугольника.

Ограничения на значения исходных данных и их соотношения:

А>0, В>0, C>0, А+В>С, А+C>В, В+C>А одновременно.

Проект4.2.5 должен иметь простой интерфейс пользователя:

· две кнопки управления;

· три поля, отображающие входные данные;

· два поля, отображающие выходные данные.

 

3) Формализация и уточнение задания:

Для решения задачи существуют известные формулы:

Р = А + В + С; S = (формула Герона),


 

Кроме того, при разработке интерфейса надо учитывать следующее:

· строка заголовка формы должна содержать название работы
«Проект 4.2.5. Вычисление периметра и площади треугольника»;

· для ввода исходных данных необходимо использовать три текстовых поля;

· вычисления должны производиться при нажатии на кнопку
ВЫЧИСЛИТЬ;

· для вывода результатов следует использовать текстовые поля (два поля);

· для завершения приложения должна быть кнопка ЗАВЕРШИТЬ;

· приложение должно содержать поясняющие надписи;

· зоны ввода и вывода данных должны быть отображены визуально.

 

Принимая во внимание вышеизложенное, Форма будет соответствовать

рис.4.2.5-1.

 

 

Рис. 4.2.5-1. Форма проекта Проект 4.2.5

Вычисление периметраи площади треугольника

 

4) Разработка приложения (проекта):

4.1) Создание нового проекта:

· Запустить VS;

· Создать новый проект, т.е. выполнить команду Создать проект элемента Главного меню Файл.

На экране появится диалоговое окно Создание проекта:

· Выбрать шаблон Приложение Windows Formsв диалоговом окне Создание проекта.

 

· Ввести в текстовое поле Имя нижней части диалогового окна
Создание проекта имя проекта Проект 4.2.6.

· Щелкнуть на кнопке ОК диалогового окна Создание проекта.

VS присвоит проекту имя Проект 4.2.6 и отобразит Основное окно с различными панелями, среди которых присутствует окно

Конструктораформ с пустой формой Form1. Эта форма будет использоваться для создания интерфейса пользователя.

4.2) Создание интерфейса пользователя:

Изменить размер формы, для этого необходимо поместить указатель мыши над нижним правым углом формы так, чтобы он изменился и принял форму указателя изменения размера, а затем перетащить этот угол так, чтобы увеличить размер формы для размещения на ней объектов проекта. При изменении размера формы в окне Конструктора форм могут появиться полосы прокрутки, которые позволяют получить доступ ко всей созданной форме. В зависимости от разрешения экрана и открытых инструментов VS, можно не увидеть всю форму целиком. Задать размер формы, примерно равный размеру формы, показанной на рис. 4.2.5-1.

· Чтобы увидеть всю форму без помех, если это необходимо, можно изменить размер других панелей инструментов или закрыть их.

· Добавить на форму объект Button1, для чего дважды щелкнуть в окне Панель элементовна Button. VS создаст на форме кнопку с размерами по умолчанию и именем Button1. Причем эта кнопка выделена и, вокруг имеются манипуляторы изменения размера.

Обратить внимание на название кнопки – оно встретится при написании кода программы. Когда VB находится в режиме конструктора, объекты на форме перемещаются с помощью перетаскивания их мышью, а их размеры изме­няются с помощью манипуляторов изменения размера.

· Добавить на форму второй объект Button2, для чего щелкнуть (один раз) в окне Панель элементов на элементе управления Button, а затем переместить указатель мыши в область формы Form1. Указатель мыши примет форму перекрестия с пиктограммой кнопки. Перекрестие предназначено для того, чтобы нарисовать прямоугольную фигуру кнопки на форме, и этот метод используется как альтернатива двойному щелчку, создающему элемент управления с размером по умолчанию.

· Перетащить указатель вниз и вправо. Чтобы завершить образование второй кнопки, необходимо отпустить кнопку мыши и посмотреть на привязку Button2 к форме.

Изменить размер объекта кнопки так, чтобы она стала такого же размера, как и первая кнопка, а затем переместите ее на форме, расположив ниже первой кнопки.

В любой момент можно удалить объект и начать заново – выбрав этот объект на форме, а затем нажав на клавишу <Del> клавиатуры.

Попрактиковаться в создании и удалении объектов интерфейса пользователя. Форма должна выглядеть примерно так, как показано рис. 4.2.5-2.

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

VS создаст на форме экземпляр элемента управления Label1.

Перетащить элемент Label1влево от двух объектов кнопок.

 

 

Рис. 4.2.5-2. Форма проекта с двумя кнопками

 

· Создать второй объект надписи, дважды щелкнув мышью в окне Панель элементов на элементе управления Label.

VS создаст на форме элемент Label4.2.

· Создать третий объект надписи Label3, и снова дважды щелкнуть мышью на элементе управления Label, чтобы создать третий объект надписи Label3.

 

 

Рис. 4.2.5-3. Форма проекта с двумя кнопками и четырьмя надписями

 

· Создать четвертый объект надписи Label4, для чего необходимо использовать элемент управления Label для добавления к форме описательной надписи.

· Переместить третий и четвертый объекты надписей вправо от второго, оставив между ними небольшое расстояние.

Форма будет иметь вид примерно такой, как показано на
рис. 4.2.5-3.

· Снова дважды щелкнуть мышью на элементе управления Label, чтобы создать пятый объект надписи Label5.

· Создать шестой объект надписи Label6.

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

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

· управления TextBox. VS создаст на форме экземпляр объекта TextBox1.

· Далее поместить элемент TextBox1внизу, под элементом Label2.

· Таким же образом необходимо создать на форме элементы TextBox2 и TextBox3, разместив их под элементами Label3 и Label4.

· Создать на форме элементы TextBox4 и TextBox5, разместив их под элементами Label5 и Label6 соответственно.

· Форма будет иметь вид примерно такой, как показано на
рис. 4.2.5-4.

 

 

 

Рис. 4.2.5-4. Форма проекта с двумя кнопками и шестью надписями