Для чего предназначена функция abs x в паскале
Перейти к содержимому

Для чего предназначена функция abs x в паскале

  • автор:

Функция Abs Pascal-Паскаль

Abs: функция — Возвращает абсолютную величину параметра.

Объявление: Function Abs(X) : (тип параметра);
Режим: Windows, Real, Protected

Замечания:

Параметр X — выражение вещественного или целочисленного типа. Результат того же типа, что и X является абсолютной величиной X.

Пример программы для функции Abs

Var R : Real;
I : Integer;
Begin
R:=Abs(-2.3); < 2.3 >
I:=Abs(-157); < 157 >
End.

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Счетчики

2008—2024 © pascal.helpov.net | All Rights Reserved

Abs, Sqr в Pascal.

Abs — функция языка Паскаль, которая вычисляет модуль числа.
Sqr — функция языка Паcкаль, которая возводит число в квадрат.

program number8; uses crt; var A, B, C:integer; begin clrscr; A:= -2; B:=Abs (A); writeln('Abs(-2)=',B); C:=Sqr(B); writeln('Sqr(2)=',C); readln end.

Строка №7. Функция Abs вычисляет модуль числа, стоящего в скобках после функции. В данном случае вычисляется модуль переменной «A», которая имеет значение «-2». Так как модуль «|-2|» равен «2», то «2» и будет результатом операции Abs.

Строка №9. Функция Sqr возводит число, стоящее в скобках в квадрат. В данном случае в квадрат возводится переменная «B», т.е. число «2». Таким образом, результатом операции будет число «4».

abs sqr

abs sqr.

Дополнение к материалу.

В примерах №6, 7, 8 мы использовали небольшие числа (-2, 3, 17 и т.д.). Для всех переменных, в которые эти числа записывались, мы указывали тип данных INTEGER. Следует сказать, что данный тип данных используется не для всех чисел, а только для целых, лежащих в диапазоне от – 32768 до 32767. И если мы будем использовать в наше программе числа, которые лежат вне этих пределов (например – 32987 или 36789), то мы должны использовать другой тип данных.
Диапазон значений для различных типов данных можно посмотреть в таблице.

Тип данных Запись Длина в байтах
integer -32 768….32 767 2
byte 0…255 1
word 0…65 535 2
shortint -128….127 1
longint -2 147 483 648….2 147 483 647 4

Использование различных типов данных обусловлено тем, что для каждого из них выделяется определенное количество ячеек в памяти компьютера. Если мы используем в программе числа от 0 до 255, то наиболее целесообразно будет использовать тип данных BYTE. Хотя можно использовать и любой другой тип данных. Например, для числа 10 можно использовать и BYTE и LONGINT, но тогда в первом случае будет расходоваться 1 байт в памяти компьютера, а во втором — целых 4 байта. Учитывая то, что программа должна расходовать как можно меньше памяти, рационально будет использовать для данного примера тип данных BYTE.

Функция Abs в Паскале

Основы программирования 2.0

Функция Abs в Паскале возвращает абсолютное значение переменной. Результат, возвращаемый функцией Abs, имеет тот же тип данных, что и аргумент — параметр, передаваемый в функцию. Этот параметр может иметь любой числовой тип данных.

Синтаксис функции Abs для целых чисел:

function Abs(L : LongInt) : LongInt;

function Abs(I : Int64) : Int64;

Последний вариант возможен только для FreePascal и Lazarus, так как в классическом Паскале нет типа данных Int64.

Синтаксис функции Abs для вещественных чисел:

function Abs(D : ValReal) : ValReal;

ValReal — это вещественный тип данных с наибольшим доступным значением в данной операционной системе. Фактически это псевдоним (алиас) одного из типов Extended или Double.

А теперь пример использования:

program absfunc; var x : integer = -100; y : integer; begin y := Abs(x); //у = 100 WriteLn('Abs(-100) = ', y); //Выведет 100 ReadLn; end.

Здесь мы сначала объявляем переменную с начальным значением равным -100 (отрицательное число).

А в программе используем функцию Abs и в результате переменная у будет равна 100 (положительное число).

Что вычисляет функция Abs

Вообще Abs — это сокращение от Absolute. Как нетрудно догадаться, переводится это слово как “абсолютный, чистый, несомненный”.

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

В математике модуль числа х обозначается так: |x|.

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

Таким образом, можно сказать, что функция Abs(х) вычисляет модуль числа х. То есть Abs(х) в Паскале — это то же самое, что |x| в математике.

Ну и напоследок давайте создадим свой собственный аналог функции, которая возвращает модуль числа. Итак, функция будет примерно такая:

function MyAbs(iNum : integer) : integer; begin if iNum < 0 then MyAbs := -1 * iNum else MyAbs := iNum; end;

Здесь мы передаём в функцию целое число, которое может быть как отрицательным, так и положительным. В функции мы проверяем значение этого числа. Если число отрицательное, то мы умножаем его на -1, и таким образом получаем положительное число. Если число положительное, то мы ничего не делаем - просто возвращаем полученное через параметр iNum число.

Как видите, алгоритм довольно простой.

Правда, наша функция может работать только с целыми числами. Но это уже мелочи.

Стандартные функции языка Pascal

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

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

Ниже описаны стандартные (включенные в язык) функции языка программирования Паскаль.

Арифметические и тригонометрические функции

Арифметические функции можно использовать только с величинами целого и вещественного типа.

Функция Назначение Тип результата
abs(x) абсолютное значение аргумента совпадает с типом аргумента
sqr(x) квадрат аргумента совпадает с типом аргумента
sqrt(x) квадратный корень аргумента вещественный
cos(x) косинус аргумента вещественный
sin(x) синус аргумента вещественный
arctan(x) арктангенс аргумента вещественный
exp(x) e x вещественный
ln(x) натуральный логарифм вещественный
int(x) целая часть числа вещественный
frac(x) дробная часть числа вещественный

Следующие две функции можно применять к целым параметрам, и в этом случае они возвращают целый результат. Этим функциям можно также передавать вещественный параметр, получая вещественный результат.

abs(выражение) – абсолютное (то есть положительное) значение параметра.
abs(-2), abs(0), abs(2). Результат: 2, 0, 2
abs(-2.0), abs(0.0), abs(2.0). Результат: 2.0, 0.0, 2.0

sqr(выражение) – квадрат параметра.
sqr(-2), sqr(0), sqr(2). Результат: 4, 0, 4
sqr(-2.0), sqr(0.0), sqr(2.0). Результат: 4.0, 0.0, 4.0

Функция sqr возводит значение аргумента (записанного внутри скобок) в квадрат. В Паскале нет оператора возведения в произвольную степень. Возведение в степень здесь осуществляется с использованием логарифмов. Вместо математического выражения a x на Pascal можно написать exp(ln(a) * x).

Остальные арифметические функции принимают целый или вещественный параметр; результат в любом случае будет вещественным:

sqrt(выражение) – квадратный корень.
sqrt(16), sqrt(0.64), sqrt(0). Результат: 4.0, 0.8, 0.0
sqrt(-16). Результат: ошибка

ln(выражение) – натуральный логарифм.
ln(1), ln(2.7182):4:1, ln(7.5):4:1. Результат: 0.0, 1.0, 2.0
ln(0), ln(-1). Результат: ошибка

exp(выражение) – экспонента.
exp(0):4:1, exp(1):8:5, exp(2.014903):4:1. Результат: 1.0, 2.71828, 7.5
exp(-1):7:4. Результат: 0.3579
Примечание: e -1 = 1 / e

Ниже приведены тригонометрические функции, используемые в языке программирования Pascal. Их аргумент может быть целым или вещественным; результат в любом случае – вещественный.

1 радиан = 180 / пи

sin(выражение) – синус угла, измеренного в радианах
sin(-pi / 6):4:1. Результат: -0.5
sin(0):4:1. Результат: 0.0
sin(pi / 2):4:1. Результат: 1.0

cos(выражение) – косинус угла, измеренного в радианах
cos(-pi / 6):4:1. Результат: 0.8
cos(0):4:1. Результат: 1.0
cos(pi):4:1. Результат: -1.0

arctan(выражение) – арктангенс
arctan(1e35):8:5. Результат: 1.57080
arctan(0):4:1. Результат: 0.0
arctan(-1):8:5. Результат: 0.78540

Функции преобразования из вещественного в целый тип

Когда целое значение присваивается вещественной переменной, оно автоматически преобразуется в вещественный тип и никакие функции для этого не требуются. Такое преобразование типов называется неявным. Так, если переменную объявить как real, а затем присвоить ей целое число 5, то последнее автоматически преобразуется в 5.0.

Обратного неявного преобразования нет: будет ошибкой пытаться присваивать переменной целого типа вещественный результат.

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

trunc(вещественное_выражение) – преобразует вещественное в целый тип, отбрасывая дробную часть.
trunc(3.1), trunc(3.8). Результат: 3, 3
trunc(-3.1), trunc(-3.8). Результат: -3, -3

round(вещественное_выражение) – преобразует вещественное в целый тип, округляя до ближайшего целого.
round(3.1), round(3.8). Результат: 3, 4
round(-3.1), round(-3.8). Результат: -3, -4

Здесь возможны недоразумения. Пусть вещественная переменная x имеет значение 3.499999. Если это значение напечатать с использованием оператора write(x:8:5), то получится 3.50000, в то время как write(round(x)) даст 3, а не 4. Это затруднение можно обойти при помощи небольшой поправки, например write(round(x + 0.000001)) (в предположении, что значение переменной x заведомо положительное).

Применять функции trunc и round к параметрам целого типа нельзя. Например, будут ошибкой такие выражения, как trunc(3) или round(3).

Логические функции

Функция odd используется для проверки четности или нечетности целого выражения. Аргумент функции величина типа longint.
odd(целое_выражение) – возвращает true, если параметр – нечетный, в противном случае возвращает false.
odd(3), odd(2), odd(0). Результат: true, false, false
odd(-3), odd(-2). Результат: true, false
odd(3.0). Результат: ошибка

Следующие функции служат для определения конца строки или конца файла соответственно. Функция eoln используется только с текстовыми файлами, которые организованы как строки символов. Функцию eof не следует использовать при вводе данных с клавиатуры.
eoln(имя_файла) – возвращает true, если была прочитана последняя литера текущей строки.

while not eoln do begin read(i); writeln(i:3) end;
while not eoln do begin read(a); write(a:5:1) end;

eof(имя_файла) – возвращает true, если была прочитана последняя литера файла (попытка дальнейшего чтения ведет к ошибке).

while not eof(f) do begin while not eoln(f) do begin read(ch); write(ch) end; writeln end;
while not eof(g) do begin read(ch); write(ch) end;

Функции над дискретными типами

Функция ord

Буквы от ‘A’ до ‘Z’ следуют в возрастающем порядке, иными словами, каждая буква имеет порядковое значение, соответствующее ее месту в алфавите. Это порядковое значение может быть получено посредством функции ord.
ord(выражение) – возвращает порядковый номер литеры или значения другого дискретного типа.
ord(‘I’), ord(‘J’). Результат: 73, 74 (код ASCII)

Порядковый номер литеры зависит от используемого кода. Но, независимо от используемого кода, порядковые значения букв следуют по возрастанию:
ord(‘A’) < ord(‘B’) < ord(‘C’) … < ord(‘Z’)
хотя ord(‘Z’) – ord(‘A’) и не обязательно равно 25. То же самое и со строчными буквами:
ord(‘a’) < ord(‘b’) < ord(‘c’) … < ord(‘z’)

Определенной связи между прописными и соответствующими строчными буквами нет, но можно без опасений полагаться на то, что ord(‘a’) – ord(‘A’) имеет то же значение, что и ord(‘z’) – ord(‘Z’).

Независимо от используемого кода, порядковые значения цифр также расположены по возрастанию:
ord(‘0’) < ord(‘1’) < ord(‘2’) … < ord(‘9’)
и, более того, порядковые значения соседних цифр отличаются на 1; так, ord(‘9’) – ord(‘0’) = 9. Отсюда следует, что численное значение цифры d (типа char) может быть получено так
value := ord(d) – ord(‘0’).

Паскаль поддерживает типы char, integer и т.д. В дополнение к ним программист вправе определить и другие типы путем перечисления последовательности констант. Например, тип, заданный перечислением:
type days = (mon, tue, wed, thu, fri, sat, sun);

Константы типа, заданного перечислением, имеют порядковые значения, отсчитываемые от нуля. Например, ord(mon) возвращает 0, ord(sun) возвращает 6; mon < sun.

Тип boolean – перечисляемый тип, который автоматически задается как
type boolean = (false, true);
следовательно, ord(false) дает 0, ord(true) дает 1; false < true.

Функция chr

Обратной для ord является функция chr.
chr(выражение) – возвращает литеру, порядковое значение которой задается параметром; неправильное значение влечет ошибку.
chr(73), chr(74). Результат: I, J (кодировка ASCII)
chr(1000). Результат: ошибка

Функции succ и pred

Порядковые значения редко бывают нужны сами по себе. Часто достаточно знать следующий или предыдущий элемент в установленном порядке. Для этой цели служат функции succ и pred.
succ(выражение) – возвращает элемент, следующий за тем, который указан в качестве параметра.
succ(‘A’), succ(‘0’), succ(0). Результат: B, 1 (символ), 1 (число)
succ(false). Результат: true
pred(выражение) – возвращает элемент, предшествующий тому, который указан в качестве параметра.
pred(‘Z’), pred(‘9’), pred(9). Результат: Y, 8 (символ), 8 (число)
pred(true). Результат: false

Эти две функции можно использовать для определения следующих и предшествующих элементов для типа, заданного перечислением. Возьмем тип days , определенный ранее: pred(sun) возвращает sat, succ(mon) возвращает tue.

Однако было бы неверно писать writeln(pred(sun)), поскольку элементы перечисляемого типа нельзя читать или печатать, что, конечно, снижает выгоду от использования таких типов. Наилучшее приближение к writeln(pred(sun) – это оператор writeln(ord(pred(sun))), печатающий число 5 (порядковое значение элемента sat).

Функцию succ удобно использовать для управления циклом:

i := 0; repeat i := succ(i); …… until i = 10;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *