Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 138 139 140 141 142 143 144 145 146 ... 192
Перейти на страницу:
и вычитанием выполняет умножение и деление, поэтому в последнем случае он бы сначала разделил 1 на Ь, а затем к результату прибавил а и 1.

Вопрос: когда в выражениях можно ставить скобки? Ответ: всегда, когда у вас возникают сомнения в правильной очередности действий. Лишняя пара скобок не помешает. Пример: записать на Visual Basic выражение:

Его можно было бы записать так:

(1+а/(2+а*Ь))/(3+а)*Ь.

Разберитесь в этой записи. К сожалению, в выражениях разрешается писать только круглые скобки. Квадратные и фигурные запрещены. От этого сложные выражения с большим количеством скобок на глаз воспринимаются с трудом, так как трудно для конкретной скобки увидеть ее законную пару. В этом случае я могу посоветовать идти "от малого к большому", то есть сначала заметить самые малые из взятых в скобки фрагменты выражения (у нас это 3+а и 2+а*Ь). После этого будет уже легче заметить более крупные фрагменты, такие как 1+а/(2+а*Ь), и т. д.

Разобрались? Эта запись меня совсем не удовлетворяет, так как мы не знаем, что Visual Basic будет делать раньше — делить (1+а/(2+а*Ь)) на (3+а) или умножать (3+а) на Ь. А от этого зависит результат. Добавим для верности пару скобок:

((1+а/(2+а*Ь))/(3+а))*Ь

Теперь все в порядке.

Запись десятичных дробей. Путаница с точками и запятыми. Почти во всех языках программирования и уж, конечно, в Visual Basic, в десятичных дробях принято вместо запятой ставить точку. Пример: 62.8 — шестьдесят две целых восемь десятых. Однако, если помните, при вводе дробей в InputBox Visual Basic требовал запятую, да и результаты он выводит с запятой. В чем дело? Visual Basic, являясь приложением Windows, частично воспринимает от нее привычку пользоваться в России запятой. Особой проблемы тут нет. Используйте метод "научного тыка" — пользуйтесь точкой, а если Visual Basic жалуется или начинает делать что-то не то, тогда меняйте ее на запятую.

Математические функции. Кроме нескольких действий арифметики Visual Basic может выполнять и другие математические действия, например, извлечение квадратного корня. На компьютере нет клавиши со значком, поэтому в Visual Basic имеется специальная функция — Sqr. Например, корень из 25 обозначается так — Sqr(25), корень из а+Ь так — Sqr(а+Ь). Здесь Sqr — сокращение от английского выражения Square root — квадратный корень. То, из чего нужно извлечь корень, записывается в скобках.

Приведу неполный список математических функций Visual Basic:

Кроме этого, имеются функции Sin, Cos, Tan (что означает тангенс), Atn (что означает арктангенс), Exp, Log и др.

Примеры:

Выражение (2+1)^2 при вычислении даст 9

Выражение 1+(2+8)^3 при вычислении даст 1001

Выражение 1+Abs(5–8) при вычислении даст 4

Выражение 2^4+Sqr(35+1) при вычислении даст 22

Выражение Sqr(8+Int(41.5)) при вычислении даст 7

Выражение 21(Round (2.54+1)) при вычислении даст 5

Задание 9: Определите без компьютера, что напечатает данный фрагмент программы: а = (2^2+1)*(20-(2^2)^2)-11:b=11(а-4): Debug.Print а^2+Ь-1

Типы данных и точность вычислений

Если вы считаете, что компьютер все вычисления выполняет абсолютно точно, то вы ошибаетесь. Компьютер всего лишь очень точен. Очень, а не абсолютно. В этом вы скоро убедитесь.

Integer и Long — целые числа

Создайте проект с кнопкой и введите такую программу:

Dim a As Integer

Dim b As Integer

Private Sub Command1_Click()

   a = 100

   b = 1

   Debug.Print a, b, a + b

End Sub

Работает она нормально. Посмотрим, насколько большие числа способна воспринимать наша программа. Заменим Ь=1 на b=40000. Visual Basic выдает сообщение об ошибке "Overflow", что означает "Переполнение ячейки". В чем дело?

Как вы уже знаете, в Visual Basic принято правило, что если человек объявил переменную, как Integer, то он разрешает ей принимать значения только целых чисел. Число типа Integer занимает в памяти два байта. Значит, под переменные а и Ь компьютер отводит в памяти ячейки по два байта каждая. Два байта — это маленький объем памяти и уместиться в него может лишь небольшое целое число, а именно — число в диапазоне от -32768 до 32767.

Для того, чтобы переменная имела право принимать значения больших целых чисел, она должна быть объявлена не как Integer, а как Long (Длинное Целое). Под переменную типа Long компьютер отводит в памяти 4 байта и поэтому она может принимать значения в диапазоне от -2147483648 до 2147483647.

Зачем нужен Integer, если есть Long? Ну, хотя бы для того, чтобы экономить память, она же не резиновая.

Задание 10: Население Москвы равняется а=9000000 жителей. Население Басюков равняется Ь=1000 жителей. Вся Москва переехала в Васюки. Сколько там стало жителей? Используйте переменные величины.

Single и Double — десятичные дроби

Создайте проект с кнопкой и введите такую программу:

Dim a As Single

Dim b As Single

Private Sub Command1_Click()

   a = 100.78656954325: b = 40000.1234567895: Debug.Print a, b, a + b

End Sub

Запустите проект. Вот результат:

100,7866; 40000,13; 40100,91

Как видите, Visual Basic обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные имеющими другой тип — Double — десятичная дробь двойной точности. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее.

Dim a As Double

Dim b As Double

Private Sub Command1_Click()

   a = 100.78656954325: b = 40000.1234567895: Debug.Print a, b, a+b

End Sub

Запустите проект. Вот результат:

100,78656954325; 40000,1234567895; 40100,9100263327

Здесь максимум — 15 значащих цифр. Если вам интересно задать в программе еще более длинное значение Ь, например, b = 40000.12345678957453457, то у вас ничего не получится, Visual Basic обрежет его прямо в программе, зная, что с такими длинными числами работать он все равно не умеет.

Зачем нужен Single, если есть Double? Ну хотя бы для экономии памяти.

Целые числа или десятичные дроби? Числовой тип Currency

Вы спросите: зачем использовать типы целых чисел Integer и Long, если типы десятичных чисел Single и Double обеспечивают нам работу и с целыми и с дробными числами? Кроме экономии памяти здесь есть еще проблема абсолютной точности вычислений. Дело в том, что при использовании типов десятичных дробей вполне мыслима ситуация, когда дважды

1 ... 138 139 140 141 142 143 144 145 146 ... 192
Перейти на страницу: