Функции Sqrt и Sqr
Функция Sqrt в Паскале вычисляет квадратный корень числа. Синтаксис функции следующий:
function Sqrt(Х : ValReal) : ValReal;
Эта функция возвращает квадратный корень числа, переданного через параметр Х. Число Х должно быть положительным, иначе произойдёт ошибка во время выполнения программы (так написано в документации, но в моей версии компилятора ошибки не происходит, а функция в случае отрицательного параметра возвращает значение NaN).
Функция Sqr в Паскале вычисляет квадрат числа. Синтаксис функции для разных типов приведён ниже:
Эта функция возвращает результат вычисления квадрата числа, переданного через параметр. То есть Sqr = х * х.
О типе ValReal я рассказывал здесь.
Квадрат числа
Здесь всё крайне просто. Квадрат числа Х равен произведению Х на Х. То есть функция Sqr на первый взгляд кажется бесполезной. Потому что во многих случаях проще написать так:
Единственный случай, когда использование функции Sqr является обоснованным с точки зрения упрощения кода, это когда в качестве параметра передаётся вещественное число (константа) с большим количеством знаков после запятой, или очень большое целое число, или сложное выражение. Например:
будет написать проще, чем
Х := 5.3456753322 * 5.3456753322
Также возведение в квадрат числа в Паскале сложного выражения тоже будет проще, если использовать функцию Sqr:
X := Sqr(Y + 100 * Z / X)
Вычисление квадратного корня
Когда мы изучали функции вычисления экспоненты и натурального логарифма, то мы узнали, что с их помощью можно возвести число в любую степень. То есть вычислить, в том числе, и корень любой степени.
Однако использование этих функций всё-таки немного сложновато. Поэтому для вычисления квадратного корня в Паскале имеется специальная функция (потому что квадратный корень приходится вычислять намного чаще, чем, например, корень n-й степени).
Эту функцию вы уже знаете — это функция Sqrt.
А здесь я напомню что такое квадратный корень для тех, кто подзабыл математику.
Итак, квадратный корень из числа А (корень 2-й степени) — это решение уравнения:
То есть квадратный корень из числа А, это число Х, которое при возведении в квадрат даёт число А.
ВАЖНО!
Число А может быть только положительным числом. Извлечение корня из отрицательного числа тоже возможно, но это уже будут комплексные числа.
Операторы математических функций в Pascal
В данной статье будут разобраны операторы таких математических операции как:
- Квадрат числа
- Модуль числа
- Корень числа
- Косинус
- Арктангенс
- Логарифм
- Число со степенью
Квадрат числа
Так же как и во многих других языках программирования, в pascal есть оператор квадрата. Его синтаксис:
Оператор возводит число в квадрат.
Модуль числа
Для записи числа по модулю необходимо использовать следующую конструкцию:
Оператор возводит число по модулю.
Корень числа
Записью корень числа очень похож на оператор квадрата. Записывается корень следующим образом:
Синус
Далее о такой математической функции, как косинус. Его запись выглядит так:
Косинус
Ну и продолжая тему геометрии, нельзя не упомянуть такую функцию как синус, его синтаксис записывается так:
Арктангенс
Данный оператор позволяет найти арктангенс числа. Как и в предыдущих записях, после названия функции нужно вставить название переменной, арктангенс которой необходимо найти.
Логарифм
Нынешняя функция позволяет находить логарифм числа. Его синтаксис:
Число со степенью
Для возведения числа в степень на языке pascal, нужно использовать следующую конструкцию.
Как видно, в языке pascal есть все необходимые инструменты для математических вычислений.
Функции Sqr, Abs, Sqrt, Sin, Cos, Arctan, Ln, Exp, Pi в Pascal.
Мы уже знаем, какие существуют функции для целых переменных. Это – нахождение модуля числа (Функция Abc), а также возведение числа в квадрат (Функция Sqr). В этом уроке мы рассмотрим функции, применяемые к дробным числам. Это функции Sqr — квадрат числа, Abs — модуль числа, Sqrt — корень числа, а также известные всем математические функции Sin, Cos, Arctan, Ln, Exp, Pi.
В строке №7 записывается функция Sqr. Это функция возведения числа в квадрат.
В строке №9 записывается операция нахождения модуля числа.
Функции Sqr и Abs мы разбирали в уроке Abs, Sqr в Pascal.
В строке №11 записывается функция Sqrt. Данная функция подсчитывает корень числа, стоящего в скобках после слова Sqrt. В нашем случае функция Sqrt будет считать корень из числа «2».
В строке №13 записываем функцию Sin. Данная функция будет подсчитывать синус числа, стоящего в скобках после записи функции.
Строка №15. Функция Cos подсчитывает косинус числа, стоящего в скобках после функции.
Строка №17. Функция Arctan вычисляет арктангенс числа, стоящего в скобках после записи функции.
Строка №19. Функция Ln подсчитывает логарифм числа, стоящего в скобках после записи функции.
Строка №21. Функция Exp возводит число «e» (экспонента — 2.72. ) в степень, значение которой указывается в скобках после слова Exp. Т.е. в нашем случае число «e» будет возведено в степень «2».
Встроенные математические функции языка Pascal
Возведение в степень (кроме возведения в квадрат и возведения в степень числа e) отсутствует. Для возведения в произвольную степень можно воспользоваться очевидным равенством: x y =e y ln x . Для возведения числа в натуральную степень можно написать собственную функцию. Например,
Function Stepen(X : Real; N : Integer) : Real;
Var I : Integer; St : Real;
For I := 1 To N Do St := St * X;
Другой способ получить натуральное значение z=x y , где x, y — натуральные, это сделать так: Z := Round(Exp(Y * Ln(X))).
Примечание. Интересной является задача получения степени любого целого числа (за исключением нуля), если основание степени — неотрицательное целое, без использования развилки. Одно из возможных решений : (–1)*Ord(Odd(Y)) * Exp(Y * Ln(X)) + Ord(Odd(Y+1)) * Exp(Y * Ln(X)). Здесь Ord(K) — функция, возвращающая порядковый номер величины K в том или ином порядковом типе (в примере использовано свойство, что порядковый номер False равен 0, а порядковый номер True — 1).
Примеры записи математических выражений:
Математическая запись
Запись на Pascal
1. x 2 – 7x + 6
(Abs(x) — Abs(y)) / (1 + Abs(x * y))
Ln(Abs((y — Sqrt(Abs(x))) * (x — y / (z + Sqr(x) / 4))))
Логический операнд — это конструкция соответствующего языка программирования, которая задает правило для вычисления одного из двух возможных значений: True или False.
Чаще всего логические выражения используют в операторах присваивания или для записи того или иного условия. Составными частями логических выражений могут быть: логические значения (True, False); логические переменные; отношения.
Например, 1) Y:=True; 2) Z:=False; 3) LogPer:=A > B; 4) Log1:=(A = B) And (C <= D).
Как видно из примеров, отношение — это два выражения, разделенных между собой знаком операции отношения (>, <, =, <>, <=, >=). Отношение является простейшей конструкцией логического выражения. Оно вычисляет результат True, если выполняется заданное соотношение, и False — в противном случае.
Примечание. Несмотря на то, что операции отношения =, <>, >=, <= определены для вещественных типов, реально они в большинстве случаев корректно не работают в силу того, что множество вещественных величин, представимых в памяти ЭВМ, дискретно. Поэтому их следует, если это возможно, избегать. В том случае, когда всё-таки для вещественных возникает необходимость вычисления указанных отношений, разумно проверять вещественные величины не на равенство, а на близость расположения друг к другу, т.е. заменять отношения вида A=B отношениями вида |A-B|<E, где E — достаточно малое по абсолютной величине число (в общем случае — так называемое машинное епсилон).
В языке Pascal операции отношения определены для величин любого порядкового типа (целые, символьный, логический, перечислимый, диапазон). Операции отношения могут быть выполнены также над строковыми выражениями. Сравнение двух строк выполняется посимвольно слева направо в соответствии с их лексикографической упорядоченностью в таблице кодов ASCII. Эта упорядоченность предполагает, что «1»<«2», «a»<«b», «B»<«C» и т.д. Как только в процессе попарных сравнений символов с одинаковой порядковой позицией обнаруживается больший по коду ASCII символ, данный процесс прекращается, и считается, что строка с этим символом соответственно больше другой строки. Если строки имеют разную длину и их символы совпадают до последнего знака, то считается, что более короткая строка меньше.
Логическое выражение — это логический операнд или последовательность логических операндов, разделенных между собой знаками логических операций (NOT, AND, OR, XOR).
Порядок действий при вычислении значения логического выражения:
вычисляются значения в скобках;
вычисляются значения функций;
выполняется унарные операции (операция NOT);
выполняется операция AND;
выполняются операции OR, XOR;
выполняются операции отношения.
Действия выполняются слева направо с учетом их приоритета. Желаемая последовательность операций обеспечивается путем расстановки скобок в соответствующих местах выражения.
При реализации некоторых программ удобно использовать функции, которые имеют логическое значение. Обычно они используются для того, чтобы на некоторый вопрос получить ответ “ДА” или “НЕТ”.
Например, следующая функция возвращает True, если её аргумент — простое число, и False — в противном случае:
Function Simple (Pr : Integer) : Boolean;
Var I : Integer; LogPer : Boolean;
значение TRUE,если число Pr составное>
Until (I > Pr Div 2 + 1) Or (LogPer);
данного числа или обнаруживаем, что число составное>
Simple := Not LogPer
Рассмотрим примеры задач, где алгоритм решения является линейным.
Задача 1. Скорость первого автомобиля v1 км/ч, второго — v2 км/ч, расстояние между ними s км. Какое расстояние будет между ними через t ч, если автомобили движутся в разные стороны?
Согласно условию задачи искомое расстояние s1=s+(v1+v2)t (если автомобили изначально двигались в противоположные стороны) или s2=|(v1+v2)t-s| (если автомобили первоначально двигались навстречу друг другу).
Чтобы получить это решение, необходимо ввести исходные данные, присвоить переменным искомое значение и вывести его на печать.
Var V1, V2, T, S, S1, S2 : Real;
Write(‘Введите скорости автомобилей, расстояние между ними и время движения:’);
ReadLn(V1, V2, S, T);
S1 := S + (V1 + V2) * T;
S2 := Abs((V1 + V2) * T — S);
WriteLn(‘Расстояние будет равно ‘, S1:7:4, ‘ км или ‘, S2:7:4, ‘ км’)
Заметим, что идентификатор должен начинаться с латинской буквы, далее, кроме латинских букв, может содержать цифры, знак подчеркивания (_).
Разумно, чтобы программа вела диалог с пользователем, т.е. необходимо предусмотреть в ней вывод некоторых пояснительных сообщений. В противном случае даже сам программист может через некоторое время забыть, что необходимо вводить и что является результатом.
Для всех величин в программе объявлен тип Real, что связано со стремлением сделать программу более универсальной и работающей с как можно большими наборами данных.
Задача 2. Записать логическое выражение, принимающее значение TRUE, если точка лежит внутри заштрихованной области, иначе — FALSE.
Прежде всего обратим внимание на то, что эту сложную фигуру целесообразно разбить на несколько более простых: треугольник, лежащий в I и IV координатных четвертях, и треугольник, лежащий во II и III четвертях. Таким образом, точка может попасть внутрь одной из этих фигур, либо на линию, их ограничивающую. Количество отношений, описывающих какую-либо область, обычно совпадает с количеством линий, эту область ограничивающих. Чтобы точка попала внутрь области, необходима истинность каждого из отношений, поэтому над ними выполняется операция AND. Так вся область была разбита на несколько, то между отношениями, описывающими каждую из них, используется операция OR.
Учитывая приведенные здесь соображения и записав уравнения всех ограничивающих фигуру линий, получаем искомое логическое выражение:
(X >= 0) And (Y >= 1.5 * X – 1) And (Y <= X) OR (X <= 0) And (Y >= –1.5 * X – 1) And (Y <= –X)
Задача 3. Вычислить значение выражения
Для решения задачи достаточно ввести все данные, безошибочно записать выражение и вывести результат. Примечание. При решении этой задачи не учитывается область определения выражения, считается, что вводятся только допустимые данные.