Abs — Функция Delphi


Abs — Функция Delphi

  • Если аргумент относится к целому типу, Abs проверяет, не является ли его значение отрицательным, а, если является, вычисляет противоположное ему значение. Тип возвращаемого значения — Integer или Int64 в зависимости от типа аргумента.
  • Для вещественных аргументов Abs очищает знаковый бит без изменения всех остальных. Другими словами, минус ноль и минус бесконечность становятся плюс нулем и плюс бесконечностью. Даже если аргумент равен NaN, результат равен исходному значению, знаковый бит которого равней нулю.

Сбой функции ABS в Delphi

В Delphi6 или в Delphi 2010 объявите две переменные типа Currency (vtemp1, vtemp2) и введите для них значение 0,09. Вставьте одну из переменных с помощью функции ABS и сравните ее с другой. Можно ожидать, что сравнение даст положительный результат, так как часы компилятора показывают одинаковое значение для abs (vtemp1) и vtemp2. Странно, если утверждение if терпит неудачу .

Примечания: -Эта проблема возникает только при работе с числом 0,09 (попытка нескольких других близких значений показала нормальные результаты). -При объявлении переменной Double вместо валюты проблема перестает существовать.

3 ответа

Я думаю, что причина в преобразованиях типов. Функция Abs() возвращает real результаты, поэтому переменная currency приводит к real . Посмотрите на документацию:

Валюта — это тип данных с фиксированной запятой, который минимизирует ошибки округления в денежных расчетах. На платформе Win32 оно хранится в виде масштабированного 64-разрядного целого числа с четырьмя последними значащими цифрами, неявно представляющими десятичные разряды. При смешивании с другими действительными типами в присваиваниях и выражениях значения валюты автоматически делятся или умножаются на 10000.

поэтому валюта фиксированная, а реальная — с плавающей точкой. Пример кода для вашего вопроса:

выдает неравный результат из-за преобразования типов;

часы компилятора показывают одинаковое значение для abs (vtemp1) и vtemp2

Попробуйте добавить x : real , затем вызовите x := abs(b); , добавьте x в список часов, выберите его и нажмите « Edit watch , затем выберите «Плавающая точка». X становится 0.899. 967 .

не только 0.09 значение дает такой результат. Вы можете попробовать этот код, чтобы проверить:

Итак, если вам нужно абсолютное значение переменной Currency — просто сделайте это. не используйте abs() плавающей точкой abs() :

Математические функции в Дельфи

Математические функции описаны в модуле Math. Этот модуль должен быть подключен к приложению оператором uses.

Таблица математических функций в Delphi:

Функция

Описание

Аргумент

Abs (X)

абсолютное значение

целое и действительное

выражение

Ceil (X)

округление донаименьшего целого

Compare

Value (A, B) сравнение двух значений

целые и действительные

выражения

DivMod (Divided,

Divisor, Result,

Remainer) целочисленное деление:Result – результат,


Remainder – остаток

EnsureRange

(AValue,

Amin,Amax) возвращает ближайшеек Avalue в диапазоне

Amin — Amax

целые и действительные

выражения

Exp(X)

экспонента

выражение

Floor (X)

округление до наиб целого,меньшего или равного

аргумента

Frac (X)

дробная часть X-Unt(X)

Frexp(X, Mantissa,

Exponent) выделяет мантиссуи показатель степени 2

Int(X)

целая часть аргумента

выражение

IntPower(X,E)

возведение Xв целую степень E: X в степени Е

Integer

IsInfinite(X)

определяет, не равенли аргумент бесконеч

выражение

IsNan (X)

определяет, не равен лиаргумент Nan – нечисловой

величине

выражение

IsZero(X, Epsilon)

определяет, не явлли аргумент от нуля

менее чем на Epsilon


целые или действ

числа

Ldepx(X,P)

умножение X на 2 в степени Р

Integer

Ln(X)

натуральный логарифм (X)

выражение

LnXP1(X)

натуральный логарифм(X+1)

Log10(X)

десятичный логарифм от X

Log2(X)

логарифм от Xпо основанию 2

LogN (N,X)

логарифм от Xпо основанию N

Max(A,B)

максимум двух чисел

int64, Single, Double

Extended

Min(A,B)

минимум двух чисел

Pi

Poly(X,C)

вычисляет полином Xс массивом коэфф С

массив Double

Power (X, E)

Функции Delphi модуля System

Модуль System

Предлагаем список функций модуля System, используемого в среде разработки Delphi.

Abs Предназначена для получения абсолютной величины числа
Addr Возвращает адрес переменной, функции или процедуры
ArcTan Арктангенс числа, возвращается в радианах
Assigned Осуществляет проверку функциональности указателей, объектов, методов
BeginThread Начинает отдельный поток выполнения кода
Chr Конвертирует целое число в символ
Concat Соединяет несколько строк в одну
Copy Создает копию части строки или части массива
Cos Косинус числа
Eof Возвращает true, если позиция курсора находится в конце файла открытого с помощью Reset
Eoln Возвращает true, если позиция курсора находится в конце строки
Exp Выдаёт экспоненту числа
FilePos
FileSetDate Установка даты и времени последнего изменения файла
FileSize Выдает размер открытого файла в записях
GetLastError Выдаёт код ошибки последнего неудачного Windows API вызова.
GetMem Получает указанное число байтов памяти.
Hi Возвращает байт старшего разряда от типа Integer.
High Возвращает самое высокое значение типа или переменной
Int Целая часть числа с плавающей точкой
IOResult Содержит возвращаемый код последней операции ввода/вывода
IsMultiThread Возвращает True, если код выполняет множество потоков
Length Возвращает число элементов в массиве или строке
Ln Выдает натуральный логарифм числа
Lo Возвращает младший байт целого числа (2-байтового)
Low Возвращает самое низкое значение типа или переменной
Odd Провеяет, является ли целое число нечетным
Ord Порядковое значение целого числа, символа или перечисления
ParamCount Выдает число параметров переданной текущей программе
ParamStr Возвращается один из параметров используемых для запуска текущей программы
Pi Математическая константа
Pos Находит позицию одной строки в другой
Pred Уменьшает порядковую переменную
Random Генерирует случайное целое число или число с плавающей запятой
Round Округление чисел с плавающей запятой до целого числа
RunError Заканчивает программу с диалогом ошибки
SeekEof Пропускает символы, пока не встретится конец файла
SeekEoln Пропускает символы, пока не встретится конец текущей строки или файла
Sin Синус числа
SizeOf Возвращает занимаемый размер типа или переменной в байтах
Slice Создает часть массива с параметром «Открытый Массив»
Sqr Возвращает квадрат числа
Sqrt Возвращает квадратный корень числа
StringOfChar Создает строку из одного символа, повторенного много раз
StringReplace Заменяет одну или несколько подстрок, найденных в заданной строке
StringToWideChar Преобразует обычную строку в WideChar-буфер с завершающим 0
Trunc Целая часть числа с плавающей запятой
UpCase Преобразует значение Char к верхнему регистру
WideCharToString Копирует строку WideChar, заканчивающуюся нулём, в нормальную строку
Append Открывает текстовый файл, для добавления записей в файл (добавляет в конец файла)
Assign Назначает дескриптор файла на бинарный или текстовый файл
AssignFile Связывает дескриптор файла с бинарным или текстовым файлом
BlockRead Читает блок записей данных из нетипизированного двоичного файла
BlockWrite Записывает блок записей данных в нетипизированный двоичный файл
Break Выполняет выход из одного цикла
ChDir Выбор диска и директории ( папки ), в которой будет производиться работа
Close Закрывает открытый файл
CloseFile Закрывает открытый файл
Continue Заставляет перейти к следующей итерации цикла
Dec Декремент порядковой переменной
Delete Удаляет часть символов из строки
Dispose Очищает память на которую указывает указатель
EndThread Заканчивает поток с кодом завершения
Erase Стирает файл
Exclude Исключает значение из переменной набора (множества)
Exit Осуществляет выход из функции или процедуры
Frac Дробная часть числа с плавающей запятой
FillChar Заполняет раздел памяти значением байта или символа-заполнителя
Flush Сбрасывает буферизованные данные текстового файла в файл
GetDir Получает текущий каталог (диск плюс путь) для указанного диска.
Halt Заканчивает программу с дополнительным диалогом.
Inc Увеличивает порядковую переменную
Include Включает значение во множество переменных
Insert Вставляет строку в другую строку
MkDir Создаёт каталог
Move Копирует байты данных из источника в место назначения
New Создаёт новую переменную типа указатель
Randomize Устанавливает генератор случайного числа на следующее значение
Read Позволяет прочитать данные из двоичного или текстового файла
ReadLn Позволяет прочитать полную строку данных из текстового файла
ReallocMem Позволяет изменить размер существующего блока памяти
Reset Открывает текстовый файл для чтения, или двоичный файл для чтения/записи
ReWrite Открывает текстовый или двоичный файл для записи
RmDir Удаление каталога
Seek Перемещает указатель в двоичном файле в новую позицию
SetLength Изменяет размер строки или размер динамического массива
SetString Копирует символы из буфера в строку
Str Конвертирует целое число или число с плавающей точкой в строку
Truncate Уменьшает размер файла — удаляя все данные после текущей позиции
WriteLn Записывает законченную строку данных в текстовый файл

Илон Маск рекомендует:  Что такое код asp logextfileserverport

Функция ABS не работает в Delphi — delphi

В Delphi6 или Delphi 2010 объявите две переменные типа Currency (vtemp1, vtemp2) и подайте им значение 0.09. Вставьте одну из переменных с функцией ABS и сравните ее с другой. Вы ожидали бы, что сравнение даст положительный результат, поскольку компилятор часы показывают одинаковое значение для abs (vtemp1) и vtemp2. Как ни странно, оператор if терпит неудачу.


Примечания: -Эта проблема возникает только при работе с число 0,09 (попытка нескольких других близких значений выявила нормальные результаты) -Удача переменной как Двойного вместо валюты, проблема перестает существовать.

    2 3
  • 18 окт 2020 2020-10-18 17:09:06
  • Johny

3 ответа

Я только что обнаружил, что функция Delphi XE2 Abs не перегружает тип валюты.

это единственные типы, поддерживаемые abs

  • функция Abs (X:): Real; перегрузки;
  • функция Abs (X:): Int64; перегрузки;
  • function Abs (X:): Integer; перегрузки;
  • 18 окт 2020 2020-10-18 17:09:06
  • Charles Faiga

Немного разъяснений. «Проблема» появляется, если сравнивать значения float:

Это связано с тем, что Abs(A) возвращает значение float, а A = Abs(A) реализуется как сравнение с плавающей точкой.

Я не мог воспроизвести его, если сравниваются значения Currency:

Но второй образец также является потенциальной ошибкой, потому что B:= Abs(A) внутренне является поплавковым делением/умножением на 10000 с округлением до Currency (int64) и зависит от режима округления FPU.

Я создал отчет qС# 107893, он был открыт.

  • 18 окт 2020 2020-10-18 17:09:06
  • kludg

Я думаю, что причина — это преобразования типов. Функция Abs() возвращает real результаты, поэтому переменная currency переходит к real . Взгляните на документацию:

Валюта — это тип данных с фиксированной точкой, который минимизирует ошибки округления в денежные расчеты. На платформе Win32 она хранится как масштабированная 64-битное целое число с четырьмя последними значащими цифрами неявно представляющих десятичные знаки. При смешивании с другими реальными типами в присвоений и выражений, значения валюты автоматически делятся или умножается на 10000.

поэтому валюта фиксирована, а реальная — с плавающей запятой. Пример кода для вашего вопроса:

дает не равный результат из-за преобразования типов;

часы-компиляторы показывают одинаковое значение для abs (vtemp1) и vtemp2

Попробуйте добавить x : real , затем вызовите x := abs(b); , добавьте x в список часов, выберите его и нажмите Edit watch , затем выберите пункт с плавающей запятой. x становится 0.899. 967 .

не только значение 0.09 дает такой результат. вы можете попробовать этот код, чтобы проверить:

поэтому, если вам нужно абсолютное значение переменной Currency — просто сделайте это. не используйте плавающие точки Abs() :

Hyundai Tuscani Рестайлинг. › Бортжурнал › Ремонтируем ABS. Сканер Delphi DS-150e, магнитное кольцо и неудача.


Всем привет! В этой статье поделюсь с Вами своими радостями и печалями… Поехали.
С самого начала истории владения машиной, на ней никогда не работала абс, горели одноименная лампа и красная лампа brake. Валялся у меня сканер elm блютуз, как у всех, но он даже и не думал подключаться к машине. Да и если бы подулючился, в диагностике абс это продвинуло бы меня на 0см, ни больше ни меньше, так как этот примитивный девайс ничего толком не может.
И вот, не так давно любимая жена подарила мне на 23 февраля автомобильный сканер, именуемый Delphi DS-150e. Это такая китайская копия некоего очень крутого сканера, о котором я не в курсе. Стоил подарок не так давно чуть более 3тыс рублей. О результатах пользования сегодня немного расскажу. В общем, скажу так — жены, берите пример))

Аппарат сделан добротно, подключается к разьему автомобиля OBD 2 и не только, можно докупить и другие разьемы, если у Вас, скажем, какой-нибудь старый мерседес. В работе с ним понадобится ноутбук, также есть возможность купить модификацию с блютуз и баловаться с показателями torque со смартфона. У меня без блютуза, нахрен он нужен, и подключается через usb. Еще в нем есть разьем под флешку, не понятно зачем. Больше похоже на китайскую традицию пихать в девайсы все подряд)) особенно разьемы под флешки. В комплекте идет диск с ПО.
Вернемся к нашим пирогам. Подключился я этим сканером к машине. По двигателю висит какая то старая ошибка датчика распредвала. По тормозной системе 12 ошибок. Все это добро стираем. Все ошибки стерлись, остались актуальны 2 — обрыв заднего левого и неверный зазор переднего левого датчика, выходит после начала движения. Как итог, заказал оба датчика. Сейчас цены кусаются, сами знаете. И самый дешманский датчик обходится в 1800р. Оригинал так и вовсе стал уделом больных перфекционистов — от 3тыс за датчик.
Через неделю пришел передний левый. Я было полез его менять, но каково было мое удивление, когда я увидел это:

Обучающий курс. 12. Функции и процедуры в Delphi. Математические вычисления. Случайные числа

Сегодня мы поговорим о процедурах и функциях в Delphi . Что такое процедура? Это маленькая программа, выполняющая операции с указанными данными. Различают собственно процедуры и функции. Их основное отличие — процедура просто совершает какие-либо операции, а функция обязательно выдаёт какой-либо результат в результате своей работы. Существует огромное количество стандартных процедур и функций. Подпрограммы (так называют процедуры и функции) можно писать и самостоятельно, но об этом речь пойдёт позже. Сейчас нам нужно научиться работать с готовыми функциями.

Общие сведения о подпрограммах

Фактически, подпрограмма — это такая же полноценная программа, просто работает она не отдельно, не сама по себе, а включена в другую программу.
У подпрограммы всегда есть имя. Имя строится по тем же правилам, что и идентифмкатор. Как правило, имена даются вполне логичные. Например, если функция находит максимальное из нескольких чисел, то её логично назвать Max .
Подпрограммы могут иметь входные параметры. Входные параметры — это данные, которые сообщаются подпрограмме до начала её работы, а в процессе выполнения эти данные могут использоваться. Тем не менее, подпрограммы могут и не иметь входных параметров. Входные параметры также называют аргументами. Например, функции, которая узнаёт текущее время, никакие дополнительные параметры не нужны, а вот если функция считает факториал, то обязательно должно быть число, для которого он считается.
Как было сказано выше, функция выдаёт какое-то значение в результате своей работы. Процедура в общем случае значения не выдаёт.

Вызов подпрограмм

Вызываются подпрограммы по имени. Если подпрограмме требуется передать какие-либо параметры, то они указываются в скобках после имени подпрограммы через запятую. Если входные параметры отсутствуют, достаточно просто написать имя подпрограммы, либо оставить скобки пустыми. В случае, если работа происходит с функцией, результат можно «сохранить» в какой-то переменной, просто «присвоив» этой переменной функцию.

Обратите внимание: работа с функциями происходит как с обычными переменными, просто их значения вычисляются «на лету».

Функции математических вычислений

Эти функции работают с числовыми данными. Как правило, входным параметром является какое-то число, а выходным — результат вычисления. Практически везде аргумент является либо целым числом ( Integer ), либо вещественным ( Real ). Возвращаемое значение — тоже число. Рассмотрим некоторые из этих функций:

Илон Маск рекомендует:  Что такое код asp hcnocompressionforhttp10

Abs(x) — модуль (абсолютное значение) указанного числа x . Пример: Abs(-5) = 5 .

Sin(x) — синус числа x . Здесь x — угол в радианах (не в градусах!). Пример: Sin(Pi/2) = 1 .

Cos(x) — косинус числа x . Аналогично, x — радианы. Пример: Cos(Pi) = -1 .

Exp(x) — экспонента, e x ( e в степени x ).

Ln(x) — натуральный логарифм числа x . Пример: Ln(Exp(2)) = 2 .

Sqr(x) — квадрат числа x ( x 2 ). Пример: Sqr(5) = 25 .

Sqrt(x) — квадратный корень числа x . Пример: Sqrt(64) = 8 .

Int(x) — целая часть числа x . Пример: Int(1.234) = 1 .

Frac(x) — дробная часть числа x . Пример: Frac(1.234) = 0.234 .

Round(x) — округление аргумента до ближайшего целого числа. Пример: Round(1.234) = 1 .

Trunc(x) — целая часть вещественного числа x. Пример: Trunc(1.234) = 1 .

Pred(x) — предыдущее значение x (например, для x = 2 это 1 ).

Succ(x) — следующее значение x (для x = 2 это 3 ).

Odd(x) — проверка аргумента на нечётность. Функция возвращает значение True , если аргумент является нечётным числом и False — если чётным. Пример: Odd(5) = True .

Предсказываю вопрос: в чём отличие Int() от Trunc() ? А отличие в том, что Int() возвращает число вещественного типа, а Trunc() — целочисленного .

Это лишь часть всех доступных функций. На самом деле их гораздо больше. Но помимо функций есть ещё процедуры.

Процедуры работы с числами

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

Inc(x) — увеличение аргумента на единицу. Фактически, это то же самое, что x:=x+1 . Тем не менее, рекомендуется использовать именно эту функцию, так как работает она быстрее.
Примечание: под понятием «быстрее» подразумевается, конечно, быстрота «компьютерная». Компьютер выполняет миллионы операций в секунду и для человека такие вещи незаметны.

Inc(x,n) — увеличение аргумента на число n . Эквивалентно записи x:=x+n .

На самом деле, это не две разные процедуры — просто параметр n является необязательным. Да, бывают необязательные параметры, которые можно указать, а можно и не указывать. Если они отсутствуют, то просто берётся какое-то значение по умолчанию. В данном случае n по умолчанию имеет значение 1 .

Dec(x,n) — уменьшение аргумента на n единиц. Точно также, как и в Inc , параметр n является необязательным. Эквивалентно записи x:=x-n .


В документации необязательные параметры обычно заключают в квадратные скобки, т.е. обычно пишут Inc(x , [n]) . Обратите внимание: это лишь условное обозначение, которое создано с целью узнавания, что параметр необязательный. В программном коде никаких скобок нет и быть не может.

Не хватает стандартных математических функций?

Существует дополнительный модуль с именем Math , в котором содержится большое число математических функций. Например, если нужно посчитать гиперболический арксеканс числа, то мучаться и описывать способ его вычисления вручную не придётся — есть готовая функция ArcSecH() .
Чтобы подключить модуль Math , откройте исходный код модуля. Для этого, когда открыта форма, следует нажать F12 , либо выбрать пункт меню View » Toggle Form/Unit . Далее нужно переместиться в самое начала модуля в раздел uses . В этом разделе через запятую описываются имена подключённых модулей. Как можно заметить, даже при наличии пустой формы несколько модулей уже подключены. В этот список и следует добавить Math :

Всё, теперь в Вашем распоряжении большое количество математических функций.

Пример комбинирования функций

Раз уж речь пошла о математических функциях, пусть пример будет на них и основан. Допустим, у нас есть такая сравнительно сложная функция:

Нам нужно создать программу, которая бы вычисляла значение этой функции по заданным числам x и y . Рассмотрим поэтапно элементы функции:
1) Возведение числа e в степень, модуль — функции Exp() и Abs() соответственно.
2) Натуральный логарифм — функция Ln() .
3) Число e . Часто спрашивают — как получить число e ? Ведь это, по сути, такая же константа, как и число пи . Но она не объявлена. А ответ прост: e = e 1 , поэтому e — это exp(1) .
4) Тангенс — функция Tan() .
Всё необходимое у нас есть, поэтому можно приступить к записи. Главное — не забывать заключать в скобки отдельные элементы формулы, чтобы порядок действий сохранился (в нашем примере это не потребуется).

Как возвести число в степень?

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

Способ 1. X y можно преобразовать к виду e ln(x)⋅y . Тогда возведение в степень можно записать так:

Способ 2. В модуле Math есть функция для возведения в степень — Power . У функции 2 аргумента — основание и показатель степени. Запись, соответственно, следующая :=Power(x,y);

Случайные числа

Зачем нужны случайные числа? Как правило, чтобы проверить результаты какого-то эксперимента при различных условиях. На основе случайных чисел можно вычислять различные вероятности. Во всех языках программирования есть возможность использовать случайные числа.

В Pascal (и Delphi соответственно) случайные числа генерируются функцией Random . Функция принимает один параметр, да и тот необязательный. Этот параметр позволяет указать границу диапазона, из которого будет выбрано случайное число. Итак: Random([Range: Integer]) . Если Range указан, то число выбирается из диапазона 0 ( X — само случайное число, которое будет получено). Обратите внимание, что сама граница в диапазон не включается, т.е. Random(10) никогда не выдаст число 10 , хотя 0 — запросто. Если диапазон не указан, то он считается равным единице, т.е. 0 .

Пример. Создадим форму с кнопкой, но пусть кнопка каждую секунду изменяет своё положение. Воспользуемся таймером ( TTimer , вкладка System палитры компонент). Interval оставим без изменения ( 1 сек. ), а вот в обработчике запрограммируем произвольное изменение положения кнопки на форме. Разберёмся, что нам нужно:
1) Позиция кнопки на форме. Как Вы уже знаете, за положение отвечают свойства Left и Top , которые указывают положение левого верхнего угла кнопки относительно левого верхнего угла формы. Именно этим свойствам мы будем присваивать произвольные значения.
2) Каков будет диапазон для генерации случайных чисел? Очевидно, что кнопка не должна уйти за границы формы. Значит нам нужно подключить размеры самой формы, т.е. её высоту и ширину. В данном случае будем использовать не Width и Height , а ClientWidth и ClientHeight , так как в первые свойства входят заголовок и границы формы, а это лишние пиксели, за которые кнопка может вылезти. Однако и это ещё не всё — из этих размеров мы должны вычесть соответственно ширину и высоту самой кнопки, иначе она может частично скрыться за границами.
Пишем обработчик:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Left := Random(ClientWidth-Button1.Width);
Button1.Top := Random(ClientHeight-Button1.Height)
end ;

Запускаем программу и наблюдаем. Кнопка действительно прыгает с места на место. Но есть один крайне неприятный момент: запустите программу несколько раз и понаблюдайте за точками, в которые попадает кнопка. Вы сразу заметите, что каждый раз кнопка перемещается по одним и тем же точкам.

Отчего это происходит? Дело в том, что числа, выдаваемые функцией Random() на самом деле не являются случайными — они псевдослучайны , т.е. наблюдается повторение. К счастью, решение есть — специальная процедура Randomize() инициализирует генератор случайных чисел, который выдаёт действительно случайные числа. Вызвать эту процедуру нужно всего один раз за время работы программы — обычно это делается при запуске (например, в событии OnCreate формы). Процедура не принимает никаких параметров. Вернёмся к нашему примеру:

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize
end ;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Left := Random(ClientWidth-Button1.Width);
Button1.Top := Random(ClientHeight-Button1.Height)
end ;

Теперь кнопка будет прыгать совершенно по разным точкам при каждом запуске программы.

Кстати, можно дописать скобки к названию процедуры — от этого работа не изменится: Randomize; = Randomize(); А запись немного красивее (на мой взгляд).

Дополнительные возможности редактора кода

В редакторе кода есть одна очень хорошая вещь — после того, как написано имя процедуры или функции и открыта скобка, появляется подсказка со всеми параметрами, которые подпрограмма принимает. Более того, там же указаны и типы данных всех параметров. Попробуйте, к примеру, набрать Inc( и подождать секунду — появится подсказка:

Как и было отмечено выше, второй параметр является необязательным и он заключен в квадратные скобки.

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

Илон Маск рекомендует:  Всплывающие подсказки

Если функции или процедуре входные параметры не нужны, подсказка всё равно появится и сообщит об этом:

Если после набора имени и скобки подсказка не появилась, то и при компиляции программы скорее всего возникнет ошибка. Причиной, по которой компилятор не смог найти указанную функцию или процедуру, может быть ошибка при наборе имени, либо модуль, в котором описана подпрограмма, не подключен.
Ошибки при компиляции появляются внизу окна редактора кода с указанием номера строки, где обнаружена ошибка и описанием самой ошибки.
Попробуем запросить процедуру Randomiz (например, мы случайно недописали букву » e » на конце):

Строка с ошибкой выделилась, а внизу появился её номер ( 28 ) и описание — Undeclared identifier (неописанный идентификатор).

Заключение

В этом уроке охвачено сразу несколько тем — знакомство с процедурами и функциями, обзор математических функций и процедур, модуль Math, работа со случайными числами, а также удобства редактора кода и выделение ошибок при компиляции.

Математические операции Delphi

Для дальнейшего изучения языка Delphi рассмотрим математические операции. Они делятся на арифметические, логические операции и операции отношения.


Арифметические операции выполняют арифметические действия в выражениях над значениями переменных.

Таблица 5. Арифметические операции

Операция Действия Типы операндов Тип результата
+ Сложение Целый/вещественный Целый/вещественный
Вычитание Целый/вещественный Целый/вещественный
* Умножение Целый/вещественный Целый/вещественный
/ Деление Целый/вещественный Вещественный
Div Деление нацело Целый Целый
Mod Остаток от деления Целый Целый

Особое внимание следует обратить на то, что тип результата деления – всегда вещественное число.

Оператор DIV позволяет получить целую часть результата деления одного числа на другое. Например, значение выражения 5 DIV 2 равно 2.

Оператор MOD (деление по модулю) позволяет получить остаток от деления одного числа на другое. Например, значение выражения 15 MOD 7 равно 1.

При вычислении значений выражений, как и в математике, учитывается порядок действий. Сначала выполняются операторы *, /, DIV, MOD, а затем – операторы + и -. Для задания нужного порядка выполнения операций можно использовать скобки.

Операции отношениясравнивают два операнда и определяют истинность или ложность выражения. Результат операции отношения имеет тип Boolean, который принимает два значения: True (истина) и False (ложь).

Таблица 6. Операции отношения

Таблица 7. Логические операции

Операция Название Выражение Результат
= Равно А=В True, если А равно В
<> Не равно A<>B True, если А не равно В
> Больше A>B True, если А больше В
= Больше или равно A>=B True, если А больше или равно В
Операция Действие Пример выражения
Not Логическое отрицание Not A
And Логическое и A and B
Or Логическое или A or B
Xor Исключающее или A xor B

Стандартные математические функции Delphi

В языке Delphi имеются следующие математические функции:

Таблица 8. Математические функции

Функция Значение
Abs (x) Возвращает абсолютное значение (модуль) числа х
Sqrt (x) Возвращает число, равное квадратному корню из х
Sqr (x) Возвращает число, равное квадрату числа х
Sin (x) Возвращает синус числа х, где х – угол в радианах
Cos (x) Возвращает косинус числа х, где х – угол в радианах
Arctan (x) Возвращает арктангенс числа х, где х – угол в радианах
Exp (x) Возвращает число, равное е в степени х
Ln (x) Возвращает число, равное натуральному логарифму от числа х
Pi Число Пи
Random (x) Возвращает случайное число от 0 до х-1. При использовании функции без параметров генерируются случайные числа от 0 до 1.
Trunc (x) Возвращает число, равное целой части х (при округлении отбрасывается дробная часть). Усеченное число имеет тип LongInt.
Frac (x) Возвращает число, равное дробной части числа х. Например, Frac(2.4) возвращает 0.4, Frac (3.99) возвращает 0.99.
Int (x) Возвращает число, равное целой части числа х. Например, Int (2.4) возвращает 2.0, Int (0.99) возвращает 0.0.
Round (x) Возвращает число, равное целой части числа х (округление происходит по правилам математики, т.е. к ближайшему целому). Процедура является универсальной, так как результат может быть как целым, так и вещественным числом.
Ord (x) Определяет четность числа. Возвращает значение True, если число х нечетно.

Линейная алгоритмическая структура.

Последнее изменение этой страницы: 2020-01-25; Нарушение авторского права страницы

Функции Delphi

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

Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.

Между значением и именем функции существует зависимость. Поэтому всякая функция может быть представлена как операнд некоторого выражения (к примеру, в инструкции присваивания). Для возведения числа в n-ую степень достаточно записать

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

Должно существовать соответствие между типом переменной (ей присваивается определенное значение функции) и типом функции. И в то же время необходимо соответствие между типом фактического параметра данной функции (фактический параметр — это параметр, который указывается при обращении к функции) и типом формального параметра. В противном случае компилятором выводится сообщение об ошибке.

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

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

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.

Математические функции в Delphi

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

Для работы с этими функциями, в разделе описания uses нужно указать математическую библиотеку Math:

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

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL