По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Общие сведения о языке программирования Free Pascal
2.6 Стандартные функции
В языке Free Pascal определены стандартные функции над арифметическими операндами (табл. 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) | вещественный | вещественный | арктангенс ![]() |
cosecant(x) | вещественный | вещественный | косеканс |
sec(x) | вещественный | вещественный | секанс |
cot(x) | вещественный | вещественный | котангенс |
tan(x) | вещественный | вещественный | тангенс |
lnXP1(x) | вещественный | вещественный | логарифм натуральный от ![]() |
log10(x) | вещественный | вещественный | десятичный логарифм |
log2(x) | вещественный | вещественный | логарифм по основанию два |
logN(n,x) | вещественный | вещественный | Логарифм от ![]() ![]() |
Определённую проблему представляет возведение в степень
. Если значение степени
— целое положительное число, то можно
раз перемножить
(что даёт более точный результат и при целом
предпочтительней) или воспользоваться
формулой9Формула формируется следующим образом: логарифмируем выражение
, получается
, затем экспоненцируем последнее.
![\begin{cases}
x^n = e^{n\cdot \ln(x)}, & x > 0,\\
x^n = -e^{n\cdot \ln|x|}, & x < 0,
\end{cases}](/sites/default/files/tex_cache/4fec0586a6efa4120d7e5f347a1ab2a5.png)
которая программируется с помощью стандартных функций языка:
-
exp(n*ln(x)) — для положительного
;
-
-exp(n*ln(abs(x))) — для отрицательного
.
Данную же формулу можно использовать для возведения в дробную степень
, где
— обыкновенная правильная дробь вида
, а знаменатель
— нечётный. Если знаменатель
— чётный, это означает извлечение корня чётной степени, следовательно, есть ограничения на выполнение операции (x > 0).
При возведении числа в отрицательную степень следует помнить, что
![x^{-n} = \frac{1}{x^{n}}.](/sites/default/files/tex_cache/c5e5b33e62e9c04c73dee3971b941f8a.png)
Таким образом, для программирования выражения, содержащего возведение в степень, надо внимательно проанализировать значения, которые могут принимать и
, так как в некоторых случаях возведение
в степень
невыполнимо.
Некоторые функции, предназначенные для работы со строками, представлены в табл. 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 — количество символов в дробной части числа.
Формат | Назначение |
---|---|
ffExponent | Экспоненциальная форма представления числа, ![]() ![]() |
ffFixed | Число в формате с фиксированной точкой, ![]() ![]() |
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.
Обозначение | Тип аргументов | Тип результата | Действие |
---|---|---|---|
date | без аргумента | дата-время | возвращает текущую дату |
now | без аргумента | дата-время | возвращает текущую дату и время |
time | без аргумента | дата-время | возвращает текущее время |
Обозначение | Действие |
---|---|
adr(x) | Возвращает адрес аргумента x. |
dispose(р) | Возвращает фрагмент динамической памяти, который ранее был зарезервирован за типизированным указателем р. |
Freemen(p,size) | Возвращает фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем р. |
GetMem(p,size) | Резервирует за нетипизированным указателем p фрагмент динамической памяти размера size. |
New(p) | Резервирует фрагмент динамической памяти для размещения переменной и помещает в типизированный указатель p адрес первого байта. |
SizeOf(x) | Возвращает длину в байтах внутреннего представления указанного объекта x. |