Идентификаторы
Идентификаторы – это имена, которые используются в программе (это имя программы, имена констант и переменных, процедур и функций, программных модулей и т.д.)
Существуют правила написания идентификаторов:
Идентификатор должен начинаться с буквы латинского алфавита или знака подчеркивания.
Идентификатор не должен содержать в себе буквы русского алфавита, пробелы, спецсимволы (знаки *{}?/+=-%$#@! и т.д.).
Количество символов в идентификаторе не должно превышать 63. можно и больше, но Pascal различает только первые 63 символа.
Типы данных
Для того, чтобы пояснить что такое типы данных и для чего они нужны, опишем ряд параметров, которые играют роль при обработке и хранении данных.
Для хранения данных в программе компилятор должен знать объём памяти, необходимой для хранения этих данных. Для обработки данных компилятор должен знать перечень допустимых операций над данными. При изменении данных компилятору должен быть известен перечень допустимых значений изменяемой величины. Для задания всех этих параметров в языках программирования используются типы данных. Типы данных играют очень важную роль в программировании.
Таким образом, тип данных определяет объем памяти, необходимый для хранения данных, перечень допустимых над данными операций и диапазон допустимых значений.
В языке Pascal тип величины задают заранее. Все переменные, используемые в программе, должны быть объявлены в разделе описания переменных (раздел Var) с указанием их типа. Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня.
Иерархия типов в языке Паскаль такая:
Простые
Порядковые
Целые
Логические
Символьные
Перечисляемые
Интервальные
Вещественные
Структурированные
Массивы
Строки
Множества
Записи
Файлы
Указатели
Эту же иерархию типов данных можно представить в виде схемы:
Простые типы данных
В таблице приведены простые типы данных Турбо Паскаль, объем памяти, необходимый для хранения одной переменной указанного типа, множество допустимых значений и применимые операции.
Идентификатор |
Длина (байт) |
Диапазон значений |
Операции |
Целые типы |
|||
integer |
2 |
-32768..32767 |
+, -, /, *, Div, Mod, >=, <=, =, <>, <, > |
byte |
1 |
0..255 |
+, -, /, *, Div, Mod, >=, <=, =, <>, <, > |
word |
2 |
0..65535 |
+, -, /, *, Div, Mod, >=, <=, =, <>, <, > |
shortint |
1 |
-128..127 |
+, -, /, *, Div, Mod, >=, <=, =, <>, <, > |
longint |
4 |
-2147483648..2147483647 |
+, -, /, *, Div, Mod, >=, <=, =, <>, <, > |
Вещественные типы |
|||
real |
6 |
2,9x10-39 - 1,7x1038 |
+, -, /, *, >=, <=, =, <>, <, > |
single |
4 |
1,5x10-45 - 3,4x1038 |
+, -, /, *, >=, <=, =, <>, <, > |
double |
8 |
5x10-324 - 1,7x10308 |
+, -, /, *, >=, <=, =, <>, <, > |
extended |
10 |
3,4x10-4932 - 1,1x104932 |
+, -, /, *, >=, <=, =, <>, <, > |
Логический тип |
|||
boolean |
1 |
true, false |
Not, And, Or, Xor, >=, <=, =, <>, <, > |
Символьный тип |
|||
char |
1 |
все символы кода ASCII |
+, >=, <=, =, <>, <, > |
Перечисляемый и интервальный тип относятся к типам, определяемым пользователем и будут рассмотрены нами позже.
Порядковые типы, выделяемые из группы простых типов, характеризуются следующими свойствами:
все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;
к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;
к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;
к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа.
В языке Паскаль введены понятия эквивалентности и совместимости типов. Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий:
Т1 и Т2 представляют собой одно и то же имя типа;
тип Т2 описан с использованием типа Т1 с помощью равенства или последовательности равенств. Например:
type
T1 = Integer;
T2 = T1;
T3 = T2;
Менее строгие ограничения накладываются на совместимость типов. Так, типы являются совместимыми, если:
они эквивалентны;
являются оба либо целыми, либо действительными;
один тип - интервальный, другой - его базовый;
оба интервальные с общим базовым;
один тип - строковый, другой - символьный.
В Турбо Паскаль ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция
Имя_Типа (переменная или значение)
Напрмер, Integer('Z') представляет собой значение кода символа 'Z' в двухбайтном представлении целого числа, а Byte(534) даст значение 22, поскольку целое число 534 имеет тип Word и занимает два байта, а тип Byte занимает один байт, и в процессе приведения старший байт будет отброшен.
Структура программы на языке Pascal
Программа на языке Pascal состоит из нескольких разделов, каждый из которых имеет свое назначение и место. В общем виде структура программы на языке Pascal выглядит следующим образом:
Program <заголовок программы>;
Uses <список используемых программных модулей>;
Label <список меток>;
Const <список констант>;
Type <описание типов пользователя>;
Var <описание переменных>;
<раздел подпрограмм (процедур и функций)>;
procedure <имя процедуры>(<список параметров>);
begin
…
end;
function <имя функции>(<список параметров>):<тип результата>;
begin
…
end;
Begin
… <раздел операторов>
End.
Примечание: текст, заключенный между знаками <> поясняет назначение того или иного раздела программы.
Поясним назначение перечисленных разделов программы
Program <заголовок программы>;
В данном разделе программист может указать заголовок программы, который программист придумывает сам. Данный заголовок должен напоминать программисту о назначении программы. Например, когда количество написанных программистом программ становится большим, то заголовки позволяют вспомнить для какой цели была написана та или иная программа. Данный раздел является необязательным и его можно пропускать.
Пример: Program MyFirstProgram;
Uses <список используемых программных модулей>;
При написании программы программист может использовать дополнительные процедуры и функции, типы данных константы и переменные, которые хранятся в программных модулях (к программным модулям относятся файлы с расширением *.tpu). Программные модули могут быть разработаны как программистами Borlan, так сторонними разработчиками и самим программистом. Если вы используете в своей программе программные модули, то их названия должны быть перечислены в разделе Uses. Модули перечисляются через запятую.
Пример: Uses Crt, Graph;
Если программист не описывает в своей программе дополнительных программных модулей, то раздел Uses просто опускается.
Label <список меток>;
Чтобы пояснить назначение раздела Label сначала нужно напомнить, что программа состоит из команд, которые выполняются последовательно одна за другой. Но при выполнении программы иногда бывает нужно изменить порядок выполнения команд: перепрыгнуть на несколько команд вперед или возвратиться назад и выполнить некоторый блок команд еще раз. Для реализации данных прыжков можно использовать метки. То место в программе, в которое должен быть совершен прыжок нужно пометить меткой, после которой ставится двоеточие, а для самого перехода на метку используется оператор goto <метка>. Метки, используемые в программе обязательно должны быть перечислены в разделе Label. Перечисляя метки в разделе Label мы указываем компилятору на то, что данный идентификатор является меткой.
Пример: Label m1, metka1, s;
Такое перечисление указывает компилятору, что идентификаторы m1, metka1, s являются метками, а не переменными, константами и т.д.
Если программист не использует в своей программе меток, то раздел Label просто опускается.
Const <список констант>;
Описание констант в разделе Const позволяет связать некоторое значение с идентификатором, задаваемым программистом. Значение константы не может меняться в ходе выполнения программы. Если констант несколько, то они перечисляются через точку с запятой.
Пример: Const g=9.81; Radius=456723; Name=’Студент Иванов’;
Использование констант достаточно удобно при написании и редактировании программы. Например, написали вы программу которая рассчитывает ряд параметров, зависящих от значения Radius=456723. Конечно, вместо константы Radius вы можете везде написать число 456723, но это число во-первых нужно запомнить, во-вторых при его написании можно допустить опечатку и тогда результат будет неверным. А если данное значение задано константой, то идентификатор Radius запомнить проще, чем значение 456723, если вы допустите опечатку при написании слова Radius, то компилятор сам сообщит вам об этом, и если данное значение используется в программе несколько раз, и вы решили потом его изменить, то вам нужно изменить его только один раз в разделе Const.
Если программист не описывает в своей программе констант, то раздел Const просто опускается.
Type <описание типов пользователя>;
В языке Pascal нужно указывать тип переменных, параметров подпрограмм. Для этого в Pascal существует набор основных типов данных. Но их иногда бывает недостаточно. Чтобы программист мог разработать необходимые для программы типы данных, в программу был введен раздел Type. В нем описываются новые типы данных на основе существующих основных типов или ранее описанных типов данных.
Пример: Type masStud = record
Fam,Name,Group:string;
Mat,Inf,Rus:integer;
end;
Если программист не описывает в своей программе собственных типов данных, то раздел Type просто опускается.
Var <описание переменных>;
В разделе описания переменных необходимо определить тип всех переменных, используемых в программе:
Пример: Var x,y:real;
i:integer;
Если программист не использует в своей программе переменных, то раздел Var просто опускается. Однако трудно представить себе более менее серьезную программу, которая выполняет обработку данных, не используя при этом никаких переменных.
<раздел подпрограмм (процедур и функций)>;
Данный раздел используется для описания процедур и функций, создаваемых программистом. Например, для вычисления функции sin(2x) можно описать собственную функцию:
function sin2x(x:real):real;
begin
sin2x:=2*sin(x)*cos(x);
end;
Процедуры и функции можно описывать сразу после описания переменных (после раздела Var) и до начала программы (до зарезервированного слова Begin).
Begin
… <раздел операторов>
End.
Данный раздел является основным и обязательным в программе. Пропускать этот раздел нельзя. В разделе операторов содержатся команды, которые будут выполнены при запуске программы.
