Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TURBO_PASCAL.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
8 Мб
Скачать
☆

9.4.1. Обсуждение математических функций языка

9.4.1.1. Функция Pi. Эта функция генерирует число «Пи» с точностью, зависящей от наличия сопроцессора и содержит 10 или 14 знаков после запятой. Она может использоваться в вычислениях как константа, но не может быть подставлена в вычислимые константы раздела CONST!

9.4.1.2. Функция ArcTan(X). Она возвращает главное значение арктангенса (в диапазоне от -Pi/2 до +Pi/2). Это не всегда удобно, и можно определить функцию арктангенса угла наклона отрезка, один конец которого соответствует началу координат, а другой задан координатами X и Y (рис. 9.3).

{Функция возвращает значение угла наклона отрезка (0,0)-(X,Y) к оси X в радианах. Возвращаемое значение находится в диапазоне 0..2*Pi и учитывает знаки значений X и Y. }

FUNCTION ATAN2( X,Y : Real ) : Real;

VAR a : Real;

BEGIN

if X=0 then a:=Pi/2

else a:=Abs( ArcTan( Y/X ) );

case ( Byte(X>0) + Byte(Y>=0) ) of

2 : ATAN2 := a;

1 : if X>0 then ATAN2 := 2*Pi-a

else ATAN2 := Pi - a;

0 : ATAN2 := Pi + a

end {case}

END;

{========= ПРОВЕРКА РАБОТОСПОСОБНОСТИ ФУНКЦИИ =========}

CONST { константа перевода радиан в градусы }

R2D = 180/3.1415926;

VAR

i : Integer;

x, sx, ex : Real;

BEGIN

for i:=0 to 360 do begin { цикл по градусам }

x:=i/R2D; { перевод в радианы }

sx:=Sinx); cx:=Cos(x); { синус и косинус i }

x:=ATAN2(cx,sx)*R2D; { угол в градусах }

WriteLn(i:3, 'град. Функция возвращает: ', x:-10:6 )

end; { конец цикла по i }

ReadLn { пауза до нажатия клавиши ввода }

END.

Рис. 9.3 {177}

Эта функция возвращает корректное значение угла в диапазоне от 0 до 2*Pi, что гораздо удобнее в технических расчетах.

9.4.1.3. Доопределение функций. Часто ощущается нехватка функций arccos и arcsin. Но их нетрудно написать самим (рис. 9.4).

{Функция возвращает главное значение arcCos X (в рад) }

FUNCTION ArcCos( x : Real ): Real;

BEGIN

if x=0

then ArcCos:=Pi/2

else ArcCos:=ArcTan(Sqrt(1-Sqr(x)) / x) + Pi*Byte(x<0)

END;

{Функция возвращает главное значение арксинуса X(в рад)}

FUNCTION ArcSin( x : Real ) : Real;

BEGIN

if Abs(x)=1

then ArcSin:=0

else ArcSin:=ArcTan(x / Sqrt( 1-Sqr(x) ) )

END;

Рис. 9.4

Аналогичным образом можно построить библиотеку любых необходимых математических функций, сделав в итоге свой собственный математический модуль. Все необходимые «кирпичики» имеются в базовом наборе языка. Так, например, можно ввести десятичный логарифм (рис. 9.5) или степенную функцию (рис. 9.6).

{ Функция возвращает значение десятичного логарифма }

FUNCTION Log10( x : Real ) : Real;

BEGIN

Log10:= Ln(x)/Ln(10)

END;

Рис. 9.5

{ Функция возвращает значение A в степени X (A>0) }

FUNCTION Pwr(a,x : Real ) : Real;

BEGIN

Pwr := Exp( x * Ln(a) )

END;

Рис. 9.6 {178}

9.4.1.4. Функции Frac, Int и Trunc. Эти функции соответствуют математическим функциям взятия дробной и целой части числа соответственно. Помните, что

Frac( X ) = X - Int( X )

и знак X переходит на значение функции Frac.

Функция Trunc отличается от Int только типом возвращаемого значения. Int записывает целое число в вещественном формате (после точки — нули), a Trunc — в целочисленном. Такая двойственность необходима для совместимости в операторах присваивания.

9.4.1.5. Функция Round. Эта функция округляет число X до ближайшего целого числа с избытком:

Round (5.5) = 6 Round (-5.5) = -6

Round (5.9) = 6 Round (-1.51) = -2

Round (5.49) = 5 Round (-1.4) = -1

При подключении математического сопроцессора эта функция начинает работать несколько в другом режиме и может выдавать иные результаты.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]