Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭМЛ. теория алгоритмов.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
307.71 Кб
Скачать

Структура программы на языке Pascal

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

Program MyProgram (Input, Output); {Заголовок программы}

Uses Crt, Graph; {Описание используемых модулей}

Label M1, M2, M3; {Описание меток}

Const {Описание констант}

A = 12; {целочисленная константа A}

B: Real = 23.05; {типизированная константа B}

S= ‘Строка’; {строковая константа}

Type {Описание типов}

Color = (Red, Green, Blue); {Перечисляемый тип}

Scale = 2 * (A - B).. (A + B); {Тип диапазон}

MassivReal=array[1..100] of Real; {Массив из ста элементов типа Real}

MassivChar=array[0..19] of Char; {Массив из 20 элементов типа Char}

Matr = array[1..10] of integer; {Mассив из 10 целых чисел }

LatLetter = ('А'..'z'); {Mножество букв латинского алфавита }

Days = 1..31; {Mножество целых чисел от 1 до 31}

Var {Описание переменных}

X,Y,Z: real; {переменные типа Real}

I,J,K: integer; {переменные типа Integer}

Digit: 0..9; {переменная перечисляемого типа}

C: Color; {переменная типа Color, который описан в разделе Type}

Done, Error: boolean; {переменные типа boolean }

Operator: (plus, minus, times); {переменная перечисляемого типа}

Matrix: array[1..10,1..10] of Real; {переменная - массив}

Procedure {Описание процедур}

Function {Описание функций}

Begin

Оператор 1;

Оператор 2; {Раздел операторов ... (тело программы)}

Оператор n

End.

Заголовок программы начинается служебным словом Program, за которым записывается идентификатор программы (имя). После имени программы иногда указывают в круглых скобках имена стандартных файлов ввода и вывода, связанных соответственно с клавиатурой и экраном монитора (Input, Output). Заканчивается описание заголовка символом ";".

После служебного слова uses через запятую перечисляются модули, процедуры и функции которые, используются в программе. В конце ставится " ; ". Это могут быть как стандартные модули Pascal - Crt, Graph, так и модули, разработанные пользователем.

За служебным словом Label следуют перечисленные через запятую идентификаторы меток, которые используются в программе. Метка - это идентификатор, заканчивающийся двоеточием " : ", помечающий место в программе, на которое передаётся управление при помощи оператора безусловного перехода goto.

Следом располагается раздел описаний констант, начинающийся служебным словом Const. Идентификатор константы отделяется от значения знаком "=". После каждой константы ставится " ; ". Константы - это данные, значения которых не могут изменяться в процессе выполнения программы. В языке Pascal используются константы трех видов: числовые, булевские и символьные. Числовые константы предназначены для представления числовых данных (целых и вещественных). Булевские константы используются для представления данных, имеющих смысл логических высказываний (истина-ложь). Символьные константы представляют данные, являющиеся последовательностями символов.

Типы данных, вводимые пользователем, описываются после служебного слова Type. Новый тип данных вводится своим идентификатором, за которым после знака равенства " = " следуют одно или несколько определений типов, разделенных точкой с запятой.

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

Раздел описания переменных начинается служебным словом Var. Значения переменных могут изменяться во время выполнения программы. Переменные идентифицируются по именам (идентификаторам), с каждой переменной программы связывается один тип данных. При описании они отделяются двоеточием " : ".

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

Следом идёт раздел описания процедур и функций. В этом разделе размещаются тела подпрограмм. Подпрограммой называется программная единица, имеющая имя, по которому она может быть вызвана из других частей программы. В языке Паскаль роль подпрограмм выполняют процедуры и функции. В общем случае подпрограмма имеет ту же структуру, что и программа. Для описания подпрограмм используются зарезервированные слова procedure и function, которые записываются в начале подпрограммы.

Формат процедуры:

procedure <имя процедуры> {<параметры>};

<разделы описаний>

<раздел операторов>

end;

Формат функции:

function <имя функции> {<параметры>} : <тип результата>;

<разделы описаний>

<раздел операторов>

end;

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

Тело программы начинается служебным словом Begin, которое определяет точку начала выполнения программы. Затем следуют операторы, описывающие алгоритм решения задачи. Они отделяются друг от друга точкой с запятой " ; ". Завершается тело программы служебным словом End за которым ставится точка.

Например:

begin {Начало программы}

Write('Введите значение целого числа А >'); {Вывод запроса на экран}

Readln(A); {Ввод значения А с клавиатуры}

Write('Введите значение целого числа В >');

Readln(В);

Proizved := А * В; {Вычисление переменной Proizved}

Write('Произведение чисел ',А,' и ',В,' = ',Proizved); {Вывод ответа}

end. {Конец программы}

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

Слова begin и end являются аналогом открывающей и закрывающей скобки в обычных арифметических выражениях.

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

Примеры.

{Начало программы} или (*Начало программы*)

{Пример комментария, занимающего

несколько строк}

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

Ограничители { } и (* *) удобно использовать при отладке программ. В процессе отладки часто требуется временно исключить выполнение какой-либо части программы. Конечно, этого можно добиться, уничтожив временно ненужные операторы или обойдя их с помощью оператора goto. Однако оба этих способа неприемлемы по ряду совершенно понятных причин: повторный набор вновь понадобившихся операторов, путаница с операторами goto и т.д. Гораздо удобнее просто заключить временно ненужную часть программы в {} или (* *), которая будет восприниматься компилятором как комментарий.

Рассмотрим структуру программы на примере программы решения задачи вычисления произведения двух целых чисел:

program Tutor3; {Заголовок программы}

var {Описание раздела переменных}

А,В, Proizved : integer; {Переменные A,B,Proizved - целые}

begin {Начало программы}

Write('Введите значение целого числа А >'); {Вывод запроса на экран} ,

Readln(A); {Ввод значения А с клавиатуры}

Write('Введите Значение целого числа В >');

Readln(В);

Proizved := А * В; {Вычисление переменной Proizved}

Write('Произведение чисел ',А,' и ',В,' = ',Proizved); {Вывод ответа)

end. {Конец программы}

В языке Pascal существует такое правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языка Pascal имеет следующие основные свойства:

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

  • тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию;

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

В Pascal все типы данных разделятся на следующие группы:

  • скалярные (к скалярным относятся типы данных, значения которых не содержат составных частей, то есть простые типы: целочисленный, вещественный, логический, символьный, перечисляемый, интервальный (тип диапазон));

  • ссылочный (являются указателями на данные других типов);

  • структурированные (в своей основе имеет один или несколько скалярных типов данных: строковые, регулярные - массивы, множественные, комбинированные - записи, файловые);

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

В Turbo Pascal пять предопределенных целочисленных типов:

  • Byte. Диапазон: 0..255. Занимает 1 байт памяти. Беззнаковый.

  • Word. Диапазон: 0..65535. Занимает 2 байта памяти. Беззнаковый.

  • Shortint. Диапазон: -128…127. Занимает 1 байт памяти. Короткое целое.

  • Integer. Диапазон: -32768..32767. Занимает 2 байта памяти. Целое.

  • Longint. Диапазон: -2147483648…2147483647. Занимает 4 байта памяти. Длинное целое.

К данными целого типа применимы следующие операции:

  • сравнения ("=" равенство, "<>" неравенство, "<" меньше, "<=" меньше либо равно, ">" больше, ">=" больше либо равно);

  • сложение (+);

  • одноместный (унарный) плюс (+);

  • вычитание (-);

  • одноместный (унарный) минус (-);

  • умножение (*);

  • деление на цело (получение частного) (DIV);

  • получение остатка от деления на целое (для беззнаковых второй операнд должен быть положительным) (MOD);

  • логический сдвиг влево (ShL);

  • логический сдвиг вправо (ShR).

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

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

Real - вещественное. Диапазон значений типа: 2.9E-39..1.7E+38 (здесь и далее значения приводятся по абсолютной величине). Данные типа Real имеют точность 11-12 значащих цифр после запятой. Занимают размер в памяти 6 байт.

Single - с одинарной точностью. Диапазон значений типа: 1.5E-45…3.4E+38 . Точность 7-8 значащих цифр после запятой. Занимают размер в памяти 4 байта.

Double - с двойной точностью. Диапазон значений типа: 5.0E-324...1.7E+308. Точность 15-16 значащих цифр после запятой. Занимают размер в памяти 8 байт.

Extended - с повышенной точностью. Диапазон значений типа: 3.4E-4932...1.1E+4932. Точность 15-16 значащих цифр после запятой. Занимают размер в памяти 10 байт.

Comp - сложное. Диапазон значений типа: -9.2E+18…9.2E+18. Это 64-битное целое число. Занимают размер в памяти 8 байт

Над данными вещественных типов допустимы следующие операции:

  • сложение (+);

  • одноместный (унарный) плюс (+);

  • вычитание (-);

  • одноместный (унарный) минус (-);

  • умножение (*);

  • деление (получение частного) (/);

Множеством значений типа данных Char являются символы, упорядоченные в соответствии с расширенным набором символов кода ASCII. При вызове функции Ord(Ch), где Ch - значение символьного типа, возвращается порядковый номер Ch. Строковая константа с длиной 1 может обозначать значение константы символьного типа. Любое значение символьного типа может быть получено с помощью стандартной функции Chr(N), где N - порядковый номер символа кода ASCII. Над данными типа Char допустимы операции сравнения (= , <>, <, <=, >, >=).

Данные типа Boolean могут принимать два значения: True (Истина) и False (Ложь). Над данными типа Boolean допустимы следующие операции:

  • сравнения (=, <>, <, <=, >, >=);

  • And (логическое И);

  • Or (логическое ИЛИ);

  • Xor (логическое исключающее ИЛИ);

  • Not (логическое отрицание).

Перечислимые типы определяют упорядоченные множества значений через перечисление идентификаторов, которые обозначают эти значения. Упорядочение множеств выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы. При указании идентификатора в списке идентификаторов перечислимого типа он описывается как константа для блока, в котором указано описание перечислимого типа. Типом этой константы является описанный перечислимый тип. Порядковый номер перечислимой константы определяется её позицией в списке идентификаторов при описании. Перечислимый тип, в котором описывается константа, становится ее типом. Первая перечислимая константа в списке имеет порядковый номер 0. Пример перечислимого типа:

Type

Number=(one, two, three, four);

Согласно этим описаниям one является константой типа Number. При применении функции Ord к значению перечислимого типа Ord возвращает целое число, которое показывает, какое место по порядку занимает значение в отношении других значений этого перечислимого типа. Согласно предшествующим описаниям, Ord(one) возвращает 0, Ord(two) возвращает 1 и так далее.

Тип диапазон представляет собой совокупность значений из порядкового типа, называемого главным типом. Тип диапазон задаётся минимальной и максимальной константой порядкового типа. Обе константы должны иметь один и тот же порядковый тип. Например: a..b. При этом считают, что a меньше или равно b (0..99; -128..127). Переменная типа диапазон имеет все свойства переменных главного типа, однако ее значение на этапе выполнения должно принадлежать указанному интервалу. Разрешение использования выражений-констант там, где стандартный Pascal допускает только простые константы, приводит к некоторой синтаксической неоднозначности.