Паскаль основные функции. Стандартные арифметические функции в паскале. Примеры составления линейной программы
Арифметические функции
Арифметические функции можно использовать только с величинами целого и вещественного типа.
Функция |
Назначение |
Тип результата |
abs (x) |
абсолютное значение аргумента |
совпадает с типом аргумента |
sqr (x) |
квадрат аргумента |
совпадает с типом аргумента |
sqrt (x) |
квадратный корень аргумента |
вещественный |
cos (x) |
косинус аргумента |
вещественный |
sin (x) |
синус аргумента |
вещественный |
arctan (x) |
арктангенс аргумента |
вещественный |
exp (x) |
вещественный |
|
натуральный логарифм |
вещественный |
|
int (x) |
целая часть числа |
вещественный |
frac (x) |
дробная часть числа |
вещественный |
Функции преобразования типов
Эти функции предназначены для преобразования типов величин, например, символа в целое число, вещественного числа в целое и т.д.
Функции для величин порядкового типа
8 Оператор присваивания
Данный оператор предписывает запомнить некоторое значение в переменой. Значение и идентификатор переменой разделены парой знаков := . Типы объектов с обеих сторон знака := должны строго совпадать, за исключением того случая, когда тип переменой - REAL, а тип выражения - INTEGER. Общий вид оператора: < переменная >:= < выражение >
Операторы ввода/вывода
Немногие программы обходятся без ввода данных и совсем нет таких, которые не выводят полученные результаты.
Ввод данных с клавиатуры выполняется операторами: READ и READLN. Формат: Read (список переменных);
Readln (список переменных);
Буквы ln добавляются в конце оператора для того, чтобы курсор автоматически переходил на следующую строку при выводе на экран текстов или результатов выполнения программы. Например:
Readln (x, y, z); Read (beta, gamma);
При выполнении оператора READ(READLN) программа останавливается и ждет, пока нужное количество чисел не будет введено с клавиатуры
Вывод данных на экран дисплея выполняется операторами: WRITE и WRITELN. Формат:
Write (список выражений); Writeln (список выражений);
Выражение в списке разделяются запятыми. Значения выражений сначала вычисляются, а затем выводятся на экран. При выводе вещественных значений можно указать, сколько десятичных цифр следует сохранить в дробной части числа, причем количество цифр указывается вслед за шириной поля после двоеточия.
Для того чтобы прокомментировать выводимые значения, в список вывода можно помещать строки любых символов, заключенные в апострофы.
9. Условный оператор if . Общий вид if <условие> then<действие 1>; else <действие 2>;
Оператор if может быть использован и без второй части
Если необходимо выполнить несколько условий, то тогда используем такие виды записи (условие 1) and (условие 2)- в этом случае должно выполнятся и 1 и 2
(условие 1) or (условие 2) – в этом случае выполняется выбор.Скобки обязательны!
ПРИМЕР: Напишем простую программу, обрабатывающую символьные величины.
VAR c: Char; n: Byte;
CONST Blank =" "; Space:Char =Blank;
BEGIN WRITE("введите какой-нибудь символ "); READ(c);
WRITELN("вы ввели символ",Space,c,Space,"его номер=",Ord(c));
WRITELN("соседние с ним символы:",Space,Pred(c),Space,
"и",Space,Succ(c));
WRITELN("UpCase(",c,")=",UpCase(c)); WRITELN;
Space:="""; WRITE("теперь введите число от 33 до 255 "); READ(n);
WRITELN("символ с номером ",n," - это ",Space,Chr(n),Space);
Для арифметических данных, т.е. для числовых констант, переменных и числовых функций определены шесть арифметических операций:
Сложение
Вычитание
* умножение
/ вещественное деление
DIV целая часть от деления
MOD остаток от деления
Первые четыре операции определены для любых операндов - как целых, так и вещественных, причем результат операции "/" всегда вещественное число, даже если оба операнда целые. Операции DIV и MOD определены только для целых операндов. Кроме того, выделяют унарную операцию "-", которая применяется не к двум, а к одному операнду, например: -x.
Вообще говоря, язык Паскаль запрещает использовать в одном выражении разнотипные операнды, однако для арифметических данных сделано исключение. Перед выполнением арифметической операции один или оба операнда автоматически приводятся к одному типу, а затем уже подставляются в выражение. Значение любого выражения всегда имеет определенный тип - такой же, как у операндов после приведения их к одному типу. Правила преобразования целочисленных типов приведены в таблице 2.
Таблица 2
Правила преобразования типов
Операнды | Byte | ShortInt | Word | Integer | LongInt |
Byte | Integer | Integer | Word | Integer | LongInt |
ShortInt | Integer | Integer | LongInt | Integer | LongInt |
Word | Word | LongInt | Word | LongInt | LongInt |
Integer | Integer | Integer | LongInt | Integer | LongInt |
LongInt | LongInt | LongInt | LongInt | LongInt | LongInt |
Если один операнд выражения имеет целочисленный тип, а второй - вещественный, то первый автоматически приводится к вещественному типу и значение выражения будет вещественным. Целые значения можно присваивать вещественной переменной, но вещественные значения присвоить целой переменной нельзя! Присваивая значение целочисленной переменной и константе, вы должны следить, чтобы это значение не выходило за пределы диапазона допустимых значений переменной. В языке Паскаль есть возможность явно преобразовать целочисленное значение к любому из целочисленных типов, для этого используются стандартные функции с именами Byte, ShortInt, Word, Integer и LongInt. Например, преобразуем переменную типа Word к типу Integer:
WRITELN(x," ",Integer(x));
WRITELN(x," ",Integer(x));
Программа выведет:
В первом случае преобразование происходит корректно, а во втором - с изменением значения.
Арифметическое выражение может содержать любое количество операндов и, соответственно, любое количество операций, которые выполняются в последовательности, определенной их приоритетом; приоритет операций *, /, DIV, MOD выше, чем операций + и -. Операции одного приоритета выполняются слева направо. Чтобы изменить порядок выполнения операций, вы можете использовать в выражении круглые скобки. Вычислим, например, частное от деления X на сумму A,B и C:
Набор встроенных математических функций в языке Паскаль невелик, он включает:
1. Abs(x) - абсолютная величина числа.
2. Int(x) - целая часть вещественного числа.
3. Frac(x) - дробная часть вещественного числа.
4. Trunc(x) - целая часть вещественного числа, преобразованная к типу LongInt.
5. Round(x) - округленное до целого вещественное число, преобразованное к типу LongInt.
6. Sqr(x) - квадрат числа.
7. Sqrt(x) - квадратный корень.
8. Exp(x) - экспонента.
9. Ln(x) - натуральный логарифм.
10. Pi - число пи.
11. Sin(x) - синус.
12. Cos(x) - косинус.
13. Arctan(x) - арктангенс.
Все остальные математические функции можно получить, пользуясь этим основным набором; например: десятичный логарифм - Ln(x)/Ln(10), тангенс - Sin(x)/Cos(x) и т.д. Аргументы функций могут быть любыми арифметическими выражениями и задаются в круглых скобках после имени функции, аргументы функций Sin и Cos выражаются в радианах. Вычислим квадрат синуса 70 градусов: Sqr(Sin(Pi/180*70))
Кроме перечисленных выше математических функций Паскаль предоставляет еще несколько полезных числовых функций и процедур разного назначения:
14. High (целый тип) - возвращает наибольшее возможное значение данного типа.
15. Low (целый тип) - возвращает наименьшее возможное значение данного типа.
16. SizeOf (тип)
SizeOf (переменная) - возвращает размер в байтах заданного типа или заданной переменной. Функция SizeOf применима к любому типу, в том числе и к структурированным типам - массивам, записям и некоторым другим, речь о которых пойдет ниже.
17. Random(Range:Word) - возвращает целое случайное число в диапазоне от 0 до Range-1.
18. Random - возвращает вещественное случайное число в из отрезка .
19. Randomize - процедура, инициализирующая генератор случайных чисел, используя текущее системное время
Выведем несколько случайных чисел в диапазоне от 0 до 99:
WRITELN(Random(100));
WRITELN(Random(100));
WRITELN(Random(100));
При первом запуске программы она вывела числа 13, 38, 48, при втором запуске - 63, 99, 6, при третьем запуске - 23, 87, 92. Это действие процедуры Randomize - поскольку при каждом запуске системное время, которое отсчитывает операционная система DOS, было различным, мы каждый раз получали различные последовательности случайных чисел. Теперь исключим из программы оператор Randomize; и запустим ее несколько раз - каждый раз мы будем получать тройку чисел 0, 3, 86.
Обратите внимание, что процедура используется в операторе вызова, а функция используется в выражении. Запись Random(100); неверна, поскольку Random - это функция, но также неверна и запись WRITELN(Randomize);. Можно считать, что различие между процедурой и функцией состоит в том, что процедура выполняет некоторую последовательность действий, а функция вычисляет некоторое значение. Заметим, что READ и WRITE - это тоже процедуры.
Для работы с внутренним двоичным представлением двухбайтовых целых чисел (типа Word или Integer) существуют функции:
20. Lo(x) - возвращает младший байт аргумента.
21. Hi(x) - возвращает старший байт аргумента.
22. Swap(x) - меняет местами младший и старший байты.
Сделаем отступление о двоичной системе счисления. Все данные в памяти компьютера хранятся закодированными в двоичной системе. Любая переменная занимает целое число байтов, а каждый байт есть последовательность из 8 двоичных цифр - битов. Например, значение переменной типа Byte, равное 11, хранится как последовательность битов 0000 1011, а если переменная имеет тип Word, то ее значение кодируется как 0000 0000 0000 1101. 1024 байта (или 2 в 10-й степени) имеют свое название - 1К байт, иногда эту величину также называют килобайт; 1024 К байт называют мегабайт. Пусть переменная t типа Word имеет значение 40000, или 1001 1100 0100 0000 в двоичной системе, тогда функция Lo(t) возвратит 64 (= 0100 0000), функция Hi(t) возвратит 156 (= 1001 1100) и функция Swap(t) возвратит 16540 (= 0100 0000 1001 1100).
Для целочисленных переменных определены процедуры:
Здесь x - имя переменной, d - любое целочисленное выражение. Процедура Inc увеличивает значение переменной на d, а процедура Dec - уменьшает на d; второй аргумент этих процедур можно не задавать, тогда он будет принят равным 1. Например, вместо операторов a:=a+3; b:=b-1; c:=c+a+b; мы могли бы написать Inc(a,3); Dec(b); Inc(c,a+b); , и такой способ записи был бы предпочтительней.
С.А. Григорьев
6. Символьный тип данных
Для хранения символьной информации в Паскале предусмотрен специальный тип данных Char. Допустимы переменные, нетипизированные и типизированные константы такого типа. Данные типа Char занимают 1 байт памяти. Неименованные символьные константы записываются в программе либо в виде "символ", либо в виде #номер. Все имеющиеся символы пронумерованы от 0 до 255, символы с 0-го по 31-й - невидимые, как правило, они не отображаются на экране, 32-й символ - это пробел. Приведем также номера некоторых других символов (хотя помнить эти номера нет никакой необходимости):
"0"..."9" - 48...57,
"A"..."Z" - 65...90,
"a"..."z" - 97...122,
"А"..."Я" - 128...159,
"а"..."п" - 160...175,
"р"..."я" - 224...239.
Некоторые из невидимых символов могут оказаться вам полезны: символ #7 - "звуковой сигнал", при выводе пищит; символ #10 - "конец строки", при выводе он перемещает текущую позицию вывода на одну строку вниз; символ #13 - "возврат каретки" - перемещает текущую позицию вывода в начало текущей строки. Запомните, что клавиша Enter генерирует два символа - #10 и #13, это может вам впоследствии пригодиться.
Символьные данные можно вводить и выводить процедурами READ и WRITE при вводе и выводе символьные значения изображаются без апострофов. Для символьных величин определены функции:
25. Ord(c) - возвращает номер символа.
26. Pred(c) - возвращает символ с номером, меньшим на 1.
27. Succ(c) - возвращает символ с номером, большим на 1.
Эти функция, однако, определены не только для символов, но для любого порядкового типа данных. Порядковым типом называется такой тип, все допустимые значения которого можно пронумеровать от 0 до некоторого N (в математике к этому понятию близко понятие счетного множества). Из известных нам типов порядковыми являются все целочисленные типы: Byte, ShortInt, Word, Integer, LongInt - и не являются порядковыми все вещественные типы. Значение функции Ord от числового аргумента равно самому этому аргументу, Pred(x) дает значение x-1, а Succ(x) - значение x+1. Функция
в некотором смысле обратна функции Ord: для заданного числового аргумента n она возвращает символ с соответствующим номером. Для символьных переменных (так же, как и для любых переменных порядкового типа) определены процедуры Inc и Dec. Еще одна специфически символьная функция:
Она преобразует значение аргумента, если это маленькая латинская буква, в соответствующую заглавную букву. К сожалению, функция не работает для русских букв.
Наряду с другими языками программирования в языке Паскаль присутствуют средства, которые позволяют оформить подпрограмму (своеобразный вспомогательный алгоритм) к основной программе — процедуры и функции Паскаль. Они в основном применяются, когда какое-либо действие или подалгоритм повторяется множество раз в программе, либо когда есть необходимость использовать части ранее составленных алгоритмов.
Подпрограммы - это своего рода разбиения больших программ на отдельные части. Это удобно и эффективно разбивать большие программы на несколько подпрограмм, что упрощает разработку кода основной программы. Чтобы использовать подалгоритм как подпрограмму, нужно присвоить ему имя и описать алгоритм в соответствии с правилами языка Паскаль.
Далее, если появилась необходимость вызвать подалгоритм в основной программе, то упоминают в необходимом месте имя того или иного подалгоритма в сочетании со списком данных (как входных, так и выходных). Это упоминание, как правило, производит выполнение операторов, входящих в подпрограмму и работающих с указанными данными. После выполнения используемой подпрограммы работа основной программы продолжается, но уже начиная с команды, следующей сразу после вызова подпрограммы.
В Паскале можно выделить два типа подпрограмм:
- Функции
- Процедуры
Их структура описания достаточно схожа со структурой программы на Паскале, т.е. в состав процедур и функций также входят и заголовок, и раздел описаний (описание констант, меток, типов, самих функций и процедур, переменных и т.д.), и исполняемая часть (описание процедур): Структура функции в языке программирования Паскаль выглядит следующим образом:
Структура процедуры в Паскале представлена так:
Как и в формате описания функций, так и в формате описания процедур формальные параметры в заголовке функций и процедур представляются следующим образом:
var имя параметра: имя типа;
Формальные параметры разделяются запятыми; ключевое слово var в некоторых случаях может быть опущено. Когда параметры имеют одинаковый тип, то имена этих параметров перечисляют чрез запятую, указывая в конце после знака «:» имя соответствующего типа.
Когда описывают параметры, то можно пользоваться только стандартными именами типов, которые определены при помощи команды type. Процедуры вызываются с помощью оператора, имеющего следующую структуру:
имя процедуры(список фактических параметров);
В круглых скобочках указан список фактических параметров (их перечисление через «,»). Когда осуществляется вызов процедуры, то фактические параметры выступают в качестве формальных параметров, которые находятся на том же месте в заголовке процедуры. В результате передаются входные параметры, а затем происходит выполнение операторов исполняемой части, а после этого осуществляется возврат в вызывающий блок.
Функция в Паскале вызывается аналогично, однако есть возможность вызвать функцию внутри какого-нибудь выражения, т.е. имя функции может находиться в разделе условий оператора if, справа от оператора присваивания и т.д. Чтобы передать в вызывающий блок выходное значение функции в исполняемой части, перед возвратом в вызывающий блок нужно прописать команду:
имя функции:=результат;
Когда появилась необходимость вызвать процедуру и функцию, то следует руководствоваться следующими правилами
- количество формальных параметров = количество фактических параметров;
- фактические и формальные параметры должны обладать одним и тем же порядком следования и типом.
Заметка . Имена фактических и формальных параметров могут быть одинаковыми - это не вызывает никаких проблем, поскольку соответствующие им параметры в любом случае окажутся разными по той причине, что хранятся в различных областях памяти.
Окончание табл. 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
Встроенные функции вещественного типа
При этом операции +, -, *, / в арифметическом выражении дают вещественный результат, если хотя бы один из операндов вещественный.