Опубликован: 10.04.2015 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания ALT Linux
Лекция 2:

Общие сведения о языке программирования Free Pascal

2.6 Стандартные функции

В языке Free Pascal определены стандартные функции над арифметическими операндами (табл. 2.6).

Таблица 2.6. Некоторые арифметические функции
Обозначение Тип результата Тип аргументов Действие
abs(x) целый/вещественный целый/вещественный модуль числа
sin(x) вещественный вещественный синус
cos(x) вещественный вещественный косинус
arctan(x) вещественный вещественный арктангенс
pi без аргумента вещественный число π
exp(x) вещественный вещественный экспонента ex
ln(x) вещественный вещественный натуральный логарифм
sqr(x) вещественный вещественный квадрат числа
sqrt(x) вещественный вещественный корень квадратный
int(x) вещественный вещественный целая часть числа
frac(x) вещественный вещественный дробная часть числа
round(x) вещественный целый округление числа
trunc(x) вещественный целый отсекание дробной части числа
random(n) целый целый случайное число от 0 до n
Функции, определённые в программном модуле Math8Эти функции будут работать только в том случае, если в тексте основной программой после ключевого слова Unit указать имя Math.
arcos(x) вещественный вещественный арккосинус
arcsin(x) вещественный вещественный арксинус
arccot(x) вещественный вещественный арккотангенс
arctan2(y,x) вещественный вещественный арктангенс y/x
cosecant(x) вещественный вещественный косеканс
sec(x) вещественный вещественный секанс
cot(x) вещественный вещественный котангенс
tan(x) вещественный вещественный тангенс
lnXP1(x) вещественный вещественный логарифм натуральный от x + 1
log10(x) вещественный вещественный десятичный логарифм
log2(x) вещественный вещественный логарифм по основанию два
logN(n,x) вещественный вещественный Логарифм от x по основанию n

Определённую проблему представляет возведение x в степень n. Если значение степени n — целое положительное число, то можно n раз перемножить x (что даёт более точный результат и при целом n предпочтительней) или воспользоваться формулой9Формула формируется следующим образом: логарифмируем выражение x^n, получается n ln(x), затем экспоненцируем последнее.

\begin{cases}
x^n = e^{n\cdot \ln(x)}, & x > 0,\\
x^n = -e^{n\cdot \ln|x|}, & x < 0,
\end{cases}

которая программируется с помощью стандартных функций языка:

  • exp(n*ln(x)) — для положительного x;
  • -exp(n*ln(abs(x))) — для отрицательного x.

Данную же формулу можно использовать для возведения x в дробную степень n, где n — обыкновенная правильная дробь вида k/l, а знаменатель l — нечётный. Если знаменатель l — чётный, это означает извлечение корня чётной степени, следовательно, есть ограничения на выполнение операции (x > 0).

При возведении числа x в отрицательную степень следует помнить, что

x^{-n} = \frac{1}{x^{n}}.

Таким образом, для программирования выражения, содержащего возведение в степень, надо внимательно проанализировать значения, которые могут принимать x и n, так как в некоторых случаях возведение x в степень n невыполнимо.

Некоторые функции, предназначенные для работы со строками, представлены в табл. 2.7.

Таблица 2.7. Функции обработки строк
Обозначение Тип аргументов Тип результата Действие
Работа со строками
length(S) строка целое текущая длина строки S
concat(S1, S2,...) строки строка объединение строк S1, S2,...
copy(S, n, m) строка, целое, целое строка копирование n символов строки S начиная с m-й позиции
delete(S, n, m) строка, целое, целое строка удаление n символов из строки S начиная с m-й позиции
insert(S, n, m) строка, целое, целое строка вставка n символов в строку S начиная с m-й позиции
pos(S1, S2) строки целое номер позиции, с которой начинается вхождение S2 в S1
chr(x) целое символ возвращает символ с кодом x
ord(c) символ целое возвращает код символа с
Преобразование строк в другие типы
StrToDateTame(S) строка дата и время преобразует символы из строки s в дату и время
StrToFloat(S) строка вещественное преобразует символы из строки s в вещественное число
StrToInt(S) строка целое преобразует символы из строки s в вещественное число
Val(S,X,Kod) строка преобразует строку символов S во внутреннее представление целой или вещественной переменной X, если преобразование прошло успешно, Kod=0
Обратное преобразование
DataTimeToStr(V) дата и время строка преобразует дату и время в строку.
FloatToStr(V) вещественное строка преобразует вещественное число в строку
IntToStr(V) целое строка преобразует целочисленное число в строку
FloatToStrF(V,F,P,D) вещественное строка преобразует вещественное число V в строку символов с учётом формата F и параметров P, D

Поясним назначение функции FloatToStrF(V,F,P,D). Обычно её используют для форматированного вывода вещественного числа. Значения параметра F представлены в табл. 2.8, P — количество символов в формируемой из числа строке, D — количество символов в дробной части числа.

Таблица 2.8. Параметры функции FloatToStrF
Формат Назначение
ffExponent Экспоненциальная форма представления числа, P — мантисса, D — порядок: 1.2345E + 10.
ffFixed Число в формате с фиксированной точкой, P — общее количество цифр в представлении числа, D — количество цифр в дробной части: 12.345.
ffGtneral Универсальный формат, использует наиболее удобную форму представления числа.
ffNumber Число в формате с фиксированной точкой, использует символ разделителя тысяч при выводе больших чисел.
ffCurency Денежный формат, соответствует ffNumber, но в конце ставит символ денежной единицы.

Примером работы функции FloatToStrF служит фрагмент программы:

var
n : integer;
m: real;
St : string;
begin
n : = 5;
m: = 4. 8;
St := ’Иванов А. ’;
//Выражение chr(13) — символ окончания строки.
//Для вывода вещественного числа m отводится 4 позиции
//вместе с точкой, две позиции после точки.
	Label1. Caption := ’Студент ’+St+ ’ сдал ’+IntToStr ( n)+
		’ экзаменов. ’+ chr (13)+ ’Средний балл составил ’+
			FloatToStrF (m, ffFixed, 4, 2 );
end;

Его результатом будет фраза:

Студент Иванов А. сдал 5 экзаменов.

Средний балл составил 4.80.

В табл. 2.9 приведены функции, предназначенные для работы с датой и временем.

Если в процессе работы над программой возникает необходимость в создании переменной, размер которой неизвестен заранее, используют динамическую память10Динамическая память — это область памяти, которая в процессе компиляции отводится для хранения временных данных.. В языке Free Pascal операции распределения памяти осуществляются по средством представленными в табл. 2.10.

Таблица 2.9. Функции для работы с датой и временем
Обозначение Тип аргументов Тип результата Действие
date без аргумента дата-время возвращает текущую дату
now без аргумента дата-время возвращает текущую дату и время
time без аргумента дата-время возвращает текущее время
Таблица 2.10. Функции для работы с памятью
Обозначение Действие
adr(x) Возвращает адрес аргумента x.
dispose(р) Возвращает фрагмент динамической памяти, который ранее был зарезервирован за типизированным указателем р.
Freemen(p,size) Возвращает фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем р.
GetMem(p,size) Резервирует за нетипизированным указателем p фрагмент динамической памяти размера size.
New(p) Резервирует фрагмент динамической памяти для размещения переменной и помещает в типизированный указатель p адрес первого байта.
SizeOf(x) Возвращает длину в байтах внутреннего представления указанного объекта x.
Иллюстрация к задаче 2.1

Рис. 2.6. Иллюстрация к задаче 2.1
Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.

Юрий Макушин
Юрий Макушин
Россия, Москва, РЭА им. Плеханова, 2004