Математические действия и функции
В этом подразделе вы научитесь правильно вводить в компьютер сложные формулы. Если вы – школьник не самых старших классов, то не все математические функции, что здесь упомянуты, будут вам известны. Не огорчайтесь, при дальнейшем чтении непонятные вещи вам не понадобятся.
Действия арифметики обозначаются в VB следующим образом:
| ДЕЙСТВИЕ
|
| РЕЗУЛЬТАТ
|
| СМЫСЛ
|
|
| 2 + 3
|
| 5
|
| плюс
|
|
| 4 - 1
|
| 3
|
| минус
|
|
| 2 * 3
|
| 6
|
| умножить
|
|
| 10 / 2
|
| 5
|
| разделить
|
|
| 17 \ 5
|
| 3
|
| целочисленное деление (17 делится на 5, получается 3, в остатке 2)
|
|
| 17 Mod 5
|
| 2
|
| остаток от деления
|
|
| 37.2 Mod 10
|
| 7.2
|
| остаток от деления
|
|
| 2 ^ 3
|
| 8
|
| 2 3 (два в кубе) – возведение в степень
|
|
На уроках математики мы привыкли писать ab+cd, подразумевая: «a умножить на b плюс c умножить на d». В VB это выражение мы обязаны писать так: a*b+c*d. Иначе компьютер подумает, что нужно к переменной, имеющей имя ab, прибавить переменную, имеющую имя cd. Во избежание двусмысленности знак умножения положено писать всегда, в том числе и перед скобками. Например, a*(b+c) вместо a(b+c).
Скобки. Ввиду того, что с клавиатуры всю информацию приходится вводить символ за символом в одну строку, ввод двухэтажных выражений, таких как
затруднен. Поэтому для обозначения деления в программировании выбрана косая черта. Приведенное выражение на VB положено записывать так: a+1)/(b+1). Если бы мы не поставили скобок, то выражение получилось бы таким a+1/b+1, а это неправильно, так как компьютер, как и мы, всегда перед сложением и вычитанием выполняет умножение и деление, поэтому в последнем случае, не зная наших намерений, он бы сначала разделил 1 на b , а затем к результату прибавил бы a и 1.
Помните, что компьютер выполняет арифметические действия в привычном для нас порядке: сначала вычисляет функции, возводит в степень, извлекает корни, затем выполняет умножение с делением, затем сложение с вычитанием.
Вопрос: когда в выражениях можно ставить скобки? Ответ: всегда, когда у вас возникают сомнения в правильной очередности действий. Лишняя пара скобок не помешает. Пример: записать на VB выражение:
Запишем пока так:
(1 + a / (2+a*b)) / (3+a) * b
Разберитесь в этой записи. Сложные выражения с большим количеством скобок на глаз воспринимаются с трудом, так как трудно для конкретной скобки увидеть ее законную пару. В этом случае я могу посоветовать идти «от малого к большому», то есть сначала заметить самые малые из взятых в скобки фрагменты выражения. У нас это (3+a) и (2+a*b). Заметьте глазами их скобки. После этого вам будет уже легче заметить скобки для более крупных фрагментов, таких как (1 + a / (2+a*b)) , и т.д.
VB приходит вам на помощь, и в момент ввода очередной скобки выделяет полужирным шрифтом ее и ее пару.
Разобрались? Приведенная запись меня совсем не удовлетворяет, так как мы не знаем, что VB будет делать раньше – делить (1 + a / (2+a*b)) на (3+a) или умножать (3+a) на b. А от этого зависит результат. Добавим для верности пару скобок:
((1 + a / (2+a*b)) / (3+a)) * b
Теперь все в порядке.
Точка или запятая в десятичных дробях? Почти во всех языках программирования и уж, конечно, в VB, в программном тексте в окне кода принято в десятичных дробях вместо запятой ставить точку. Пример: y=62
.8 – шестьдесят две целых восемь десятых. Однако, если помните, результаты в текстовое поле VB выводит с запятой. В чем дело? VS, являясь приложением Windows, частично воспринимает от нее привычку пользоваться в России запятой. Особой проблемы тут нет. В подавляющем большинстве случаев то, что я уже сказал, поможет вам сделать правильный выбор. В остальных случаях применяйте метод «научного тыка» – пользуйтесь, например, точкой, а если VS жалуется или начинает делать что-то не то, меняйте ее на запятую.
Математические функции
. Кроме нескольких действий арифметики VB может выполнять и другие математические действия, например, извлечение квадратного корня. Однако на компьютере нет клавиши со значком
, поэтому в VS имеется специальная функция – Sqrt. Например, корень из 25 обозначается так – Sqrt(25), корень из a+b так – Sqrt(a+b). Здесь Sqrt – сокращение от английского выражения Square root – квадратный корень. Аргумент, то есть то, из чего нужно извлечь корень, записывается в скобках.
Приведу неполный список математических функций VB: Почти все они являются методами класса System.
Math.
ФУНКЦИЯ
|
РЕЗУЛЬТАТ
|
СМЫСЛ
|
Math.Abs(-8)
|
8
|
Абсолютная величина (модуль) числа
|
Math.Sqrt(25)
|
5
|
Корень квадратный
|
Math.Round(17.952)
|
18
|
Округление до целых
|
Math.Round(17.48)
|
17
|
|
Math.Round(51.23708, 2)
|
51,24
|
Округление до 2 знаков после запятой
|
Math.Ceiling(45.23)
|
46
|
«Потолок» – ближайшее целое число, большее или равное аргументу
|
Math.Ceiling(-45.23)
|
-45
|
|
Math.Floor(8.92)
|
8
|
«Пол» – ближайшее целое число, меньшее или равное аргументу
|
Math.Floor(-8.92)
|
-9
|
|
Fix(9.47)
|
9
|
Целая часть числа (дробная часть отбрасывается)
|
Fix(-9.47)
|
-9
|
|
Math.Sign(300)
|
1
|
Sign для всех положительных чисел равен 1
|
Math.Sign(0)
|
0
|
Sign для нуля равен 0
|
Math.Sign(-480)
|
-1
|
Sign для всех отрицательных чисел равен -1
|
Math.Max(29, 44)
|
44
|
Максимальное из двух чисел
|
Math.Min(29, 44)
|
29
|
Минимальное из двух чисел
|
Math.PI
|
3,14159265358979
|
Число ?
|
Math.E
|
2,71828182845905
|
Число e – основание натурального логарифма
|
Math.Exp(2)
|
7,38905609893065
|
e2 – число e в заданной степени
|
Math.Log(35)
|
3,55534806148941
|
Натуральный логарифм ln 35
|
Math.Log10(1000)
|
3
|
Десятичный логарифм log101000
|
Rnd
|
0,7055475
|
Случайное число из диапазона (0 – 1)
|
Кроме этого, имеются функции Sin, Cos, Tan (что означает тангенс), Asin (что означает арксинус), Acos, Atan и некоторые другие.
Работа со случайными величинами описана в 7.3.1.
Проверьте работу интересующих вас математических функций, написав программу такого вида:
Imports System.Diagnostics.Debug, System.Math
Public Class Form1
Inherits System.Windows.Forms.Form
Windows Form Designer generated code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WriteLine(PI)
WriteLine(Round(17.48))
End Sub
End Class
Проверьте в уме:
Выражение
(2+1)^2 при вычислении даст
9
Выражение
1+ (2+8)^3 при вычислении даст
1001
Выражение
1+Abs(5-8) при вычислении даст
4
Выражение
2^4+Sqrt(35+1) при вычислении даст
22
Выражение
Sqrt (8+ Floor(41.8)) при вычислении даст
7
Выражение
21 \ (Round (2.54+1)) при вычислении даст
5
Задание 9.
Определите устно, без компьютера, что напечатает процедура:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a, b As Double
a = (2 ^ 2 + 1) * (20 - (2 ^ 2) ^ 2) - 11
b = Round((a + 2) / 10) * (11 \ (a - 4))
WriteLine(a ^ 2 + b - 1)
End Sub
Понятно ли вам, что здесь нужно округлять ((a+2)/10) , а не ((a+2)/10)*(11\(a-4)) ? Если непонятно, то внимательно найдите к каждой скобке ее пару, начиная с фрагмента (a+2).
Числовые литералы. Слово «число» имеет слишком широкий смысл. Поэтому целесообразно конкретные числа, встречающиеся в программном тексте в окне кода, иногда называть по-другому. Будем называть их
числовыми литералами. Так, в строке
y = 20 * a - Round(-2.54) + 0.01
присутствует три числовых литерала: 20, -2.54, 0.01. Один из них целый, два – дробных. Литералы еще традиционно называют константами, но у этого термина в VB несколько другое значение.
В дальнейшем понятие литерала я расширю и на нечисловые типы данных.