Лекция №4. Структура программы, ее основные разделы и их назначение. Комментарии. Ввод-вывод данных: общие сведения, процедуры ввода-вывода, форматы вывода.
Программа реализует алгоритм решения задачи, т.е. представляет собой конечную совокупность действий, выполняемых над определенными данными с помощью определенных операций, приводящих к решению задачи. Основные характеристики программы: • точность полученного результата; • время выполнения программы; • объем требуемой памяти; О соответствии этих показателей решаемой задаче и возможностям ЭВМ должен позаботится сам программист. Ограничения по объему памяти и времени выполнения носят менее жесткий характер. Программа на языке ТР состоит из строк, максимальная длина которой не должна превышать 127 символов. Если строка содержит более 127 символов, то все лишние символы игнорируются компилятором. Для Delphi явных ограничений нет. Программист, набирая текст программы, может располагать строки на экране произвольным образом, достигая тем самым наибольшей читабельности программы. Количество операторов в строке также произвольно. Размер программы на ТР имеет предел. Редактор текстов и компилятор позволяют обрабатывать программы и библиотечные модули объемом до 64 Кбайт. Если программа требует большего количества памяти, следует использовать библиотечные модули (.TPU-файлы) или оверлейные структуры. Для Delphi явных ограничений нет, т. к. проблема решается использованием модулей. Структура консольных (программ, написанных с использованием процедур Read, Readln и Write, Writeln) и оконных приложений имеет как общие черты, так и различия. В любом случае программа состоит из двух основных частей: описательной (описания данных, с которыми оперируют действия) и исполнительной (описания последовательности действий, которые необходимо выполнить). Действия представляются операторами языка, данные вводятся посредством описаний и определений. Описания данных предшествуют описанию действий и должны содержать упоминание всех объектов, используемых в действиях (операторах).
Совокупность описаний и определений и следующая за ним последовательность операторов называется блоком. Блок может содержать в себе другие блоки. Блок, который не входит ни в какой другой блок, называется глобальным. Если в глобальном блоке находятся другие блоки, они называются локальными. Глобальный блок – это основная программа, он должен присутствовать в любом случае. Локальные блоки – это процедуры и функции, их присутствие необязательно. Объекты программы (типы, переменные, константы и т.д.) соответственно называются глобальными и локальными. Область действия объектов – блок, где они описаны, и все вложенные в него блоки. Блочная структура обеспечивает структурный подход к написанию программ. В идеальном случае программа на языке ОР состоит из процедур и функций, которые вызываются для выполнения из раздела операторов основной программы. Программа начинается с заголовка, который задает имя программы и ее параметры, с помощью которых программа взаимодействует с операционной средой. Для написания заголовка используется зарезервированное слово Program. Заголовок программы несет смысловую нагрузку и связывается с именем файла, в котором хранится текст программы (проекта). Заголовок завершается точкой с запятой. Параметрами программы обычно являются стандартные идентификаторы стандартных файлов ввода-вывода Input, Output. Как правило, они используются как параметры, принятые по умолчанию.
Пример. Program MyProgr (Input, Output); или Program Example;
После заголовка следует программный блок, состоящий в общем случае из 7 разделов: • раздел подключаемых библиотечных модулей (Uses); • раздел описания меток (Label); • раздел описания констант (Const); • раздел определения типов данных (Type); • раздел описания переменных (Var); • раздел описания процедур (Procedure) и функций (Function); • раздел операторов.
Структура программы выглядит следующим образом: Пример.. Program < имя > (Input, Output); Uses < имя1, имя2, ...>; Label ... ; Const ... ; Type ... ; Var ... ; Procedure < имя > ; < тело процедуры > ; Function < имя > ; < тело функции > ; Begin < операторы > ; End.
Любой раздел, кроме операторов, может отсутствовать. Разделы описаний (кроме Uses, который всегда расположен после заголовка программы) могут встречаться в программе любое количество раз и следовать в произвольном порядке. Главное, чтобы все описания объектов программы были сделаны до того, как они будут использованы.
раздел USES Понятие библиотечного модуля является одним из основных в идеологии программных систем на языке ОР. Именно они служат средством создания библиотек подпрограмм (процедур и функций). Библиотечный модуль – это результат компиляции одной или нескольких процедур и функций. Модуль имеет имя, упомянув которое в разделе описания любой программы, можно получить доступ к каждой из находящихся в нем процедур или функций. Этот раздел состоит из зарезервированного слова Uses и списка имен, подключаемых стандартных и пользовательских библиотечных модулей.
Пример. Uses Crt, Dos, MyLib ; Подробнее речь об этом модуле пойдет позже. раздел описания меток. Перед любым оператором языка ОР можно поставить метку, что позволяет выполнить прямой переход на этот оператор с помощью оператора перехода goto из любого места исполнительной части программы. Метка состоит из имени и следующего за ним двоеточия. Именем может служить идентификатор или цифра. Перед употреблением метка должна быть описана. Раздел описания меток начинается с зарезервированного слова Label (метка), за которым следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой.
После записи метки в разделе операторов следует двоеточие, показывающее компилятору, что идентификатор используется как метка. Пример. Label Metka1, Metka2 ; Begin ... Metka1 : <оператор>; ... Metka2 : <оператор>; ... End. Если метка описана, но в разделе операторов не используется, то ошибки при этом не возникает.
раздел описания констант. В разделе описания констант производится присваивание идентификаторам констант постоянных значений. Раздел начинается зарезервированным словом Const, за которым следует ряд выражений, присваивающих идентификаторам постоянные числовые или строковые значения. Выражения присваивания отделяются друг от друга точкой с запятой. Формат записи: Const <идентификатор > = < значение > ; Пример. Const One = 'привет'; {строковая константа} Pi = 3.14; {вещественная константа} M1: Word = 100; {типизированная константа}
Удачное с точки зрения мнемоники именование констант пользователя делает программу более читабельной и позволяет быстро вносить корректировку в программу при изменении алгоритма. В ОР большое число констант определено стандартно, к ним можно обращаться без предварительного описания. раздел описания типов данных Тип данных может быть описан либо непосредственно в разделе описания переменных, либо определяться идентификатором типа. Стандартные типы не требуют описания в отличие от типов, образованных пользователем. Раздел описания типов данных начинается зарезервированным словом Type, за которым следуют одно или несколько определений типов, разделенных точкой с запятой.
Формат записи: Type <имя типа> =< значение типа > ; Пример. Type Color1 = (Red, Yellow, Green); {перечисляемый тип} Tab = array [1..10] of real; {тип массив} Каждое описание задает множество значений и связывает с этим множеством некоторое имя типа.
раздел описания переменных. Каждая встречающаяся в программе переменная должна быть описана. Описание обязательно предшествует использованию переменной. Раздел описания переменных начинается зарезервированным словом Var, затем через запятую перечисляются имена переменных и через двоеточие следует их тип и точка с запятой. Формат записи: Var <идентификатор, ...> : < тип > ; Пример. Var A, B, C: integer; Sum: real ; раздел описания процедур и функций. В этом разделе размещаются тела подпрограмм. Подпрограммой называется программная единица, имеющая имя, по которому она может быть вызвана из других частей программы. В языке ТР роль подпрограмм выполняют процедуры и функции. В общем случае подпрограмма имеет ту же структуру, что и программа. Для описания подпрограмм используются зарезервированные слова Procedure и Function.
Формат записи процедуры: Procedure < имя процедуры > {<параметры>} ; <раздел описаний> ; <раздел операторов> ; end ;
Формат записи функции: Function < имя функции > {<параметры>} : <тип результата> ; <раздел описаний> ; <раздел операторов> ; end ; Процедуры и функции подразделяются на стандартные и определяемые пользователем. Стандартные процедуры и функции являются частью языка и могут вызываться без предварительного описания. Описание процедур и функций пользователя обязательно.
раздел операторов. В программе на языке ТР раздел операторов является основным, т.к. именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат решения поставленной задачи. Раздел операторов начинается с зарезервированного слова Begin, за которым следуют операторы языка, разделяемые точкой с запятой. Завершает раздел зарезервированное слово End и точка. Пример. Begin <оператор> ; ... <оператор> ; End. Операторы выполняются строго в том порядке, в котором они записаны в тексте программы в соответствии с синтаксисом и правилами пунктуации. Слова Begin и End аналогичны открывающей и закрывающей скобки в обычных арифметических выражениях. комментарии Комментарий – это пояснительный текст, который можно записывать в любом месте программы, где разрешен пробел. Текст комментария ограничивается символами { } или (* *) и может содержать любой набор русских и латинских букв, цифр и других символов алфавита языка ОР. Если необходимо закомментировать только одну строку кода программы, можно использовать "//".
Пример. { комментарий к программе PROG }; (* вычислительный блок *); // пример описания комментария Помни: • Комментарий игнорируется компилятором и поэтому никакого влияния на программу не оказывает. • Если используются разделители (* *), то пробелы между звездочкой и скобкой запрещены.
• В тексте не должны находится знаки ограничителей, с которых ограничитель начинается, т.к. это вызовет ошибку при компиляции. Однако ограничители { } можно вложить в (* *) и наоборот. • Ограничений на длину комментария нет. По месту расположения в программе комментарии можно подразделить на четыре класса: • объясняющие назначение программы; • поясняющие смысл идентификаторов переменных и констант; • описывающие логически обособленные части программы; • объясняющие труднопонимаемые части алгоритма. Директивы компилятора Текст программы может содержать директивы компилятора, которые используются программистом для управления режимами компиляции. Директивы, как комментарии, заключаются в фигурные скобки, но они имеют отличительный знак $, позволяющий компилятору интерпретировать их соответствующим образом. Непосредственно после знака $ следует имя директивы, состоящее из одной или нескольких букв. Пример. {$R-} {$V+, K-, R-} Имеется три типа директив. Директивы переключения. Эти директивы включают или выключают конкретные возможности компилятора с помощью знака "+" или "-", следующего сразу за именем директивы. Директивы установки параметров. Эти директивы задают параметры, оказывающие влияние на процесс компиляции. Условные директивы. Эти директивы используются для управления компиляцией частями исходного текста, основанного на определении пользователем некоторых условий. Директивы компилятора размещаются непосредственно в исходном тексте программы. Кроме того, можно изменить установленные по умолчанию значения директив либо с помощью компилятора, использующего командную строку (ТРС.ЕХЕ), либо путем фиксации соответствующей опции в меню выбора возможностей компилятора (Project/Options/Compiler). Директивы, которые содержатся в исходном тексте, отменяют принятые по умолчанию или ранее установленные значения директив.