Основная структура программы

 

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

Program <Имя программы>;

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

Begin

<Тело программы>

End.

 

Здесь слова Program, Begin и End являются служебными. Правильное и уместное употребление этих слов является обязательным.

 

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

 

Имя программы выбирается программистом самостоятельно в соответствии с правилами построения идентификаторов.

 

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

1. Описание меток (Label).

2. Описание типов (Type).

3. Описание констант (Const).

4. Описание переменных (Var).

5. Описание процедур и функций (Procedure, Function).

 

При отсутствии необходимости в каком-либо виде объектов, соответствующий подраздел может быть опущен.

 

. СТРУКТУРА ПРОГРАММЫ

 

Программа на языке ПАСКАЛЬ состоит из заголовка, разделов описаний и раздела операторов.

Заголовок программы содержит имя программы, например:

 

Program PRIM;

 

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

Раздел описания модулей определяется служебным словом USES и со держит имена подключаемых модулей (библиотек) как входящих в состав системы TURBO PASCAL, так и написанных пользователем. Раздел описания модулей должен быть первым среди разделов описаний. Имена модулей от деляются друг от друга запятыми:

 

uses CRT, Graph;

 

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

 

label 3, 471, 29, Quit;

 

Описание констант позволяет использовать имена как синонимы конс тант, их необходимо определить в разделе описаний констант:

 

const K= 1024; MAX= 16384;

 

В разделе описания переменных необходимо определить тип всех пере-

менных, используемых в программе:

 

var P,Q,R: Integer;

A,B: Char;

F1,F2: Boolean;

 

Описание типов, прцедур и функций будет рассмотрено ниже. Отдель ные разделы описаний могут отсутствовать, но следует помнить, что в ПАСКАЛЬ - программе должны быть обязательно описаны все компоненты программы.

Раздел операторов представляет собой составной оператор, который содержит между служебными словами

 

begin.......end

 

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

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

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

Текст ПАСКАЛЬ - программы может содержать ключи компиляции, кото рые позволяют управлять режимом компиляции. Синтаксически ключи ком пиляции записываются как комментарии. Ключ компиляции содержит символ $ и букву-ключ с последующим знаком + (включить режим) или - (выклю чить режим). Например:

 

{$E+} - эмулировать математический сопроцессор;

{$F+} - формировать дальний тип вызова процедур и функций;

{$N+} - использовать математический сопроцессор;

{$R+} - проверять выход за границы диапазонов.

 

Некоторые ключи компиляции могут содержать параметр, например:

 

{$I имя файла} - включить в текст компилируемой программы назван-

ный файл.

 

Пример записи простой программы:

 

Program TRIANG;

var A, B, C, S, P: Real;

begin

Read(A,B,C);

WriteLn(A,B,C);

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)*(P-C));

WriteLn('S=',S:8:3)

end.

 

Основные понятия.

 

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

 

Команды позволяют получать, сохранять и обрабатывать данные различных типов (например, целые числа, символы, строки символов, т.д.). Однако кроме команд в записи программы участвуют еще так называемые "служебные слова". Это и есть элементы формальности, организующие структуру программы. Их не так много, но их значение трудно переоценить. Служебные слова можно использовать только по своему прямому назначению. Переопределять их не разрешается.

 

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

 

Алфавит языка

 

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

 

Итак, алфавит языка Паскаль составляют:

1) буквы латинского алфавита;

2) арабские цифры;

3) специальные знаки.

 

Использование символов первой группы чаще всего вопросов не вызывает, но свои тонкости здесь имеются. Во-первых, это употребление заглавных и строчных букв. Большинство существующих трансляторов не различают буквы разных регистров. Таким образом, записи "progRaM" и "PROGram" будем считать идентичными. Во-вторых, некоторые символы латиницы и кириллицы совпадают по начертанию. Нельзя ли вместо буквы "К" латинской написать "K" русскую? Ответ: в тетради (если вы их сможете различить) - пожалуйста, в программе на ЭВМ - ни в коем случае. На вид они может быть и похожи, но уж коды-то у них совершенно разные, а компьютер, как вам известно, оперирует внутри себя не буквами, а их числовыми кодами.

 

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

 

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

 

Наиболее часто употребляемым специальным символом является пробел (в значимых местах мы будем обозначать его в записях знаком "V"). Его использование связано с форматами основной структуры программы, разделов описаний, операторов. Не следует путать наличие пробела с отсутствием символа.

. конец программы, разделение целой и дробной частей вещественного числа (десятичная точка), разделение полей в переменной типа Record;

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

.. указание диапазона;

: используется в составе оператора присваивания, а также для указания формата вывода в операторе Writeln;

; отделяет один раздел программы от другого, разделяет операторы;

' используется для ограничения строковых констант;

- + * / ( ) арифметические знаки (используются по своему назначению);

< > знаки отношений;

= используется в составе оператора присваивания, в разделах описаний констант и типов, используется как знак отношения (равно);

@ имя специального оператора определения адреса переменной, подпрограммы;

^ используется для именования динамических переменных;

{} ограничение комментариев в программе;

[ ] заключают в себе индексы элементов массивов;

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

# обозначение символа по его коду;

$ обозначение директивы компилятора, обозначение шестнадцатеричного числа.

 

. О С Н О В Н Ы Е С И М В О Л Ы

 

Основные символы языка-буквы, цифры и специальные символы-состав-

ляют его алфавит. ТУРБО ПАСКАЛЬ включает следующий набор основных

символов:

1) 26 латинских строчных и 26 латинских прописных букв:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

2) _ подчеркивание

3) 10 цифр:

0 1 2 3 4 5 6 7 8 9

4) знаки операций:

+ - * / = <> < > <= >= := @

5) ограничители:

. , ' ( ) [ ] (. .) { } (* *) .. : ;

6) спецификаторы:

^ # $

7) служебные (зарезервированные) слова

:ABSOLUTE EXPORTS LIBRARY SET

ASSEMBLER EXTERNAL MOD SHL

AND FAR NAME SHR

ARRAY FILE NIL STRING

ASM FOR NEAR THEN

ASSEMBLER FORWARD NOT TO

BEGIN FUNCTION OBJECT туре

CASE GOTO OF UNIT

CONST IF OR UNTIL

CONSTRUCTOR IMPLEMENTATION PACKED USES

DESTRUCTOR DESTRUCTOR PRIVATE VAR

DIV INDEX PROCEDURE VIRTUAL

DO INHERITED PROGRAM WHILE

DOWNTO INLINE PUBLIC WITH

ELSE INTERFACE RECORD XOR

END INTERRUPT REPEAT EXPORT

EXPORT LABEL RESIDENT

 

 

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

 

 

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

Элементарные конструкции языка ПАСКАЛЬ включают в себя имена, числа и строки.

Имена (идентификаторы) называют элементы языка - константы, метки, типы, переменные, процедуры, функции, модули, объекты. Имя - это пос ледовательность букв и цифр, начинающаяся с буквы. В именах может ис пользоваться символ _ подчеркивание. Имя может содержать произвольное количество символов, но значащими являются 63 символа.

Не разрешается в языке ПАСКАЛЬ использовать в качестве имен служебные слова и стандартные имена, которыми названы стандартные константы, типы, процедуры, функции и файлы.

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

Примеры имен языка ПАСКАЛЬ:

 

A b12 r1m SIGMA gamma I80_86

 

Числа в языке ПАСКАЛЬ обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например:

 

217 -45 8954 +483

 

Действительные числа записываются в форме с десятичной точкой или

в форме с использованием десятичного порядка, который изображается

буквой Е:

 

28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16

 

ПАСКАЛЬ допускает запись целых чисел и фрагментов действительных

чисел в форме с порядком в шестнадцатиричной системе счисления:

 

$7F $40 $ABC0

 

Строки в языке ПАСКАЛЬ - это последовательность символов, записан ная между апострофами. Если в строке в качестве содержательного сим вола необходимо употребить сам апостроф, то следует записать два апострофа. Примеры строк:

 

'СТРОКА' 'STRING' 'ПРОГРАММА' 'АД''ЮТАНТ'

 

Идентификаторы.

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

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

идентификатор может состоять только из символов латинского алфавита, цифр и знака подчеркивания ("_");

идентификатор не может начинаться с цифры.

 

Константы.

 

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

 

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

 

Пример: 2 . 4 5 6 7 Е - 0 6

^мантисса ^порядок

 

Здесь буква "Е" отделяет мантиссу (совокупность значащих цифр числа с десятичной точкой после первой) от порядка (показателя степени десятки в стандартном виде числа). Вам предстоит научиться как читать числа в таком виде, так и записывать.

 

Константы, представляющие собой строковые величины, заключаются в апострофы.

 

Если одна и та же величина используется в программе несколько раз, то удобнее было бы обозначить ее каким-нибудь именем и использовать это имя везде, где требуется записать соответствующую константу. Кроме сокращения размера исходного текста программы, это позволит избежать случайных ошибок, а также упростит отладку программы. Описание именованных констант начинается служебным словом Const. Далее следуют записи вида: <Идентификатор>=<значение>;

Пример:

Const

Pi=3.14;

Name1='Татьяна';

Name2='Виктор';

R21=6.33187E+03;

W_W_W=934122;

 

Понятие переменной. Типы.

 

. КОНЦЕПЦИЯ ТИПА

ДЛЯ ДАННЫХ

 

В математике принято классифицировать переменные в соответствии с

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

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

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

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

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

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

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

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

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

Обязательное описание типа приводит к избыточности в тексте прог рамм, но такая избыточность является важным вспомогательным средс твом разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня. В языке ПАСКАЛЬ существуют скалярные и структурированные типы данных.

К cкалярным типам относятся стандартные типы и типы, определяе мые пользователем.

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

Структурированные типы имеют четыре разновидности: массивы, мно жества, записи и файлы.

Кроме перечисленных, TURBO PASCAL включает еще два типа - проце дурный и объектный.

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

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

-к любому порядковому типу может быть применена стандартная функция 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 занимает один байт, и в процессе приведения

старший байт будет отброшен.

 

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

 

В качестве данных в программах на языке Паскаль могут выступать числа, символы, целые строки символов. Заметьте, что с этими различными видами информации выполняются совершенно разные действия. Например, с числовыми величинами производятся арифметические операции, чего невозможно сделать с символьными. Кроме того, разные виды данных требуют различного объема памяти для хранения. В соответствии с этими соображениями в языке Паскаль введено понятие "Тип" (TYPE). Тип переменной указывает на то, какие данные могут быть сохранены в этом участке памяти, и в каких действиях эта переменная может участвовать. Существуют зарезервированные (базовые) типы в языке Паскаль, но, как далее вы убедитесь, есть также возможность создавать свои собственные, определяемые программистом типы переменных.

 

К базовым типам относятся: тип целых чисел - Integer

тип "длинных" целых чисел - Longint

тип действительных (вещественных) чисел (то есть - с дробной частью) - Real

тип неотрицательных целых чисел от 0 до 255 - Byte

тип неотрицательных целых чисел от 0 до 65535 - Word

символьный тип - Char

строковый тип - String

логический тип - Boolean

 

Физически типы данных отличаются друг от друга количеством ячеек памяти (байтов), отводимых для хранения соответствующей переменной. Логическое же отличие проявляется в интерпретации хранящейся информации. Например, переменные типа Char и типа Byte занимают в памяти по одному байту. Однако в первом случае содержимое ячейки памяти интерпретируется как целое беззнаковое число, а во втором - как код (ASC) символа.

 

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

 

Раздел описания переменных начинается служебным словом Var, после которого следуют записи следующего вида: <Список имен переменных>:<Название типа>;

 

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

 

Пример:

Var

A,B,H_22,Angle : Real;

Name3 : String;

Flag : Boolean;

I,J,K,Count : Word;

 

П Е Р Е М Е Н Н Ы Е.

И Н И Ц И А Л И З А Ц И Я П Е Р Е М Е Н Н Ы Х

 

Тип переменных определяется пользователем в разделе описания переменных:{}

В настоящее время в профессиональном программировании принято записывать имена переменных с использованием так называемой венгерс кой нотации.

Венгерская нотация - это соглашение о наименованиях переменных и функций. Соглашение широко используется при программировании на языках PASCAL, C и в среде WINDOWS.

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

-имена переменных и функций должны содержать префикс, описывающий их тип;

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

Для языка PASCAL могут быть рекомендованы следующие префиксы для скалярных переменных и функций:

 

Префикс Тип

---------------------

by Byte

sh Shortint

i Integer

w Word

l Longint

r Real

si Single

d Double

e Extended

c Comp

ch Char

b Boolean

p Pointer

x,у координаты символа или точки на экране

 

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

 

a --Array

s --String

sz --Stringz

se --Set

re --Record

f ---File

t ---Text

 

Например:

 

rV, arVector[1..20], sName, iCount.

 

В откомпилированной программе для всех переменных отведено место в памяти, и всем переменным присвоены нулевые значения. Для задания начальных значений переменным (инициализации переменных) TURBO PASCAL позволяет присваивать начальные значения переменным одновременно с их описанием. Для этого используется конструкция

имя переменной: тип = значение;

которая должна быть размещена в разделе описания констант, например:

const rWeight: Real = 0.4;