Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структура программы на Free Pascal.

Поиск

 

Любая программа на языке Pascal имеет следующую структуру:

 

// Раздел описания программы

program _1; // _1 – название программы

 

uses // Подключение модулей (например, CRT, Graph, Strings и др.)

 

const // Описание констант, определяемых на этапе компиляции

type // Описание пользовательских типов

var // Описание переменных

label // Описание меток

 

procedure …; // Описание подпрограмм – процедур и функций

function …;

 

// Раздел реализации

Begin

// Тело программы (операторы)

End.

 

Программа подразделяется на 2 раздела:

- Раздел описания (interface), где помещаются все данные, необходимые для правильной компиляции и организации взаимосвязей элементов программы.

- Раздел реализации (implementation), где содержится непосредственно набор операторов для решения задачи по поставленному алгоритму.

 

Описание элементов программы.

 

program name; // name – имя программы, состоящее из [a..z, A..Z, 0..9, _]

Нельзя, чтобы имя программы начиналось с цифры.

После названия программы ставится точка с запятой ("; ").

 

uses CRT, Graph;

Pascal имеет в своем составе набор библиотечных модулей, в которых определены служебные функции, например, функции для работы с экраном и функции для математических вычислений. Для использования этих функций необходимо указать требуемый модуль в секции "uses". Названия модулей указываются через запятую.

 

Для подключения стандартного (поставляемого с компилятором или со средой разработки) модуля необходимо указать его имя в секции uses; то же самое справедливо и для пользовательских модулей.

 

Const

C = 10;

C2 = C * 4 + 3;

 

Секция const определяет перечень констант с установленными значениями. Данная секция является глобальной, если она описывается в контексте программы (т.е. на самом верхнем уровне видимости), и локальной, если она описывается в контексте подпрограммы (видима только для подпрограммы и ее вложенных подпрограмм).

 

Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания.

 

Type

T1 = Integer;

T2 = record

A, B: T1;

C: Real;

end;

 

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

1900..2014 – интервальный

(_1, _2, _3) – перечисляемый

array [1..12] of String – структурированный

 

Секция type определяет типы, созданные пользователем. После определения каждого типа ставится точка с запятой.

Некоторые типы (например, Byte, Integer, String и др.) не разрешается переопределять.

 

Аналогично (как для const) определяется видимость секции type.

 

Var

X, X2, X3: Integer;

X4: T2;

 

Секция var определяет переменные, используемые в программе или подпрограмме.

 

В Pascal применяется строгая типизация переменных.

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

 

Явное описание: A, B: TData;

Неявное описание: A, B: (_1, _2);

Аналогично (как для const и type) определяется видимость секции var.

 

Label

L1, L2;

 

Секция label определяет метки для безусловного перехода. При выполнении оператора goto происходит переход на метку, имя которой описано как в секции label, так и в теле программы или подпрограммы.

Данный метод редко применяется на практике, так как структурированный язык программирования (каким является Pascal) подразумевает, что любой алгоритм можно реализовать на основе последовательного исполнения операций, ветвления и цикла. Единственное исключение – выход из 2 и более вложенных циклов; в таком случае использование оператора goto и секции label может быть оправдано.

 

procedure P1;

function P2: Integer;

 

function имя(параметры): возвр. значение // заголовок

раздел описания (const, type, var, label)

begin // тело

раздел реализации

end;

 

В программе могут быть определены процедуры и функции (подпрограммы), при этом в разделе описания указываются их имена.

Кроме того, процедуры и функции могут быть импортированы извне (например, из системных библиотек).

 

Раздел реализации – набор операторов, решающий задачу по поставленному алгоритму. Этот раздел ограничивается ключевыми словами begin и end ("операторные скобки") и содержит непосредственно набор операторов для решения задачи.

 

После описания раздела реализации ставится ключевое слово end. с точкой.

 

3. Типы данных. Понятие "переменная" и "идентификатор".

 

Основные свойства концепции типов языка Pascal:

- Любой тип данных определяет множество значений, которые может принимать переменная, выражение или вырабатывать операция/функция.

- Каждая операция или подпрограмма требует аргументов фиксированного типа и выдает результат фиксированного типа (строгая типизация).

 

Тип определяет:

- возможные значения констант, переменных, функций, выражений;

- внутреннюю форму представления данных в ЭВМ;

- операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.

 

Все типы данных можно разделить на 4 основных класса:

- скалярные: Значения не зависят от составных частей. Такие типы подразделяются на порядковые и вещественные.

- порядковые: Значение элементов можно четко определить по количеству и порядку. Пример –

Byte, Integer, подинтервалы (1..31), перечисление и т.д. В свою очередь, порядковые

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

адресный, перечисляемый, интервальный.

 

- вещественные: числа с точкой (фиксированной или плавающей).

 

- структурированные: Такие типы представляют собой набор элементов скалярного либо структурированного типа. Пример – записи (record), массивы (array), множества (set), файлы (file).

 

- объектные: Типы, определяющие совокупность данных и методы их обработки.

 

- процедурные: Типы, определяющие набор операций, имеющих общий заголовок (типизированные указатели на процедуру/функцию).

 

Целые типы:

 

Название Размер Значения
Shortint   -27..27-1
Byte   0..28
Smallint   -215..215-1
Word   0..216
Longint   -231..231-1
LongWord   0..232
Int64   -263..263-1
 
Integer varies -2x-1..2x-1-1
Cardinal varies 0..2x

 

На 16-битных платформах тип Integer по размеру и значению совпадает с Smallint; на 32-битных – с Longint (т.е. размер Integer не гарантируется).

То же самое справедливо и для Cardinal (Word и LongWord соответственно).

 

Компилятор Free Pascal по умолчанию использует 16-битный вариант.

 

Логический тип – Boolean, имеет 2 возможных значения: False или True. (False < True). В памяти данный тип занимает 1 байт.

По умолчанию происходит сравнивание типа Boolean со значением True, т.е. формы записи

if Bool = True then и

if Bool then являются идентичными.

 

Операции not, and, or и xor над типом Boolean являются логическими, над другими порядковыми типами – битовыми.

 

Над переменными типа Boolean можно применять операции Ord, Succ, Pred, Inc, Dec.

 

Символьный тип – Char (AnsiChar – ANSI, WideChar – Unicode). К символу можно обратиться по имени ('a'), коду (#63) или порядку (Chr(63)).

 

Множество значений символьного типа есть множество символов, упорядоченных в соответствии с их ASCII-кодами.

Любое значение символьного типа может быть получено с помощью стандартной функции Chr из его кода ASCII (Chr(32) = ' ').

 

Перечислимый тип определяет упорядоченное множество значений путем перечисления идентификаторов, обозначающих эти значения. Упорядочивание значений определяется порядком следования идентификаторов, определяющих эти значения (т.е. при перечислимом типе (_1, _2) будет принято _1 < _2; кроме этого, Ord(_1) = 0, Ord(_2) = 1).

 

Интервальный тип представляет собой поддиапазон значений из некоторого порядкового типа, называемого базовым (TData = 1..31, базовый тип – Byte).

 

Для порядковых типов применяются следующие функции:

Ord: по значению перечислимого типа возвращает порядковый номер значения (например, код символа).

Pred, Succ – возвращают предшествующее или последующее значение по значению порядкового типа.

Low, High – возвращают наименьшее или наибольшее значение по перечислимому типу или переменной данного типа.

.

Вещественный тип - подмножество множества действительных чисел, которые могут быть представлены в формате с плавающей точкой.

 

Вещественные типы представляются в памяти компьютера как mE+p, где m – мантисса (целое/дробное с десятичной точкой), p – порядок (целое число).

-36.142E+2 = -36.142 * 10^2 = -3614.2

7.25E-5 = 7.25 * 10^-5 = 0.0000725

 

Название Размер Кол-во значащих цифр
Real   11-12
Single   7-8
Double   15-16
Extended   19-20
Comp   19-20

 

Строковый тип: String. Позволяет создавать строковые массивы, состоящие из заданного числа символов. Каждый символ занимает 1 байт (в кодировке ANSI). Максимально допустимое число символов в строке – 255. Однако, при использовании нуль-терминированных строк это ограничение не применяется.

 

Строковый тип – последовательность символов с атрибутом "динамическая длина" (зависит от фактического количества символов во время выполнения программы) и с атрибутом "размер" (от 1 до 255).

Текущее значение длины строки можно получить с помощью стандартной функции "Length".

Для значений строкового типа определен лексикографический порядок (bc > ac, abc < ac, ab < aba).

Символы строки доступны как элементы массива (т.е. запись S[1] является допустимой и возвратит первый символ в строке, если ее длина больше или равна 1).

В символе с индексом "0" хранится длина строки.

 

В Pascal имеется тип PChar (PAnsiChar, PWideChar), который описывает "длинные строки" (или ASCIIZ-строки), у которых длина не указывается явно, а строка завершается символом #0.

 

Структурные типы.

 

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

 

Структурный тип характеризуется типом (или типами) элементов, составляющих объект, и способом доступа к элементам.

 

Элементы объекта структурного типа сами могут иметь структурный тип (многоуровневая структуризация).

Количество уровней структуризации не ограничено.

 

Массив – структурированный тип, содержащий фиксированное число элементов одного типа.

В качестве индексного допускается любой порядковый тип, кроме Longint и ограниченных типов, основанных на нем (на 16-битной архитектуре). Стандартные функции Low и High выдают верхнюю и нижнюю границы массива соответственно.

 

Запись – структурированный тип данных, являющийся неоднородной неупорядоченной структурой с прямым доступом к компонентам. Компоненты записи называют полями записи.

 

Множество – всевозможные подмножества значений некоторого порядкового типа, называемого базовым. Базовый тип не может иметь более 256 возможных значений.

 

Type

C = set of Char;

 

Ссылочные типы используются для описания указателей. Указатель – значение, задающее адрес другого значения в памяти.

 

PInteger = ^Integer;

 

Файл – линейная последовательность компонент некоторого типа. Тип компонентов файла (file of …) не может быть файловым типом, структурным типом, содержащим элементы файлового типа, и объектным типом. Количество компонент не фиксируется при определении файлового типа.

 

Процедурный тип предоставляет возможность использования переменных-подпрограмм.

Type

TFunc = function (X: Real): Real;

 

Переменные процедурного типа представляют собой указатель на процедуру/функцию.

 

Объектный тип введен для поддержки концепций объектно-ориентированного программирования (ООП).

 

Переменная – имя физического участка в памяти, в котором в каждый момент времени может находиться только одно значение. Содержимое этого участка может изменяться. Размер выделенной области однозначно определяется объявленным типом переменной. Типы переменных являются взаимозаменяемыми по правилу эквивалентности и правилу совместимости.

 

Идентификатор – имя объекта (установление соответствия объекта некоторому набору символов).

Правила создания идентификаторов:

- могут начинаться только с буквы или некоторых специальных символов (_) (кроме специальных идентификаторов меток);

- может состоять из букв, цифр и знака подчеркивания;

- при написании идентификаторов можно использовать строчные и прописные буквы (регистронезависимость);

- между двумя идентификаторами должен стоять хотя бы 1 пробел или специальный символ (>, <,,).

 



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 794; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.110.145 (0.011 с.)