Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.docx
Скачиваний:
2
Добавлен:
23.04.2019
Размер:
210.36 Кб
Скачать

5. Основные элементы языка Object Pascal. Константы и константные выражения. Переменные.

Любой естественный язык строится из элементарных составляющих — букв, образующих алфавит языка. Буквы используются для построения слов, слова складываются в предложения. Полезно узнать, что главными элементами любой программы являются переменные, константы и операторы. Переменная — это ячейка (или несколько ячеек) оперативной памяти компьютера. Такой ячейке присвоено определенное имя, ее содержимое может изменяться в ходе выполнения программы. Вид информации, содержащейся в ячейке, набор преобразований, которые можно выполнять над этой информацией, и множество допустимых значений определяются типом переменной. Константа отличается от переменной тем, что ее значение фиксировано и не может быть изменено в ходе выполнения программы. Операторы задают те или иные действия, которые должна выполнять программа.

Язык Паскаль состоит приблизительно из 80 зарезервированных слов и специальных символов.

Зарезервированные слова языка Паскаль

Absolute

and

Array

assembler

Break

begin

Const

case

constructor

continue

destructor

div

Downto

do

End

else

External

far

File

for

Goto

function

implementation

if

In

inline

Interface

interrupt

Mod

label

Nil

near

Not

object

Of

or

Private

packed

Program

procedure

Public

record

Repeat

set

Shr

Then

string

To

type

Unit

until

Var

uses

While

with

virtual

  • Заголовки, то есть первые операторы программ и библиотечных модулей — это program и unit.

  • Для описания переменных, констант и составных частей программы —

  • подпрограмм-процедур и подпрограмм-функций — используются зарезервированные слова var, const, procedure, function.

  • Операторы описания типов переменных, задаваемых пользователем, — это type, array, string, record...end, file of... .

  • Слова, используемые для программирования составных операторов, а также начинающие и оканчивающие последовательность исполняемых операторов программы, — begin и end.

  • Операторами, управляющими ходом выполнения программы (они так и называются — управляющие операторы), являются if-then...else, for...to...do, repeat...until, case...of...end, for...downto...do, while...do.

  • В библиотечных модулях используются зарезервированные слова implementation, interface.

  • Зарезервированные слова для обозначения арифметических и логических операций — div, mod, shl, shr, and, or, not и некоторые другие.

  • В программах, написанных с использованием методов объектно-ориентированного программирования, применяются зарезервированные слова object, constructor, destructor, public и virtual.

  • Операторы ввода и вывода write (writeln), read (readln)

Как уже было отмечено, кроме зарезервированных слов в программах на языке Паскаль используются как отдельные специальные символы, так и пары символов, которые имеют специальное значение.

Одиночные и двойные специальные символы языка Паскаль

:=         Присваивание переменной значения выражения

;           Разделитель операторов в программе

( )         Скобки для арифметических и логических выражений

:            Разделитель в описаниях переменных и формате вывода

..           Многоточие для списков

+,-,*,/   Бинарные операции (не только арифметические!)

=          Логическое равенство, элемент описания констант и типов

<>        Логическое неравенство

<=        Отношения «меньше чем» и «больше чем»

>=        Отношения «меньше или равно» и «больше или равно»

.            Конец программы /модуля, и десятичная точка в real

'           Ограничители константы строкового типа

{}         Пары скобок для комментариев

,            Разделитель элементов списка

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

Константы и константные выражения

В качестве констант в Object Pascal могут использоваться истинные (целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств) и типизированные.

Целые числа записываются со знаком или без него по обычным правилам и могут иметь значение в диапазоне от -263 до +263-11. Следует учесть, что, если целочисленная константа выходит за указанные границы, компилятор дает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, т. е. определяться как вещественные числа.

Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части.

Экспоненциальная часть начинается символом е или е, за которым могут следовать знаки “+” или “-” и десятичный порядок. Символ е означает десятичный порядок и имеет смысл “умножить на 10 в степени”.

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

Шестнадцатеричное число состоит из шестнадцатеричных цифр, которым предшествует знак доллара $ (код символа 36). Диапазон шестнадцатеричных чисел - от $ffffffffffffffff до $7FFFFFFFFFFFFFFF

Логическая константа - это либо слово false (ложь), либо слово true (истина).

Символьная константа - это любой символ ПК, заключенный в апострофы. Если необходимо записать собственно символ апострофа, он удваивается.

Строковая константа - любая последовательность символов (кроме символа CR - возврат каретки), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается.

Строка символов может быть пустой, т. е. не иметь никаких символов в обрамляющих ее апострофах. Строку можно составлять из кодов нужных символов с предшествующими каждому коду символами #.

Конструктор множества - список элементов множества, обрамленный-квадратными скобками.

В Object Pascal разрешается в объявлении констант использовать произвольные выражения, операндами которых могут быть ранее объявленные нетипизированные константы, имена типов и объектов, а также следующие функции от них:

Abs - возвращает абсолютную величину отрицательного или положительного числа (модуль). Это реализуется удалением отрицательного знака, если такой обнаружен.

Addr - Функция Addr возвращает адрес переменной, функции или процедуры.

Hi - возвращает 1 байт старшего разряда от переданного 2-х байтового целого числа.

High - возвращает самое высокое разрешённое значение типа или переменной указанного типа. Это относится только к символам, массивам, порядковым и коротким строкам. Для массивов возвращает самый большой индекс.

Exp - является математической функцией, она возвращает экспоненту числа. Берет целое число или число с плавающей точкой и возводит в степень e.

Frac - возвращает дробную часть числа с плавающей запятой.

Int - возвращает целочисленную часть числа с плавающей точкой, как число с плавающей точкой.

Length - возвращает или число символов в SourceString, или число элементов в SourceArray.

Ln - берет целое число или с плавающей запятой и выдает натуральный логарифм этого числа.

Low - возвращает самое низкое позволенное значение или типа или переменной этого типа.  Используется только с символами, порядковыми типами данных, массивами и короткими строками.  Для массивов, возвращает самый низкий индекс массива.

Odd - возвращает истину, если данное число нечетно.

Pred - уменьшает значение порядковой переменной, и возвращает её значение.

Round - округляет число с плавающей запятой до целого значения.

SizeOf - возвращает количество байт, занимаемое Значением или типом, которое может быть выражением или идентификатором типа.

Trunc - возвращает целочисленную часть числа с плавающей запятой.

Типизированные константы.

Эти константы, в отличие от истинных, могут иметь тип массив, запись, указатель или процедурный. Вообще они могут иметь любой тип, кроме файлового и варианта. По умолчанию (директива компилятора {$J+}) типизированные константы могут изменять свои значения в процессе выполнения программы, т.е. ведут себя как инициализированные переменные. В случае указания директивы компилятора {$J–} они ведут себя как истинные константы, т.е. переменные, доступные только для чтения.

Переменные

Переменные можно разделить на два вида: глобальные и локальные (объявленные в блоке описаний подпрограммы).

Глобальные переменные могут быть инициализированы при описании с использованием такого синтаксиса:

var <идентификатор>: <тип> = <любое константовое выражение>;

Одновременное описание нескольких переменных (var X, Y, Z: Real;) не может включать начальных значений. Так же нельзя инициализировать файловые переменные и варианты. Если глобальная переменная не инициализирована явно, ее инициализирует компилятор нулевым значением. Локальные переменные не могут инициализироваться явно и не инициализируются компилятором, вследствие чего содержат случайные значения.

Память, выделенная для глобальной переменной, освобождается автоматически, когда переменная больше не используется. Локальные переменные существуют только при выполнении той подпрограммы, где они объявлены.

Динамические переменные.

Для динамических переменных память выделяется в динамической области памяти (heap) с помощью процедур New и GetMem. Выделенная таким образом память не освобождается автоматически и программист должен сделать это сам с помощью подпрограмм Dispose и FreeMem. Для управления распределением динамической памяти предназначены также подпрограммы ReallocMem, Initialize, StrAlloc и StrDispose.

Длинные строки и динамические массивы также располагаются в динамической памяти, однако память для них распределяется автоматически и применять к ним New или Dispose нельзя.

Локальные переменные потоков.

Эти переменные используются в многопоточных приложениях. Они подобны глобальным переменным за тем исключением, что каждый поток имеет свою собственную копию переменной и эта копия недоступна другим потокам.

Локальные переменные потоков объявляются с помощью зарезервированного слова threadvar вместо var.

Объявления локальных переменных потоков:

  • нельзя делать внутри подпрограмм;

  • не могут включать инициализацию

  • не могут быть абсолютными переменными.

Переменные, для которых поддерживается механизм подсчета ссылок – длинные строки, динамические массивы и интерфейсы, небезопасно использовать как локальные переменные потоков. Причина состоит в том, что для локальных динамических переменных потоков в общем случае нет хорошего способа освободить динамическую память. Нельзя также создавать локальные переменные потоков типа указателей или процедурного типа.