Инф и Инф технол / ЛЕКЦИЯ 3 Инф ЖД 2 сем
.doc
1 курс (ЭЖД) |
ЛЕКЦИЯ 3 КРАТКОЕ ОПИСАНИЕ ЯЗЫКА PASCAL ABC (ОКОНЧАНИЕ) |
2 семестр |
3.1. Типы данных
В языке Pascal ABC имеется огромный набор стандартных типов. Наиболее распространенные из них – числовые, булевский, символьный и строковый. Первые три относятся к стандартным скалярным типам, строковый – к регулярным.
Числовые типы подразделяются на целые и вещественные типы. Целые типы в языке Object Pascal представлены в следующей таблице:
Идентификатор типа |
Диапазон допустимых значений |
Занимаемая память |
Integer |
-2147483648..2147483647 |
signed 32-bit |
Cardinal |
0..4294967295 |
unsigned 32-bit |
Shortint |
-128..127 |
signed 8-bit |
Smallint |
-32768..32767 |
signed 16-bit |
Longint |
-2147483648..2147483647 |
signed 32-bit |
Int64 |
-263..263-1 |
signed 64-bit |
Byte |
0..255 |
unsigned 8-bit |
Word |
0..65535 |
unsigned 16-bit |
Longword |
0..4294967295 |
unsigned 32-bit |
Константы целого типа представляются в виде обычных целых чисел, то есть так, как они записываются в обычной арифметике, с использованием арабских цифр. Знак "+", как правило, не ставится.
Над представителями целых типов допустимы следующие арифметические операции:
Операция |
Знак операции |
Тип результата1 |
Сложение |
+ |
целый |
Вычитание |
– |
целый |
Умножение |
* |
целый |
Деление |
/ |
вещественный |
Деление нацело |
DIV |
целый |
Остаток от целочисленного деления |
MOD |
целый |
Тип результата операции "деление" всегда вещественный, даже если числитель делится на знаменатель нацело. Тип результата операций "деление нацело" и "остаток целочисленного деления" – всегда целый. Последние две операции допустимы только над целочисленными операндами.
Порядок выполнения операций такой же, как и в обычной арифметике: сначала выполняются умножение и деление, затем – сложение и вычитание. Операции DIV и MOD выполняются в последнюю очередь. Порядок выполнения может быть изменен с помощью круглых скобок. В сомнительных случаях рекомендуется также использовать скобки.
Вещественные типы отличаются от целых наличием дробной части в числе, отделенной от целой части точкой. Все они показаны в следующей таблице:
Идентификатор типа |
Диапазон допустимых значений |
Количество значащих цифр |
Занимаемая память, байт |
Real |
5.0∙10-324..1.7∙10308 |
15-16 |
8 |
Real48 |
2.9∙10-39 .. 1.7∙1038 |
11-12 |
6 |
Single |
1.5∙10-45 .. 3.4∙1038 |
7-8 |
4 |
Double |
5.0∙10-324..1.7∙10308 |
15-16 |
8 |
Extended |
3.6∙10-4951..1.1∙104932 |
19-20 |
10 |
Comp |
-263+1 .. 263 -1 |
19-20 |
8 |
Currency |
-922337203685477.5808 ..922337203685477.5807 |
19-20 |
8 |
Вещественные константы могут быть представлены в одной из двух форм – с фиксированной точкой (обычный вид), с плавающей точкой (вид, в который входит мантисса и порядок, например, 0.2718е01; в форме с фиксированной точкой эта же константа запишется как 2.718).
Над операндами вещественных типов допустимы операции сложения, вычитания, умножения и деления. Тип результата – вещественный, если хотя бы один из операндов имеет вещественный тип.
Константы символьного типа (Character) записываются, как правило, в виде символа, заключенного между апострофами: 'G', '5', '#' и т.д. Если символ не имеет графического представления, он может быть представлен в виде #<код_символа>, например, #13, #27 и т.д. Так же может быть представлен и любой из символов, имеющих графическое изображение (то есть буква, цифра и т.д.). Над операндами символьного типа допустимы операции сравнения (<, <=, >, >=, =, <>). Результат этих операций (True – "истина" или False – "ложь") такой же, как и над числовыми кодами сравниваемых символов.
Булевский, или логический, тип (Boolean) представлен двумя константами (True и False). При этом считается True>False. Выражения булевского типа представляют собой либо обычные числовые или символьные неравенства, включающие знаки <, <=, >, >=, =, <>, либо те же неравенства, соединенные знаками логических операций (NOT, AND, OR, XOR).
Результат выполнения операции Not A всегда противоположен значению логического выражения A: если A=True, то NOT A=False и наоборот, если A=False, то NOT A=True. Данная операция является унарной, то есть определенной над одним операндом. Остальные логические операции – бинарные, то есть определенные над двумя операндами.
Результат выполнения операции A AND B равен True тогда и только тогда, когда оба операнда A и B равны True одновременно.
Результат выполнения операции A OR B равен False тогда и только тогда, когда оба операнда A и B равны False одновременно.
Результат выполнения операции A XOR B равен False, когда оба операнда A и B равны (то есть либо оба одновременно равны True или оба одновременно равны False), и равен True, когда оба операнда имеют разные значения (то есть, когда один из них равен True, а другой – False).
Неравенства, соединенные знаками логических операций, принято заключать в круглые скобки:
(x<2) AND (y>=4*x).
Ниже, при описании некоторых операторов вместо логического выражения будет использоваться обозначение <условие>.
Целые типы, булевский и символьный типы составляют дискретные типы.
Все описанные выше типы данных относятся к простым типам языка Object Pascal.
Регулярные типы, или массивы, используются довольно часто. Массив – это упорядоченное множество переменных, имеющих одно и то же имя, обладающих одним и тем же типом и различающихся одним или более индексами, которые определяют порядок следования конкретного элемента в данном массиве. Ключевым словом для описания переменных такого типа является служебное слово ARRAY. Далее в квадратных скобках следует перечислить диапазоны индексов; количество диапазонов определяет количество индексов и, соответственно, размерность массива (одномерный, двумерный и т.д.). После этого указывается тип элементов массива.
Примеры описания массивов:
a,b:ARRAY[1..10] OF Real;
c:ARRAY[-5..5,2..12] OF Integer;.
Обращение к элементам массива может быть таким:
a[1]; b[N]; c[-2,I+1];.
Каждый диапазон индексов также представляет собой тип; он так и называется тип-диапазон, или ограниченный тип. Верхняя и нижняя границы индекса – это константы, которые могут быть заданы явно или предварительно описаны в разделе CONST. Как правило, границами индекса служат целочисленные константы. Ими также могут служить символьные или булевские константы, указанные в порядке их возрастания.
Примером стандартного массива служит строковый тип String, элементами которого являются представители символьного типа.
Помимо констант, меток, типов и переменных в программе могут быть использованы стандартные и нестандартные процедуры и функции. Каждая нестандартная процедура или функция должна быть описана.
Описание процедуры начинается с ее заголовка, в котором после служебного слова PROCEDURE указываются имя процедуры и в скобках перечень формальных параметров (если они есть). Далее могут следовать такие же подразделы, как и у головной программы (то есть константы, метки, типы, переменные, а также "свои", вложенные, процедуры и (или) функции). Завершается описание процедуры телом, которое начинается со слова BEGIN и заканчивается словом END. Пример описания процедуры:
PROCEDURE Proc1(a,b,c:Real;VAR x1,x2:Real);
VAR
d:Real;
BEGIN
…
END;.
В приведенном примере параметры a, b и c описаны как параметры-значения. При вызове такой процедуры можно вместо них указать как переменные, так и константы. А параметры x1 и x2 описаны как параметры-переменные (этот факт определяется служебным словом VAR). При обращении к данной процедуре вместо них можно указывать только переменные. Например:
Proc1(1,2,s,p1,p2);
При этом значение переменной s должно быть известно заранее. Переменным p1 и p2, как параметрам-переменным, будет присвоен результат выполнения данной процедуры.
Порядок следования параметров вызова процедуры (или фактических параметров), а также соответствие их количества и типов количеству и типам формальных параметров является существенным.
Функция, в отличие от процедуры, предназначена для вычисления значения простого типа. Структура описания функции немногим отличается от описания процедуры, главным образом, заголовком и тем, что в теле функции последним оператором должен быть оператор присваивания имени функции окончательного результата.
Пример описания функции:
FUNCTION arcsin(x:Real):Real;
BEGIN
…
END;
Структура списка формальных параметров в принципе может быть такой же, как и у процедуры. При вызове функции указывается ее имя и список фактических параметров. Функции, как уже было сказано, используются при записи выражений.
Объектовый тип – тип, позволяющий описать некоторый объект, с которым можно работать "по частям", описав эти "части" как некоторые составляющие данного объекта. "Частями" могут быть переменные различных типов, процедуры или функции.
Пример:
TYPE
Complex = OBJECT
Re,Im:Real;
PROCEDURE CR;
PROCEDURE CW;
END;
При таком описании типа complex необходимы еще описания процедур CR и CW, которые указаны при описании типа. Например:
PROCEDURE Complex.CR;
BEGIN
…
END;
PROCEDURE Complex.CW;
BEGIN
…
END;
Вызов таких процедур и обращение к другим отдельным составляющим тип (компонентам) осуществляются несколько иначе. Если, скажем, переменная C описана как переменная типа complex, то указывать ее "части" можно так:
C.Re; C.Im; C.CR; C.CW;
Как видно, имя переменной отделяется от ее компонента точкой. Программирование с использованием переменных объектовых типов относится к объектно-ориентированному программированию – специальному стилю программирования, основанному на представлении программы в виде совокупности объектов, каждый из которых является реализацией (или, как еще говорят, экземпляром) определенного класса, а классы образуют иерархию на принципах наследуемости.
3.2. Стандартные процедуры и функции
Отдельно следует сказать о стандартных процедурах и функциях языка Object Pascal.
Вызов процедуры организуется как отдельный оператор, называемый оператором вызова процедуры. Список основных стандартных процедур с кратким описанием их параметров приведен в следующей таблице:
Имя процедуры |
Параметры |
Назначение |
Exit |
нет |
завершение работы процедуры или программы |
Halt |
[<числовой_код_завершения>]2 |
завершение работы программы |
Read |
[<список_вводимых_переменных>] |
чтение данных из текущей строки |
Readln |
[<список_вводимых_переменных>] |
чтение данных с переходом на следующую строку |
Write |
[<список_выводимых_выражений>] |
вывод результатов в текущую строку |
Writeln |
[<список_выводимых_выражений>] |
вывод результатов с переходом на следующую строку |
Первая процедура (Exit) параметров не имеет, остальные – могут совсем не иметь параметров, либо имеют параметры, кратко описанные во втором столбце.
Функции используются в выражениях соответствующего типа. Перечень основных стандартных функций приведен ниже (см. табл.):
Имя функции |
Тип аргумента |
Тип результата |
Математическое обозначение |
Pi |
нет |
вещественный |
=3,14159265… |
Abs(x) |
числовой |
равен типу аргумента |
|
Sin(x) |
числовой |
вещественный |
|
Cos(x) |
числовой |
вещественный |
|
Arctan(x) |
числовой |
вещественный |
|
Sqrt(x) |
числовой |
вещественный |
|
Sqr(x) |
числовой |
равен типу аргумента |
|
Exp(x) |
числовой |
вещественный |
|
Ln(x) |
числовой |
вещественный |
|
Round(x) |
числовой |
целый |
|
Trunc(x) |
числовой |
целый |
Почти все функции, кроме функции-константы Pi, имеют числовой (то есть, целого или вещественного типа) аргумент. У функций Sin(x) и Cos(x) аргумент задан в радианах. Результат функции Arctan(x) – угол в радианах. Функция Round(x)округляет результат до ближайшего целого, не превосходящего x. Функция Trunc(x) отсекает дробную часть аргумента x, и ее результат равен целой части x.
Таких функций, как тангенс и десятичный логарифм в языке Object Pascal нет. Нет также и функций показательной (кроме экспоненты) и возведения в степень.. Все эти функции можно заменить следующими выражениями:
В математике |
В Pascal ABC |
Sin(x)/Cos(x) |
|
Exp(x*Ln(a)) |
|
Exp(ln(x)/n) |
|
Ln(x)/Ln(10) |
В некоторых программах иногда полезно использовать выражение вида x/Abs(x). Очевидно, что при x, отличном от 0, оно равно 1, если x имеет положительное значение, и 0, если – отрицательное. В математике такая функция есть, и она обозначается (сигнум или "знак").
1При условии, что все операнды, входящие в выражение, имеют целый тип.
2 Здесь квадратные скобки в сам оператор не входят, а показывают, что содержащаяся в них запись может входить (а может и не входить) в состав данного оператора, являясь его необязательной частью.