Основные стандартные функции языка паскаль. Математические функции и процедуры в языке программирования паскаль Стандартные математические функции и процедуры паскаля

31.01.2019 Learnpascal

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

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

Процедуры — мини-программы.

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

Например, программист хочет в своем суперкоде между блоками выходящих значений прописывать 20 амперсандов. Чтобы облегчить себе задачу, он напишет простую подпрограмму.

Program superpuper; var очень много буковок; procedure ampersand; begin write("&&&&&&&&&&&&&&&&&&&&"); end; begin суперсложный код; ampersand; суперсложный код; ampersand; суперсложный код; ampersand; суперсложный код; ampersand; end.

Функции в Паскале — мега переменные.

Функции отличается от процедуры тем, что после выполнения функции на ее месте в коде ставится одно число, буква, строка и т.д. Набор встроенных функций в языке Паскаль достаточно широк. Например, для того, чтобы подсчитать квадрат числа можно воспользоваться стандартной функцией sqr(x). Как вы, наверное, уже поняли sqr(x) требует лишь один фактический параметр — число.

Пример: a:=sqr(4).

Обратите внимание! Функции необходимо присваивать! Просто написав их в тексте программы, как процедуры, вы ничего не добьетесь!

Структура функции представлена на картинке ниже.

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

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

Имя Тип аргумента Результат вычисления Пример
Abs(x) Целый или Вещ. Модуль х Abs(-6) = 6
Sqrt(x) Вещественный Корень из х Sqrt(25)=5
Sqr(x) Целый и Вещ. Квадрат х Sqr(5)=25
Power(x, a) Вещественный Значение х а Power(5,3)=125
Frac(x) Вещественный Дробная часть х Frac(5.67)=0.67
Sin(x) Вещественный Синус х Sin(45)=0.8509
Cos(x) Вещественный Косинус х Cos(45)=0.5253
Arctan(x) Вещественный Арктангенс х Arctan(5)=1.3734
Int(x) Вещественный Целая часть х Int(5.67)=5.0
Random(x) Целый Случайное число (0..х-1) Random(5)=4
Succ(x) Порядковый Следующий Succ(10)=11
Pred(x) Порядковый Предыдущий Pred(‘Z’)=’Y’

Математические процедуры

Inc(x, a) Целый X:=X+A Inc(5)=6
Dec(x, a) Целый X:=X-A Dec(25,20)=5

Преобразование типов

Trunc(x) Вещественный Целая часть х Trunc(5.67)=5
Round(x) Вещественный Округление х до целого Round(5.67)=6
Важно! Если х = 5.5, то результат – 6, а если х = 6.5, то результат тоже 6!?

Операции div и mod.

Иногда нам требуется найти частное либо же остаток от деления. В такие моменты на помощь нам приходят такие операции, как div и mod. Заметим, что эти операции выполняются только над целыми числами.

Div

Для того, чтобы найти частное от деления, мы используем операцию div.

  • 25 div 20 = 1;
  • 20 div 25 = 0;
  • 39 div 5 = 7;
  • 158 div 3 = 52.

Mod

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

  • 25 mod 20 = 5;
  • 20 mod 25 = 0;
  • 39 mod 5 = 4;
  • 158 mod 3 = 2.

Чтобы окончательно понять, с чем мы имеем дело, решим следующую задачу:

Задача 1. Найти сумму цифр двухзначного числа.

Так как эта задача очень простая, мы с вами обойдемся блок-схемой и программой.

Блок-схема program Sumoftwo; var Number, Num1, Num2, Sum: integer; begin write("Введите двухзначное число: "); read(Number); { Возьмем число 25 } Num1:= Number div 10; { 25 div 10 = 2 } Num2:= Number mod 10; { 25 mod 10 = 5 } Sum:= Num1 + Num2; { 2 + 5 = 7 } write("Сумма двух чисел -- ", Sum); end.

Задача 2. Найти сумму цифр трехзначного числа.

Чуть усложненная версия предыдущей задачи. Самая большая сложность — вторая цифра.


Приоритет div и mod больше, чем приоритете + и -. Поэтому в данной программе можно обойтись без скобок. program Sumoftree; var Number, Sum: integer; begin write("Введите трехзначное число: "); read(Number); { Возьмем число 255 } Sum:= Number div 100 + Number mod 10 + Number div 10 mod 10; { 255 div 100 + 255 mod 10 + 255 div 10 mod 10 = 12 } write("Сумма трёх чисел -- ", Sum); end.

Вот и всё. На следующем уроке мы с вами начнём изучать особенности PascalABC.Net.


Окончание табл. 2

TRUNC(X) ROUND(X) Выделение целой час­ти числа Округление Х до бли­жайшего целого вещественный целый
PRED(X) SUCC(X) Нахождение предшествующего значения (в его типе) Нахождение последующего элемента (значе­ния, следующего за Х в его порядковом типе) целый, логический или символьный
ORD(X) Определение порядко­вого номера символа Х в наборе символов или его перечислимом типе символьный целый
CHR(X) Определение значения символа по его порядковому номеру целый символьный
ODD(X) Логическая функция проверки нечетности целый логический
Frac(X) Int(X) Дробная часть числа Целая часть числа вещественный вещественный

Целые типы в Pascal ABC

В Pascal ABC имеется три стандартных типа целых чисел: Byte, Integer и Word. Диапазон их возможных значений зависит от внутреннего представления числа, которое может занимать один, два или четыре байта. В таблице 3 приведены характеристики этих целых типов.

Таблица 3

Классификация целых типов

Компилятор языка Pascal ABC определяет максимальное значение MAXINT для данных типа INTEGER. При этом справедливо будет соотношение:

MAXINT <= K <= MAXINT

Описание переменных целых типов производится в разделе описаний VAR:

Var <имя переменной> : <целый тип>;

где <целый тип > может быть определен как Byte, Integer или Word.

Например:

VAR K: INTEGER;

I, J: BYTE;

Для целых типов определены следующие операции: сложение, вычита­ние (имеют более низкий приоритет), умножение и деление - DIV, MOD. К целым типам применимы функции из таблицы 4. Функции TRUNC(X) и ROUND(X) с вещественным аргументом также дают целый результат (см. табл. 2). Стандартные математические функции в случае задания целого аргумента всегда возвращают вещественные значения (см. табл. 2).

При использовании процедур и функций с целочисленными параметрами следует руководствоваться правилом «вложенности» типов, т.е. везде, где в качестве аргумента используется тип WORD, можно применять тип BYTE. Для арифмети­ческих операций, если операнды относятся к разным целым типам, тип результата имеет максимальную мощность диапазона, т.е. для типов операндов Byte и Word в выражении тип результата будет Word.

Таблица 4

Встроенные процедуры и функции для целых типов

Вещественные типы

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

Например, запись числа в виде: <знак> <мантисса> Е <порядок> соответствует представлению числа <знак> <мантисса>*10 < порядок > .

В Pascal ABC используются только два вещественных типа – REAL и COMPLEX , характеристики которых приведены в таблице 5.

Таблица 5

Вещественные типы

Объявление переменных вещественных типов производится в разделе описаний переменных VAR аналогично переменным целых типов в виде:

Var <переменная> : <вещественный тип>;

где <вещественный тип > может быть задан только Real или Complex .

Для работы с вещественными типами определены стандартные функ­ции: sin, cos, arctаn, ln, exp, sqr, abs, sqrt (табл. 2), а также функции вещественного типа (табл. 6).

Таблица 6

Встроенные функции вещественного типа

При этом операции +, -, *, / в арифметическом выражении дают вещественный результат, если хотя бы один из операндов вещественный.

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

Функция Назначение
ABS(x) Вычисление абсолютного значения x: |х|
SQR(x) Вычисление квадрата x: x*x
SIN(x) Вычисление синуса x: sin x
COS(x) Вычисление косинуса x: cos x
ARCTAN(x) Вычисление арктангенса x: arctg x
EXP(x) Вычисление экспоненты (числа Е) в степени x
EXP10(x) Вычисление 10 в степени x
LN(x) Вычисление натурального логарифма x
LOG(x) Вычисление десятичного логарифма x
SQRT(x) Вычисление квадратного корня из x
A DIV B Вычисление частного при делении А на В с отбрасыванием остатка
A MOD B Нахождение остатка от делении А на В
TRUNC(x) Нахождение целой части x
RANDOM(x) Псевдослучайное число в интервале
ROUND(x) Округление значения x в сторону ближайшего целого
ODD(x) Проверяет аргумент на нечетность. Результат TRUE, если аргумент нечетный, FALSE – если четный.
ORD(x) Возвращает порядковый номер аргумента и, как следствие, преобразует величину порядкового типа в величину целого типа.
CHR(x) Определение символа языка Паскаль по его порядковому номеру
SUCC(x) Нахождение элемента, идущего после данного в перечне допустимых элементов
PRED(x) Нахождение элемента, идущего перед данным в перечне допустимых элементов
FRAC(X) Возвращает дробную часть x
INT(X) Возвращает целую часть x
Pi Значение математической постоянной π
EOF(x) Возвращает TRUE, если файл находится в стоянии “конец файла”, иначе FALSE, если нет конца файла

Выражения

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

1) 12+3*3=21 (12+3)*3=45

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

2) (a >1) and (a <=20)

Такое логическое выражение возвращает истину, лишь в том случае, когда истинны оба выражения, т. е. если a входит в диапазон от 1 до 20 включительно. Стоит обратить внимание на скобки, здесь они необходимы для изменения приоритета, так как у операторов сравнения он низший.

3) (a+3>0) and (a+3<15) or (b>1) and (b<10)

Условие вернет истину, тогда когда истинными будут два условия слева или справа от OR , а также если они оба будут истинными.

Логическая операция OR (или) суть дизъюнкция в логики и поэтому имеет следующую таблицу истинности:

X Y X or Y
0 0 0
0 1 1
1 0 1
1 1 1

Ложь имеет место только когда X и Y ложны (нули). В том случае, чтобы истина возвращалась только тогда, когда одно из условий верно следует применить оператор XOR (исключающее или).

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

Подпрограммы - это своего рода разбиения больших программ на отдельные части. Это удобно и эффективно разбивать большие программы на несколько подпрограмм, что упрощает разработку кода основной программы. Чтобы использовать подалгоритм как подпрограмму, нужно присвоить ему имя и описать алгоритм в соответствии с правилами языка Паскаль.

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

В Паскале можно выделить два типа подпрограмм:

  • Функции
  • Процедуры

Их структура описания достаточно схожа со структурой программы на Паскале, т.е. в состав процедур и функций также входят и заголовок, и раздел описаний (описание констант, меток, типов, самих функций и процедур, переменных и т.д.), и исполняемая часть (описание процедур): Структура функции в языке программирования Паскаль выглядит следующим образом:

Структура процедуры в Паскале представлена так:

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

var имя параметра: имя типа;

Формальные параметры разделяются запятыми; ключевое слово var в некоторых случаях может быть опущено. Когда параметры имеют одинаковый тип, то имена этих параметров перечисляют чрез запятую, указывая в конце после знака «:» имя соответствующего типа.

Когда описывают параметры, то можно пользоваться только стандартными именами типов, которые определены при помощи команды type. Процедуры вызываются с помощью оператора, имеющего следующую структуру:

имя процедуры(список фактических параметров);

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

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

имя функции:=результат;

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

  1. количество формальных параметров = количество фактических параметров;
  2. фактические и формальные параметры должны обладать одним и тем же порядком следования и типом.

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

Для выполнения часто встречающихся операций и преобразований данных, относящихся к разным типам, существуют заранее определенные функции, которые называются СТАНДАРТНЫМИ. Для обращения к функции необходимо задать ее имя и в скобках список аргументов (параметров).

Прежде чем перейдем к стандартным функциям, сначала ознакомимся с правилами их использования:

  • 1. Имя функции записывается прописными буквами латинского алфавита.
  • 2. Аргумент функции записывается в круглых скобках после имени функции.
  • 3. Аргументом функции может быть константа, переменная, или арифметическое выражение того же типа

Теперь рассмотрим некоторые стандартные функции:

Функция Действие Тип Х Тип возвращаемого значения

SQRT(X) вычисляет квадратный корень из аргумента Х действительный действительный

SQR(X) вычисляет квадрат аргумента Х целый действи-тельный целый действи-тельный

RANDOM(X) возвращает случайное число, перед вызовом функции желательно использовать в программе оператор RANDOMIZE включающей случайную инициализацию генератора случайных чисел целый, положительный соответствует типу переменной принимающей значение

SIN(X) вычисляет синус аргумента Х действительный действительный

COS(X) вычисляет косинус аргумента Х действительный действительный

ABS(X) вычисляет абсолютное значение (модуль) аргумента Х целый действи-тельный целый действи-тельный

ODD(X) проверяет Х на четность длинное целое логический

ORD(X) определяет порядковый номер символа Х любой тип кроме действительного длинное целое

CHR(X) определяет символ стоящий по порядковому номеру Х byte символьный

PRED(X) определяет предыдущее значение по отношению к Х любой тип кроме действительного тот же тип

SUCC(X) определяет последующее значение по отношению к Х любой тип кроме действительного тот же тип

ARCTAN(X) вычисляет арктангенс аргумента Х действительный действительный

EXP(X) вычисляет экспоненту от аргумента Х действительный действительный

LN(X) вычисляет натуральный логарифм от Х действительный действительный

TRUNC(X) находит целую часть от Х действительный длинное целое

ROUND(X) округляет Х в сторону ближайшего целого действительный длинное целое

INT(X) возвращает целую часть аргумента Х действительный действительный

FRAC(X) возвращает дробную часть аргумента Х действительный действительный

DEC(X,N) уменьшает значение переменной Х на заданное число N любой тип кроме действительного тот же тип

INC(X,N) увеличивает значение переменной Х на заданное число N любой тип кроме действительного тот же тип

PI возвращает значение числа - действительный

  • 1. ORD(‘R’)=82; ORD(5)=5;
  • 2. CHR(68)=’D’; можно вызывать эту функцию через #, если аргумент функции константа (#68="D");
  • 3. PRED(‘N’)=’M’; PRED(87)=86;
  • 4. SUCC(‘S’)=’T’; SUCC(87)=88;
  • 5. PI=3.141592653897932385;
  • 6. ROUND(3.1415)=3;
  • 7. LN(1)=0.000;
  • 8. SQRT(36)=6.000;
  • 9. SIN(90*pi/180)=1.000.

Замечание:

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