Типы boolean, real и complex

Обзор типов

В Pascal ABC имеются последующие типы:

integer (целый)
byte (байтовый)
char (символьный)
перечислимый
диапазонный
boolean (логический)
real (вещественный)
complex (полный)
string (строковый)
тип "массив"
тип "запись"
тип "указатель"
процедурный
файловый
классовый

Типы integer, byte, char, перечислимый и диапазонный именуются порядковыми. Только значения этих типов могут быть индексами массивов и фигурировать в качестве выражения-переключателя в Типы boolean, real и complex операторе case. Переменная-параметр цикла for также обязана иметь перечислимый тип.

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

Pred(x) возвращает значение, предыдущее x (к меньшему значению не применяется);
Succ(x) возвращает значение, последующее за x (к большему значению не применяется);
Ord(x) возвращает порядковое целое значение, соответственное x. Для целых Типы boolean, real и complex x возвращает само значение x, для знаков char возвращает их код, а для частей перечислимого типа - их номер (нумерация начинается с нуля).

Все порядковые типы, также типы boolean, real и complex именуются ординарными типами.

Порядковые типы

Тип integer (целый). Значения этого типа занимают 4 б и находятся в спектре от -2147483648 до Типы boolean, real и complex 2147483647. Константа MaxInt хранит значение 2147483647.

Тип byte (беззнаковый целый). Значения этого типа занимают 1 б и находятся в спектре от 0 до 255.

Тип word (беззнаковый целый). Значения этого типа занимают 2 б и находятся в спектре от 0 до 65535.

Тип char (символьный). Значения этого типа занимают 1 б и представляют собой знаки в шифровке Типы boolean, real и complex Windows. Стандартная функция Chr(x) возвращает знак с кодом x. Константы этого типа могут быть записаны в виде #x, где x - целое число от 0 до 255.

Перечислимый тип определяется упорядоченным набором идентификаторов:

type
Season = (Winter,Spring,Summer,Autumn);
DayOfWeek = (Mon,Tue,Wed,Thi,Thr,Sat,Sun);

Значения перечислимого типа занимают 4 б.

Интервальный тип Типы boolean, real и complex представляет собой подмножество значений целого, символьного либо перечислимого типа и описывается в виде a..b, где a - нижняя, b - верхняя граница интервального типа:

var
a: 0..10;
c: 'a'..'z';
d: Mon..Thr;

Тип, на базе которого строится интервальный тип, именуется базисным для этого интервального типа. Значения интервального типа занимают Типы boolean, real и complex 4 б.

Типы boolean, real и complex

Тип boolean (логический). Переменные и константы логического типа занимают 1 б и принимают одно из 2-ух значений, задаваемых предопределенными константами True (правда) и False (ересь).

Тип real (вещественный). Значения вещественного типа занимают 8 б, содержат 15-16 означающих цифр и по модулю не могут превосходить величины 1.7∙10308. Самое малюсенькое положительное Типы boolean, real и complex число вещественного типа равно 5.0∙10-324. Константы типа real можно записывать как в форме с плавающей точкой, так и в экспоненциальной форме: 1.7, 0.013, 2.5e3 (2500), 1.4e-1 (0.14).

Тип complex (полный). Значения всеохватывающего типа занимают 16 б. Константы этого типа записываются в виде (x,y), где x и y - выражения вещественного типа, представляющие из Типы boolean, real и complex себя вещественную и надуманную части всеохватывающего числа. Если переменная c имеет тип complex, то обратиться к ее вещественной и надуманной частям можно как к полям записи: c.re и c.im. К примеру:

const ci=(0,1);
var c: complex;
...
c.re:=2*c.im;
c:=ci*c+(c.im,c.re);

К Типы boolean, real и complex переменным типа complex применимы стандартные числовые функции: абс, sin, cos, exp, ln, sqrt, также функция conj(c), возвращающая комплексно сопряженное к c, и функция carg(c), возвращающая главное значение аргумента всеохватывающего числа c. При вычислении неоднозначных функций ln, sqrt, carg ворачивается главное значение и подразумевается, что разрез изготовлен по Типы boolean, real и complex отрицательной вещественной оси, при этом, верхний сберегал принадлежит разрезу. Так, carg(c) возвращает значение в спектре (-Pi,Pi].

Строчки в Pascal ABC имеют тип string и состоят из менее чем 255 знаков. При описании

var s: string;

под переменную s отводится 256 б, при всем этом в нулевом б хранится длина строчки.

Для экономии памяти предвидено описание Типы boolean, real и complex вида

var s1: string[40];

В данном случае под строчку отводится 41 б (нулевой б - под длину строчки). В случае присваивания переменной s1 строчки из более чем 40 знаков излишние знаки отсекаются, и длина строчки s1 полагается равной 40.

При выполнении операции конкатенации вида s1+s1 итог считается строчкой типа string, т.е.занимает 256 б. Но, если при Типы boolean, real и complex конкатенации итог будет занимать более 255 знаков, то программка закончится с ошибкой.

К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый знак в строке. Воззвание к нулевому символу s[0] считается неверным. Чтоб поменять длину строчки, следует пользоваться процедурой SetLength. Если индекс i выходит за границы памяти, отводимой Типы boolean, real и complex под строчку, то выдается сообщение об ошибке. Но, если индекс i выходит только за границы длины строчки, то сообщение об ошибке не выдается.

Массивы

Массив представляет собой набор частей 1-го типа, любой из которых имеет собственный номер, именуемый индексом (индексов может быть несколько, тогда массив именуется многомерным). Тип массива Типы boolean, real и complex конструируется последующим образом:

array [тип индекса1, ..., тип индексаN] of базисный тип

Тип индекса непременно представляет собой интервальный тип и непременно должен задаваться в виде a..b, где a и b - постоянные выражения целого, символьного либо перечислимого типа. К примеру:

type enum=(w1,w2,w3,w4,w5);
var
a1,a2: array [1..10] of integer;
b: array ['a'..'z Типы boolean, real и complex',w2..w4] of string;
c: array [1..10] of array [1..5] of real;

Базисный тип может быть хоть каким (а именно, он может быть типом массива, как для переменной c).

Переменные-массивы 1-го типа можно присваивать друг дружке, при всем этом будет выполняться копирование содержимого 1-го массива в другой:

a1:=a2;

При передаче по значению Типы boolean, real и complex параметра типа массив в подпрограмму также делается копирование содержимого массива-фактического параметра в массив-формальный параметр:

procedure p(arr: array [1..10] of integer);
...
p(a1);

Обычно, в этой ситуации копирование содержимого массива не требуется, потому массив рекомендуется передавать по ссылке:

procedure r(var arr: array [1..10] of integer);
...
r(a1);

К элементам массива обращаются с помощью переменных с индексами:

a1[3]:=a Типы boolean, real и complex2[5];
b['f',w3]:='Hello';
c[3][4]:=3.14;

Более нередко встречающаяся ошибка при работе с массивами - выход за границы конфигурации индекса. В Pascal ABC появление этой ошибки приводит к окончанию работы программки.

Записи

Запись представляет собой набор частей различных типов, любой из которых имеет свое имя и именуется полем записи. Тип записи конструируется последующим Типы boolean, real и complex образом:

recordперечень полей1: тип1; ... перечень полейN: типN; end

Последний знак ";" не является неотклонимым. К примеру:

type
Date=record
Day: 1..31;
Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
Year: Integer;
end;

Сейчас можно объявить переменные типа Date:

var d1,d2: Date;

Чтоб получить доступ к полям записи Типы boolean, real и complex, следует пользоваться точечной нотацией, указав имя переменной-записи и поле, разбитые точкой:

d1.Day:=9;
d1.Month:=Sep;
d1.Year:=2004;

Как и для массивов, можно скопировать содержимое полей одной переменной-записи в другую:

d2:=d1;

Огромного количества

Огромное количество представляет собой набор частей 1-го порядкового типа. Элементы огромного количества числятся неупорядоченными; каждый элемент может Типы boolean, real и complex заходить во огромное количество менее 1-го раза. Тип огромного количества описывается последующим образом:

set ofбазисный тип

В качестве базисного может быть хоть какой порядковый тип с элементами, для которых функция Ord возвращает значения в спектре от 0 до 255. К примеру:

type
ByteSet = set of byte;
CharSet = set of char;
Digits = set of '0'..'9';
SeasonSet = set of(Winter Типы boolean, real и complex,Spring,Summer,Autumn);

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

[список значений]

где в перечне могут перечисляться через запятую или выражения базисного типа, или их спектры в виде a..b, где a и b - выражения Типы boolean, real и complex базисного типа. К примеру:

var
bs: ByteSet;
bestdays: (Mon,Tue,Wed,Thi,Thr,Sat,Sun);
...
bs:=[1,3,5,20..25];
bestdays:=[Wed,Thr..Sun];

Значения в перечне могут отсутствовать, тогда огромное количество является пустым:

bs:=[];

Операция in инспектирует принадлежность элемента огромному количеству:

if Wed in bestdays then ...

Для множеств определены операции + (объединение), - (разность), * (скрещение), = (равенство), (неравенство Типы boolean, real и complex), = (содержит). Примеры этих операций приведены в пт Выражения и операции.

Огромного количества с совместимыми базисными типами неявно преобразуются одно к другому (см. пункт Неявное приведение типов). При присваивании огромному количеству по мере надобности происходит усечение его частей до значений базисного типа. К примеру:

var st: set of 3..9;
...
st:=[1..5,8,10,12]; // в st Типы boolean, real и complex попадут значения [3..5,8]

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

for i:=0 to 255 do
if i in st then write(i,' ');

Указатели

Указатель хранит адресок памяти. В Pascal ABC имеются типизированные указатели (содержат адресок ячейки памяти данного типа) и бестиповые указатели (содержат адресок оперативки, не Типы boolean, real и complex связанный с данными какого-нибудь определенного типа).

Тип указателя на тип T имеет форму ^T, к примеру:

type pinteger=^integer;
var p: ^record r,i: real end;

Бестиповой указатель описывается при помощи слова pointer.

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

var
i: integer;
pi: ^integer Типы boolean, real и complex;
...
pi:=@i; // указателю присвоили адресок переменной i
pi^:=5; // переменной i присвоили 5

Операция разыменования не может быть использована к бестиповому указателю.

Типизированный указатель может быть неявно преобразован к бестиповому:

typepreal=^real;
var

p: pointer;
pr: ^real;
...
p:=pr;

Оборотное преобразование может быть выполнено только очевидно:

pr:=preal(p);
pr^:=3.14;

Указатели можно ассоциировать на Типы boolean, real и complex равенство (=) и неравенство (). В дополнение к этому типизированные указатели можно ассоциировать, используя операции , =.

Для типизированных указателей доступны также операции p+i, p-i и p2-p1, где i - целое (см.п.Выражения и операции).

Для того чтоб отметить тот факт, что указатель никуда не показывает, употребляется стандартная константа nil (нулевой Типы boolean, real и complex указатель) : p:=nil.

Файлы

Файл в Pascal ABC представляет собой последовательность частей 1-го типа, хранящихся на диске. В Pascal ABC имеется два типа файлов - типизированные и текстовые. Текстовые файлы хранят знаки, разбитые на строчки знаками #13#10.

Для описания текстового файла употребляется стандартное имя типа text, а для описания типизированного файла - конструкция file of тип частей:

var
f Типы boolean, real и complex1: file of real;
f2: text;


tibetskij-buddizm-referat.html
tic-ferdinand-skulptor-doklad.html
tichok-zhestkoj-polusuhoj-kistyu.html