Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

У многих программистов при работе на 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) операторы языка

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 464; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.