ПОНЯТНО О Visual Basic NET

         

Математические действия и функции


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

Действия арифметики обозначаются в 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 несколько другое значение.

В дальнейшем понятие литерала я расширю и на нечисловые типы данных.


Содержание раздела