Смекни!
smekni.com

Алгоритмический язык Паскаль (стр. 2 из 31)

Локомотив трогается из пункта, расположенного слева, и прибывает к пункту назначения, расположенному справа, петляя по рельсовым путям. Всякий раз, когда поезд проходит через овальный отсек, к нему прицепляют один вагон. Когда поезд прибывает к пункту назначения, то прицепные вагоны образуют в нашем примере команду "если". Кроме овальных отсеков в синтаксических диаграммах есть еще и прямоугольные. Прямоугольные отсеки сложнее, т.к. они представляют собой ссылки на другие синтаксические диаграммы. Лучше это можно представить так: поезд на входе в прямоугольный отсек снимается с рельс и переставляется на вход другой синтаксической

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


2. ОПИСАНИЕ ЯЗЫКА ПАСКАЛЬ

2.1 Основные объекты языка

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

Буквы: латинские от A до Z, от a до z и русские от А до Я, от а до я

Цифры: 0 1 2 3 4 5 6 7 8 9

Специальные символы: + - * / = ^ < > () [ ] { }.,:; ' # $

Зарезервированные слова:

absolute downto function nil record To
and else goto not repeat Type
array end if of set Until
begin external in or shl Var
case file inline packed shr While
const for label procedure string With
div forward mod program then Xor
do

Стандартные идентификаторы (имена):

Arctan ConInPtr FilePos Length Port Sqr

Assign ConOutPt FileSize Ln Pos Sqrt

Aux Concat FileChar Lo Pred Str

AuxInPrt ConstPtr Flush LowVideo Ptr Succ

AuxOutPrt Copy Frac Lst Random Swap

BlockRead Cos GetMem LstOutPtr Randomize Text

BlockWrite CrtExit GotoXY Mark Read Trm

Boolean CrtInit HeapPtr MaxInt Readln True

BufLen DelLine Hi Mem Real Trunc

Byte Delay IOresult MemAvail Release UpCase

Chain Delete Input Move Rename Usr

Char EOF InsLine New Reset UsrInPtr

Chr EOLN Insert NormVideo Rewrite UsrOutPtr

Close Erase Int Odd Round Val

ClrEol Execute Integer Ord Seek Write

ClrScr Exp Kbd Output Sin Writeln

ÐÀÇÄÅËÈÒÅËÈ

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

Комментарии в Паскаль-программе начинаются с символа { или (*и заканчиваются } или *). Сам комментарий может содержать любые символы, кроме } и *). Любой комментарий можно заменить в программе на пробел.

Символы-разделители применяются часто для улучшения читаемости программы.

Íàïðèìåð:

program PRIMER;

{Программа сложения натуральных чисел}

var I,J,K: integer;

begin

readln(I,J); { Вводдвухслагаемых }

K:=I+J;

writeln(I,'+',J,'=',K); {Печать результата в форме 12+3=15}

end.


2.2 Структура Паскаль - программы

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

РАЯ ПАСКАЛЬ
АЛГ<имя> PROGRAM<имя>
ДАНО Раздел
НАДО объявлений
НАЧ BEGIN
- -
- Блок программы
- Серия команд (серия операторов)
- -
- -
КОН END

Сравнительный анализ представленной схемы показывает, что по своему внешнему оформлению запись алгоритма на школьном алгоритмическом языке и программы на языке Паскаль во многом схожи. Действительно, оба этих описания начинаются с заголовка, в котором обязательно указывается имя алгоритма (программы). Наличие имени связано с тем обстоятельством, что описанный алгоритм в РАЯ и программа в Паскале могут служит вспомогательным алгоритмом (процедурой) для других, более сложных алгоритмов (программ).

В обоих языках принято описывать (объявлять) все переменные, фигурирующие в алгоритме (программе) с указанием их типов. Правда, в РАЯ эти переменные подразделяются еще на аргументы, результаты и промежуточные переменные, а в Паскале они просто перечисляются в разделе объявлений.

Идентификатор - это последовательность букв или цифр, начинающаяся с буквы. Отметим, что в системе TURBO в идентификаторах могут встречаться не любые буквы, а только латинские. Под оператором понимается указание ЭВМ по выполнению каких-либо действий.

Как видно из диаграммы, любая Паскаль-программа имеет имя, за которым может следовать список идентификаторов, заключенных в скобки. Заголовок программы заканчивается точкой с запятой. Затем идут объявления, служащие для описания типов данных, процедур и функций. Далее BEGIN, один или несколько операторов, разделенных точками с запятой, и в конце ставится END с точкой. При написании программ используются лексемы и разделители, определенные алфавитом языка.

По написанию инструкций (операторов) Паскаль, как и язык РАЯ, довольно свободен. Инструкция может занимать не одну, а несколько строк. На одной строке можно разместить несколько инструкций. Здесь можно вставлять пробелы и пустые строки (но пробелы в служебных словах недопустимы). Для лучшей читабельности программы строки можно располагать лесенкой.

2.3 Типизация данных

Данные - это общее понятие всего того, с чем оперирует ЭВМ. Любой тип данных определяет множество значений, которые может принимать та или иная переменная, и те операции, которые можно к ним применять. Каждая встречающейся в программе переменная может иметь один и только один тип.

В Паскале имеется три типа данных: простые, составные и ссылочные. Рассмотрим вначале простой тип данных, представленный на следующей схеме:

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

К любому ординальному значению X применимы три следующие встроенные функции:

ORD(X) - дает порядковый номер, соответствующий X. Результат относится к типу INTEGER;

SUCC(X)- дает следующее за X значение, если X не максимальный элемент соответствующего типа. В последнем случае SUCC(X) суть ошибка;

PRED(X)- дает предыдущее X значение, если только X не минимальный элемент соответствующего типа. В последнем случае PRED(X) суть ошибка.

Наиболее простыми из ординальных типов являются предописанные или встроенные типы: INTEGER, BOOLEAN и CHAR, которые определяют соответственно числовые, логические (булевские) и литерные (символьные) величины. К встроенному (но не ординальному) типу данных относится также тип REAL.

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

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

DEN_NED = (MO, TU, WE, TH, FR, SA, SU);

MONETA = (1, 2, 3, 5, 10, 20, 50).

Диапазонный тип представляет собой подмножество одного из ординальных типов. Его часто называют еще интервальным.

ÍÀÏÐÈÌÅÐ:

DEN_MES = 1..31;

RAB_DEN = MO..SA;

LATBUKW = 'A'..'Z'.

ЗАМЕЧАНИЕ. Все типы, рассмотренные ранее, включая перечислимый и символьный, называются скалярными. Величины, принадлежащие скалярному типу, - упорядочены (не путать с ординальностью):

3 < 5; 1.2 > -6.8; 'A' < 'C'; true > false; MO > TH.

2.4 Объявление данных

С помощью объявлений программист сообщает компилятору, какие данные, процедуры и функции пользователя будут задействованы в программе. Описательная часть программы (объявления) состоит из 5 разделов, которые должны располагаться в следующем порядке:

- раздел модулей;

- раздел меток;

- раздел констант;

- раздел типов;

- раздел переменных;

- раздел процедур и функций.

Любой из перечисленных разделов может в объявлении отсутствовать.

Раздел описания модулей начинается со служебного слова USES, за которым идет перечень используемых в программе модулей типа CRT, DOS, GRAPH и др. Все эти модули находятся в библиотеке модулей и каждый из них поддерживает соответствующий набор встроенных процедур и функций.

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

LABEL 342,11,1445;

Раздел определения констант начинается со служебного слова CONST. Определение каждой константы содержит идентификатор (имя) константы, знак равенства и значение. Определения отделяются друг от друга точкой с запятой, как показано на диаграмме:

НАПРИМЕР:

const PI = 3.1415927; E = 2.7182818; Z = 'информатика'.

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

Раздел определения типов начинается со служебного слова TYPE.

Каждому определенному типу соответствует имя. Данный раздел применяется для описания нестандартных типов (перечислимых, диапазонных и др.).