Описание

Назначение

Randomize

Гарантирует несовпадение последовательностей случайных чисел, выдаваемых функцией Random

Inc(VAR X : Целое)

Увеличивает значение X на 1

Dec(VAR X : Целое)

Уменьшает значение X на 1

Inc(VAR X : Целое; N : Целое)

Увеличивает значение X на N

Dec(VAR X : Целое; N : Целое)

Уменьшает значение X на N

Необходимо сделать следующие замечания к таблицам: под целым типом понимается один из целочисленных типов языка — от Byte и ShortInt до LongInt; под вещественным типом понимается тип Real или иной тип с плавающей точкой (при использовании сопроцессора), если речь идет о входном значении; возвращаемое функцией вещественное значение соответствует типу Real, если не используется математический сопроцессор (ключ компилятора {$N-}) или типу Extended, если сопроцессор используется (ключ {$N+}).

Математические функции очень чувствительны к диапазону своих аргументов. Кроме того, возвращаемые значения целых типов должны в них умещаться, иначе возможны фатальные последствия. Большинство из приведенных функций являются стандартными для языков программирования и не нуждаются в комментариях. Однако ряд функций является специфическим. Рассмотрим их.

- 177 -

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

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

- 178 -

Эта функция возвращает корректное значение угла в диапазоне от 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).

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

Перейти на страницу:

Поиск

Похожие книги