|
По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Общие сведения о языке программирования 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Формула формируется следующим образом: логарифмируем выражение
, получается
, затем экспоненцируем последнее.

которая программируется с помощью стандартных функций языка:
-
exp(n*ln(x)) — для положительного
; -
-exp(n*ln(abs(x))) — для отрицательного
.
Данную же формулу можно использовать для возведения
в дробную степень
, где
— обыкновенная правильная дробь вида
, а знаменатель
— нечётный. Если знаменатель
— чётный, это означает извлечение корня чётной степени, следовательно, есть ограничения на выполнение операции (x > 0).
При возведении числа
в отрицательную степень следует помнить, что

Таким образом, для программирования выражения, содержащего возведение в степень, надо внимательно проанализировать значения, которые могут принимать
и
, так как в некоторых случаях возведение
в степень
невыполнимо.
Некоторые функции, предназначенные для работы со строками, представлены в табл. 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 | Экспоненциальная форма представления числа, — мантисса, — порядок: 1.2345E + 10. |
| ffFixed | Число в формате с фиксированной точкой, — общее количество цифр в представлении числа, — количество цифр в дробной части: 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.
| Обозначение | Тип аргументов | Тип результата | Действие |
|---|---|---|---|
| date | без аргумента | дата-время | возвращает текущую дату |
| now | без аргумента | дата-время | возвращает текущую дату и время |
| time | без аргумента | дата-время | возвращает текущее время |
| Обозначение | Действие |
|---|---|
| adr(x) | Возвращает адрес аргумента x. |
| dispose(р) | Возвращает фрагмент динамической памяти, который ранее был зарезервирован за типизированным указателем р. |
| Freemen(p,size) | Возвращает фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем р. |
| GetMem(p,size) | Резервирует за нетипизированным указателем p фрагмент динамической памяти размера size. |
| New(p) | Резервирует фрагмент динамической памяти для размещения переменной и помещает в типизированный указатель p адрес первого байта. |
| SizeOf(x) | Возвращает длину в байтах внутреннего представления указанного объекта x. |
— мантисса,
— порядок: 1.2345E + 10.