Open Library - открытая библиотека учебной информации

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

Категории

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

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

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

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

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

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

Integer →Long, Decimal, Single, Double.

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

Single→Integer;

Double→Integer.

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

Option Strict On

Option Explicit On.

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

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

· 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.

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

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

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

В модуле Microsoft.VisualBasic.Stringопределœено множество методов работы со строками, в том числе:

· Format(x, строка символов) - преобразует числовое значение параметра xв заданный формат, который определяется строкой символов.

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

Функции CLng( ) и CInt( ). Эти функции преобразовывают числовые аргументы в целое число типа Long и Integer соответственно. Дробная часть при этом округляется по правилам математики. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, если исходное число будет равно 1.5, то результатом преобразования при помощи CInt( ) или CLng( ) будет целое число 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.

Таблица 4.2.4-1

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

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

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

Dim aDbl As Double Dim anInt As 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 будет равна 75.34211. aSingle2 = CSng(aDouble2) ' Переменная aSingle2 будет равна 75.34216. Dim aDouble As Double Dim aString As String aDouble = 437.324 aString = CStr(aDouble) ' Переменная aString будет равна " 437.324". aDouble = CDbl(" 437,324")' Переменная aDouble будет равна 437,324. aDouble = Val(" 437.324")' Переменная aDouble будет равна 437.324.

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

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

Fix(10^ ЧислоЦифрПослеДесТочки * n) / 10^ЧислоЦифрПослеДесТочки

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

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

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

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

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

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

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

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

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

Dim intValue As Integer = 12345 TextBox1.Text = intValue.ToString("##,##0.00")‘= 12 345.00 Dim sngValue As Single = 12345.5 TextBox2.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.4-1):

Рис. 4.2.4-1

4.2.5. Задачи для самостоятельного решения по теме «Основные средства языка программирования VB .NET»

1) 2) 3) 4) 5) 6) 7)   8) 9) 10) 11) 12) 13) 14) 15) 16)   17)   18)   19)   20)   21)   22)   23)   24)   25)   26) 27)   28)   29)     30)   31)   32)   33)   34) 35) Найти площадь треугольника со сторонами a, b, c (a, b, c>0). Найти среднее арифметическое и среднее геометрическое чисел a, b, c, d. Вычислить расстояние от точки с координатами (x, y) до точки (0, 0). Вычислить синус от x градусов. Найти площадь поверхности куба (длина ребра равна а). Найти радиус описанной сферы куба (длина ребра равна а). Найти координаты точки пересечения двух прямых, заданных уравнениями a1x+b1y+c1=0 и a2x+b2y+c2=0 (прямые не параллельны). Вычислить дробную часть среднего геометрического трёх вещественных чисел. Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности. Дан радиус окружности. Найти длину окружности и площадь круга. Известны объем и масса тела. Определить плотность материала этого тела. Найти площадь кольца по заданным внешнему и внутреннему радиусами. Вычислить период колебания маятника длины L. Даны катеты прямоугольного треугольника. Найти его периметр. Даны основания и высота равнобедренной трапеции. Найти ее периметр. Найти площадь прямоугольной рамки, внутренняя сторона которой равна5, а внешняя – заданному числу г (г>5). Найти площадь равнобочной трапеции с основаниями a и b и углом a при большом основании. Треугольник задан длинами сторон. Найти радиусы вписанной и описанной окружностей. Треугольник задан координатами своих вершин. Найти периметр и площадь треугольника. Найти площадь сектора, радиус которого равен 13.7, а дуга содержит заданное число радиан w. Даны действительные числа a, b, c. По трем сторонам с длинами a, b, c можно построить треугольник. Найти углы треугольника. Найти гипотенузу и площадь прямоугольного треуголь­ника по двум данным катетам. Вычислить сумму членов арифметической прогрессии, зная ее первый член, разность прогрессии и число чле­нов. Даны два действительных положительных числа. Найти среднее арифметическое и среднее геометрическое этих чисел. Даны гипотенуза и катет прямоугольного треугольника. Найти второй катет и радиус вписанной окружности. Определить время падения камня на поверхность земли с высоты h. Определить силу притяжения F между телами массы m1 и m2, находящимися на расстоянии r друг от друга. Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника. Определить время, через ĸᴏᴛᴏᴩᴏᴇ встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости, ускорения и начальное расстояние между ними. Найти площадь равнобочной трапеции с основаниями a и b и углом a при большом основании. Даны два действительных числа. Найти среднее арифметическое этих чисел и среднее геометрическое их модулей. Даны три числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чи­сел. Вычислить периметр и площадь прямоугольного треугольника по длинам двух его катетов. Дана масса в килограммах. Найти число полных тонн в ней. Дано расстояние в метрах. Найти число полных километров в нем.

4.2.6. Тестовые задания по теме «Основные средства языка программирования VB .NET»

1. Синтаксис языка программирования – это

1)набор правил истолкования отдельных языковых конструкций

2)грамматические правила языка

3)правила компиляции операторов языка

2. Алфавит языка программирования – это

1)переменные и операторы языка

2)множество символов, из которых строятся всœе конструкции языка

3)множество идентификаторов

3. Идентификаторы – это

1)имена лексических элементов языка

2)имена переменных

3)ключевые слова

4)имена операторов

4. Ключевые слова – это

1)идентификаторы, зарезервированные для специального использования

2)операторы языка

3)константы языка

4)операторы языка