Пример. Если определены два множества
var p1 : set of ’A’..’F’;
p2 : set of 0..9;
то [ ’B’ , ’F’] + [ ’B’.. ’D’] = [ ’B’, ’C’, ’D’, ’F’ ];
[1,2] + [1,3] = [1,2,3];
[ 0..4 ] * [ 3..7 ] = [ 3,4]; [1,2] * [1,2,3] =[ 1,2]; [ 0..4 ] * [ 5,6 ] = [ ];
[ 1,5,9 ] – [ 2,4,8,9 ] = [ 1,5 ]; [1,2,3] – [1,2] = [3].
Операции отношения применимы также к объектам множественного типа: проверка на равенство ( = ) , неравенство ( < > ), включение ( < = или > =) и принадлежность множеству ( in ) .
Пример. [2,3 ] = [0] результат false;
[1,3 ] = [ 3,1] результат true;
[1,2] < = [1,2,3] результат true ( содержится в );
[2,3] > = [1] результат false ( не содержится в ).
При использовании операции in первый операнд является выражением, задающим значение базового типа множества, а второй – множество. Если значение является элементом множества, то результат отношения есть true.
Например, определение типа
type
days = (mon, tue, wed, thu, sat, sun ) ;
months = ( yan, feb, mar, apr, may, jun, jul, aug,sep,oct, nov, dec);
а отношение feb in days примет значение false.
Проверка на принадлежность множеству используется в программах для исключения сложных условий. Так, выражение с использованием логических операций вида ( ch > = ’0’) and ( ch <=’9’) с использованием операции in имеет вид CH in [ ’0’ ..’9’].
Действия с множеством выполняются быстрее, чем сложные выражения с использованием логических операций.
Язык Паскаль допускает использование множественного типа в качестве любого другого структурированного типа (массива, записи), что значительно расширяет возможности языка.
Файл (File) – именованная область памяти персонального компьютера (ПК), предназначенная для хранения программы или данных.
Понятие файла распространяется также на логические устройства (логические имена, которые связаны со стандартными аппаратными средствами ПК, например, CON – клавиатура, экран дисплея, PRN – печатающее устройство и т. д.), рассматриваемые как потенциальные источники или приемники текстовой информации.
Любой файл имеет следующие характерные особенности:
У него есть имя, что дает возможность программе работать сразу с несколькими файлами одновременно.
Файл содержит компоненты одного типа. Типом компонентов может быть любой тип Турбо Паскаля (ТП), кроме файлов.
Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью памяти.
Существует три вида файлов:
типизированные (file of …);
текстовые (text);
нетипизированные (file),
типы которых и связанные с ними файловые переменные описываются соответствующим образом:
type
t1= file of < тип >;
t2 = text;
t3 = file;
Var f1, f2: t1;
f3, f4, f5: t2;
f6: t3;
где t1,t2,t3 – имена типов файлов (t1 – типизированный, t2 – текстовый, t3 – нетипизированный),
f1,f2, f3, f4, f5, f6 – имена файловых переменных,
< тип > – любой тип ТП, кроме файлов.
Вышеприведенное описание может быть представлено в следующей эквивалентной форме:
var f1, f2 : file of < тип >;
f3, f4, f5: text ;
f6: file;
Имя файла состоит из двух слов: имени и расширения, разделяемых точкой.
Пример: gg. pas gg. exe d1. dat.
Текстовый файл в ТР – это совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой.
У типизированного файла длина любого компонента строго постоянна, что дает возможность организовать прямой доступ к каждому из них по его порядковому номеру.
Нетипизированные файлы отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы совместимыми с любыми другими файлами, а также позволяет организовать высокоскоростной обмен данными между диском и основной памятью.
Строка. В Турбо Паскале строковый тип STRING – последовательность символов произвольной длины (до 255 символов). У типа-строки в квадратных скобках может быть указан его размер от 1 до 255. Если размер строки не указан, то он считается равным 255.
Пример: Var
FAM: STRING [20];
TEL: STRING[12];
MAXSTR: STRING; {строка в 255 символов}
Строка – последовательность символов, заключенная в апострофы. Последовательность из одного символа называется символьной константой.
Например, ’A’, ’Х’, ’I’ – символьные константы;
’Шевалье д’’Артаньян’ – строка, при этом апостроф внутри строки записывается дважды.
С помощью числовых, логических, символьных значений и имен записываются простейшие конструкции языка: константы, переменные, стандартные функции, выражения.
Константы
Константами называются элементы данных программы, значения которых не меняются в процессе ее выполнения.
Константы могут иметь один из рассмотренных типов:
1) Целые содержат лишь знак и цифры (знак + в записи константы может быть опущен);
2) Вещественные содержат в записи десятичную точку и/или показатель степени, следующий за символом Е, который заменяет число 10;
Пример: CONST
x=-0.5;
y=1.0;
z=-1Е-5
w=7.5е15;
Для некоторых констант в программе определены стандартные имена, например, PI (π=3.1415926536….);
3) Логические могут принимать только два значения: TRUE или FALSE;
4) Символьные записываются литерой, заключенной с двух сторон в одиночные кавычки (апострофы), например, ′В′, ′6′, ′ * ′;
5) Текстовые (строковые) записываются последовательностью символов (текстом), заключенной с двух сторон в апострофы, например, ′x=′, ′параметр z′, ′матрица А′.
Каждая константа, входящая в программу, должна быть описана в разделе описаний, который начинается с ключевого слова CONST, после которого перечисляются через точку с запятой имена констант с их числовыми значениями. Тип константы определяется типом их правой части, например
CONST
K=100;
N=15;
G=9.81;
R= -1.0Е19
LMP=′ Р ′;
B=TRUE;
В данном примере константы с именами K и N имеют целый тип и числовые значения соответственно 100 и 15, константы G и R – вещественного типа, константа LMP – символьного типа, соответствует символу P и константа B – логического типа, имеет значение TRUE.
В качестве значения констант допускаются также ранее определенные идентификаторы других констант (возможно с противоположным знаком) и константные выражения.
CONST
a=35.91;
b= -а;
c=2.5+3*а;
Если программа не содержит констант, то раздел CONST в описании не приводится.
Переменные
Переменная используется для записи значений, изменяющихся в процессе выполнения программы. По структуре различают простые переменные и переменные с индексом. Простая переменная записывается в программе своим именем (идентификатором). Напомним, что имя переменной – это последовательность букв и цифр, начинающаяся с буквы, например: XMAX, REZ, K3, SUMMA. В качестве примеров неправильной записи имен переменных можно привести следующие записи: 5М, R34.5, 13К, К 13.
Также как и константа, все переменные, используемые в программе, должны быть описаны в соответствующем разделе описания. Раздел описания переменных начинается с ключевого слова VAR (variable), после которого перечисляются через запятую имена переменных, имеющих один и тот же тип. Перечисление заканчивается двоеточием, после чего записывается тип этих переменных и ставится точка с запятой (разделитель). Далее идет перечисление остальных переменных, имеющих другие типы, например,
VAR KOL, IMAX: INTEGER;
V, Y: REAL;
C, D: CHAR;
F: BOOLEAN;
В данном примере переменные с именами KOL, IMAX описаны как переменные целого типа и могут принимать в программе только целые значения. Переменные с именами V, Y имеют вещественный тип, их возможные значения – числа, имеющие дробную часть. Переменные с именами C, D – символьного типа и могут принимать значение любого символа из набора символов данной ЭВМ. Переменная F имеет логический тип и в программе может иметь значение TRUE или FALSE.
По инструкциям, указанным в разделе описаний, ЭВМ до выполнения программы выделит в оперативной памяти для каждой описанной переменной или константы одну или несколько ячеек, нужных для хранения данных описанного типа. В ячейки, отведенные для констант, сразу будут записаны их значения. В ячейки, зарезервированные для переменных, их значения будут записываться в ходе выполнения программы, причем ЭВМ пропустит в ячейку только те значения, которые определены для данного типа. Так, например, при попытке дать переменной IMAX значение 3.5 будет выдано сообщение об ошибке, так как в IMAX может быть записано только целое число. Все переменные и константы, которые используются в программе, должны быть описаны только один раз.
Переменные с индексами
Как указывалось выше, переменные с индексами являются элементами массивов. Массивы должны быть описаны до их использования в программе в разделе описания переменных VAR, если элементы массива относятся к любому из перечисленных ранее типов, или в разделе описания типов TYPE, если программист сам задает тип элементов массива, при этом ЭВМ резервирует место в памяти для хранения элементов массива, например
VAR NOR, COP: ARRAY [1..20] OF REAL;
M1: ARRAY [1..4,1..5] OF INTEGER;
C5: ARRAY [1..5] OF CHAR;
При описании задаются имя массива, границы изменения его индексов и тип элементов массива. Описание массива начинается со служебного слова ARRAY (массив), которое отделяется от имени массива символом «:», затем в квадратных скобках указываются нижняя и верхняя границы изменения индексов элементов данного массива, разделенные символом « .. ». После служебного слова OF (из) указывается тип элементов массива. В приведенном примере описаны одинаковые по структуре одномерные массивы NOR и COP, элементы которых являются вещественными переменными, пронумерованными целыми числами от 1 до 20; одномерный массив с именем С5, содержащий 5 элементов символьного типа. Кроме того, описан двумерный массив М1 – матрица целых чисел, имеющая 4 строки и 5 столбцов.
В качестве границ индексов могут быть использованы описанные ранее константы, так, например, рассмотренный ранее массив С5 может быть описан следующим образом:
CONST N = 5;
VAR C5 : ARRAY [1 . . N] OF CHAR;
Верхняя граница индекса этого массива – описанная в разделе констант целая константа N.
Примеры неправильных описаний массивов:
A: ARRAY [2 . . 1] OF REAL; – нижняя граница индексов больше верхней;
C: ARRAY [2 . . N+1] OF CHAR; – верхняя граница индексов задана выражением, а не константой;
D: ARRAY [2.0 . . 5.0] OF REAL; – вещественные границы индексов недопустимы.
Упражнения к разделу.
Определить тип приведенных ниже констант
′K′ 6) 2.0
TRUE 7) ′ ′
2 8) FALSE
′2′ 9) 0.2222
2.OE-02 10) ′ ′ ′ ′
Все операции в языке Турбо Паскале можно разделить на четыре группы:
- арифметические;
- логические;
- операции отношения;
- операции со строками.
Если в операциях используются несколько операндов, то их типы должны быть либо идентичными, либо совместимыми.
Арифметические операции применимы только к величинам целых и вещественных типов (табл.3).
Отметим, что три первые операции дают результат целого типа, если конструкции (константы, переменные, стандартные функции), над которыми выполняются эти действия, целого типа; в противном случае результат имеет вещественный тип (табл.3). При использовании знаков операций DIV или MOD они должны быть отделены от операндов хотя бы одним пробелом.
Пример:
A MOD B {если, например A=10 и B=3, то результат =1}
C DIV D {если, например C=10 и D=3, то результат =3}
13 DIV - 4 = - 3 13 MOD -4 = 1
Всегда А MOD В = А- (А DIV В) * В
Таблица 3
Зависимость типа результата от типа операндов
Знак |
Операция |
Тип операндов |
Тип результата |
+
-
*
/
DIV
MOD |
сложение
вычитание
умножение
деление
деление целых чисел
вычисление остатка от деления целых чисел |
целый хотя бы один вещественный целый хотя бы один вещественный целый хотя бы один вещественный целый или вещественный
целый
целый |
целый вещественный
целый вещественный
целый вещественный
вещественный
целый
целый |