Язык Паскаль относится к процедурно-ориентированным языкам высокого уровня. Разработан американским ученым Никласом Виртом в 1971г. в качестве языка для обучения программированию. Базой при разработке явился язык Алгол.
В настоящее время он получил широкое распространение по ряду объективных причин.
Во-первых, по своей идеологии Паскаль наиболее близок к современной методике и технологии программирования. В частности, он достаточно полно отражает идеи структурного программирования, что довольно хорошо видно даже из основных управляющих структур языка.
Во-вторых, Паскаль хорошо приспособлен для применения технологии разработки программ сверху-вниз (пошаговой детализации).
В-третьих, Паскаль содержит большое разнообразие различных структур данных, что обеспечивает простоту алгоритмов, а следовательно снижение трудоемкости при разработке программ.
Структура программы на языке Паскаль.
Синтаксически программа на языке Паскаль делится на 2 части: заголовок и программный блок.
Паскаль с нуля [ч3]. Константы и ввод данных
Блок программы состоит из описательной и исполнительной частей (описательная часть предшествует исполнительной части) и включает следующие разделы:
LABEL ; — раздел описания меток
CONST ; — раздел описания констант
TYPE ; — раздел описания типов
VAR ; — раздел описания переменных
PROCEDURE ; — раздел описания
FUNCTION ; процедур и функций
Текст программы записывается в виде строк длиной не более 127 символов. В Турбо Паскале порядок следования разделов описаний произвольный и каждый из разделов может повторяться несколько раз или отсутствовать. Раздел операторов (начинается с BEGIN и заканчивается END) состоит из операторов, разделенных точкой с запятой. Исполнительная часть программы является обязательной, может быть единственной частью программы.
Видом работы компилятора можно управлять директивами. Их включают в исходный текст в виде комментариев со специальным синтаксисом. Если процедура или функция хранятся в виде отдельного файла, то для включения их описания в исходный текст программы компилятору задается директива INCLUDE следующего вида: >, которая должна быть помещена в разделе описаний процедур и функций
Оператор присваивания.
Наиболее простым и часто используемым оператором языка является оператор присваивания: : = ;
Выражение – это формула для вычисления значения. Она образуется из операндов, соединенных знаками операций и круглыми скобками. В качестве операндов могут выступать переменные, константы, указатели функций.
Тип переменной в левой части оператора присваивания обычно должен совпадать с типом значения выражения в правой части. Возможны случаи несовпадения типов, например, когда слева переменная вещественного типа, а справа выражение целого типа. Выражения являются составной частью операторов.
Составной оператор
Важным инструментом в Турбо-Паскале является понятие составного оператора. Составной оператор представляет собой последовательность инструкций, заключенную в операторные скобки Begin. End. Перед ключевым словом End точку с запятой можно опускать. Благодаря этому понятию, можно в качестве одного действия в операторах ветвления и цикла записывать последовательность операторов.
Паскаль с нуля [ч7]. Одномерные массивы.
В нашем примере в операторе If для A[I] > Max выполняются два оператора присваивания в рамках одного составного оператора.
4. Понятие процедуры и функции в Паскале. Их назначение, применение, варианты размещения в программе
Для реализации многократно повторяющихся участков вычислений и для обеспечения модульности программ в языке Турбо Паскаль предусмотрена возможность использования процедур и функций.
Процедура — это поименованное сложное действие, которое представляет собой совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов.
Процедура или функция (общее название — подпрограмма) определяется в разделе описаний основной программы или другой процедуры(функции). Процедура(функция) имеет ту же структуру, что и основная программа, т.е. состоит из заголовка, описательной части и выполняемой части.
Синтаксис заголовка процедуры:
PROCEDURE PR1 (A,B,C: INTEGER; VAR S: REAL);
— Здесь PR1 – имя процедуры, а А,В,С,S – имена переменных, являющихся параметрами.
В отличие от основной программы заголовок в процедуре обязателен, но завершается процедура не точкой, а точкой с запятой. Описание процедуры выполняется с формальными параметрами. Оператор процедуры служит для вызова процедуры из основной программы или из другой процедуры(функции).
Вызов осуществляется в следующей форме:
Таким образом, для приведенного заголовка процедуры можно написать такой оператор вызова:
Формат списка параметров в заголовке процедуры и при вызове процедуры отличаются. При вызове переменные, константы или выражения следуют через запятую, а в заголовке запись переменных напоминает объявление переменных в разделе описания переменных. Для всех элементов списка должен быть указан тип данных. Несколько переменных, отнесенных к одному типу, пишутся через запятую, а группы переменных различного типа отделяются точкой с запятой. После обращения к процедуре управление передается на выполнение следующего за вызовом процедуры оператора.
Функция предназначена для вычисления какого-либо одного значения и используется в выражениях аналогично стандартным функциям.
Синтаксис заголовка функции:
FUNCTION PRF (A,B,C: INTEGER): REAL;
Отличие описания функции от процедуры:
• результатом обращения к функции может быть одно единственное значение;
• идентификатор результата не указывается в списке формальных параметров;
• в выполняемой части функции, хотя бы один раз, имени функции должно быть присвоено значение результата (чаще всего перед выходом из функции);
• после списка формальных параметров задается тип результата;
• после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Для вызова функции используется указатель функции (имя функции со списком фактических параметров), который обязательно должен быть частью какого-либо выражения (входить в правую часть оператора присваивания, присутствовать в списке данных оператора вывода, в логическом выражении условного оператора и т.д.). Для приведенного заголовка функции вызов функции может быть осуществлен одним из следующих способов:
Writeln (PRF (A,B,C));
If PRF (A,B,C)>20 then K=K+1;
Правила построения процедуры, размещение ее в программе обращение к ней из вызывающей программы. Обмен информацией между процедурой и вызывающей программой: понятие формального и фактического параметра. Технологии передачи параметров – по ссылке и по значению. Применение этих технологий
Процедура — это поименованное сложное действие, которое представляет собой совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов.
Синтаксис заголовка процедуры:
Например: PROCEDURE PR1 (A,B,C: INTEGER; VAR S: REAL);
— Здесь PR1 – имя процедуры, а А,В,С,S – имена переменных, являющихся параметрами.
В отличие от основной программы заголовок в процедуре обязателен, но завершается процедура не точкой, а точкой с запятой. Описание процедуры выполняется с формальными параметрами. Оператор процедуры служит для вызова процедуры из основной программы или из другой процедуры(функции).
Вызов осуществляется в следующей форме:
Таким образом, для приведенного заголовка процедуры можно написать такой оператор вызова: PR1 (A,B,C,S);
Формат списка параметров в заголовке процедуры и при вызове процедуры отличаются. При вызове переменные, константы или выражения следуют через запятую, а в заголовке запись переменных напоминает объявление переменных в разделе описания переменных. Для всех элементов списка должен быть указан тип данных. Несколько переменных, отнесенных к одному типу, пишутся через запятую, а группы переменных различного типа отделяются точкой с запятой. После обращения к процедуре управление передается на выполнение следующего за вызовом процедуры оператора.
При описании процедуры (функции) в ее заголовке могут быть указаны параметры следующих видов:
При записи параметров необходимо помнить:
— число формальных и фактических параметров должно быть одинаково;
— порядок следования и тип фактических параметров должен совпадать с порядком и типом соответствующих формальных параметров;
— идентификаторы формальных и фактических параметров могут совпадать;
— формальные параметры в языке Турбо Паскаль в заголовке находятся вместе с описаниями и объявлять их в разделе описаний процедуры(функции) не требуется;
— формальные параметры должны иметь простые или ранее определенные типы.
При передаче в подпрограмму массива его тип объявляют предварительно в разделе описания типов TYPE.
TYPE TV=ARRAY [1..30] OF INTEGER;
TM=ARRAY [1..20,1..20] OF REAL;
PROCEDURE TOP (A:TM; VAR B: TV; N: INTEGER);
Здесь описаны два типа массивов. TV – для одномерного массива и TM для двумерного массива. Затем в списке формальных параметров для переменных А и В используются эти ранее определенные типы при описании соответственно матрицы и вектора.
Формальные параметры – данные, с которыми работает подпрограмма (ПП). Это внутренние данные для ПП. Они перечисляются в заголовке ПП и связаны с фактическими параметрами.
Фактические параметры – данные, передаваемые в ПП и возвращаемые из нее. Это внешние для ПП данные, с которыми имеет дело вызывающая часть программы. В ПП им соответствуют формальные параметры. Указываются в списке фактических параметров при обращении к ПП.
Список параметров, задаваемых в заголовке процедуры или функции, обеспечивает связь подпрограммы с вызывающей программой. Через него в подпрограмму передаются исходные данные и возвращается результат (в процедуре). В языке Турбо Паскаль предусмотрены два принципиально отличающихся механизма передачи параметров: по значению и по ссылке.
Параметры-значения.
При передаче параметров по значению в стеке, в котором осуществляется выделение памяти под внутренние (локальные) переменные подпрограммы, выделяется дополнительная память, в которую копируются значения соответствующих фактических параметров. В вызывающей программе в качестве аргумента подпрограммы для параметра-значения может использоваться не только переменная, но и выражение.
После завершения работы подпрограммы выделенная этим параметрам память становится недоступной, поэтому передача параметров по значению не может использоваться в подпрограммах для получения результатов.
Параметры-переменные.
При вызове по ссылке в подпрограмме память под передаваемые переменные не отводится. В подпрограмму передается не значение переменной, а ссылка на место в памяти соответствующего фактического параметра. Подпрограмма, выполняющая некоторые действия с этой переменной, в действительности производит действия с соответствующим фактическим параметром, поэтому после выполнения процедуры, изменения, выполненные над этой переменной, сохраняются. Перед записью параметров-переменных в списке формальных параметров указывается ключевое слово VAR (действует до «; «). Для вычисляемых результатов могут быть использованы только параметры-переменные.
Формальным параметрам-переменным не могут соответствовать в качестве фактических значений константы или выражения,так как они не имеют адреса для передачи.
В качестве параметров-переменных могут быть использованы массивы и строки открытого типа, у которых не задаются размеры. Открытый массив представляет собой формальный параметр подпрограммы, описывающий базовый тип элементов, но не определяющий его размерность и границы. Индексация элементов в этом случае начинается с нуля. Верхняя граница открытого массива возвращается функцией HIGH.
Правила построения функции в Паскале, размещение ее в программе, обращение к ней из вызывающей программы. Обмен информацией между функцией и вызывающей программой: понятие формальных параметров, их описание, особенности технологии возврата результата
Функция предназначена для вычисления какого-либо одного значения и используется в выражениях аналогично стандартным функциям.
Синтаксис заголовка функции:
FUNCTION PRF (A,B,C: INTEGER): REAL;
Формальные параметры – данные, с которыми работает подпрограмма (ПП). Это внутренние данные для ПП. Они перечисляются в заголовке ПП и связаны с фактическими параметрами.
Отличие описания функции от процедуры:
• результатом обращения к функции может быть одно единственное значение;
• идентификатор результата не указывается в списке формальных параметров;
• в выполняемой части функции, хотя бы один раз, имени функции должно быть присвоено значение результата (чаще всего перед выходом из функции);
• после списка формальных параметров задается тип результата;
• после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Для вызова функции используется указатель функции (имя функции со списком фактических параметров), который обязательно должен быть частью какого-либо выражения (входить в правую часть оператора присваивания, присутствовать в списке данных оператора вывода, в логическом выражении условного оператора и т.д.). Для приведенного заголовка функции вызов функции может быть осуществлен одним из следующих способов:
Writeln (PRF (A,B,C));
If PRF (A,B,C)>20 then K=K+1;
7. Сравнительный анализ возможностей процедуры и функции. Возможности преобразования процедуры в функцию и наоборот
Процедура — это поименованное сложное действие, которое представляет собой совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов.
Синтаксис заголовка процедуры: PROCEDURE < имя процедуры >[( )];
Функция предназначена для вычисления какого-либо одного значения и используется в выражениях аналогично стандартным функциям.
Размещение:
Процедура или функция (общее название — подпрограмма) определяется в разделе описаний основной программы или другой процедуры(функции). Процедура(функция) имеет ту же структуру, что и основная программа, т.е. состоит из заголовка, описательной части и выполняемой части.
Отличие описания функции от процедуры:
· результатом обращения к функции может быть одно единственное значение;
· идентификатор результата не указывается в списке формальных параметров;
· в выполняемой части функции, хотя бы один раз, имени функции должно быть присвоено значение результата (чаще всего перед выходом из функции);
· после списка формальных параметров задается тип результата;
· после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Преобразование процедуры в функцию:
Только если на выходе процедуры 1 результат
PROCEDURE P1 (A,B,C: Integer; VAR Sum: Integer)
Преобразование функции в процедуру: ВОЗМОЖНО ВСЕГДА
Источник: infopedia.su
Структура паскаль-программы
В заголовке программы, начинающемся служебным словом program (программа), данной программе дается некоторое имя (которое внутри программы не имеет какого-либо смысла и не может быть использовано), вслед за которым в круглых скобках задается список имен тех файлов, через которые программа взаимодействует с внешним миром:
До подробного рассмотрения понятия будем использовать только стандартные файлы системного ввода и вывода — input и output, с которыми уже познакомились в главе 1.
Пример заголовка программы:
Тело программы
Основной частью программы является ее тело — блок. В общем случае блок состоит из шести разделов, которые должны следовать в строго определенном порядке:
Главное назначение программы — задать те действия, которые должна выполнить машина по обработке данных. Такие действия задаются с помощью операторов, так что раздел операторов является основным разделом и обязательно должен присутствовать в любой программе. Предшествующие ему разделы, каждый из которых может отсутствовать (точнее, быть пустым), носят характер «объявлений» (описаний), с их помощью определяются те программные объекты и их свойства, которые будут использоваться в операторах для задания правил обработки данных. Еще раз отметим, что если эти разделы присутствуют, то порядок их следования в программе может быть только таким, как это указано в определении понятия .
меток.
Любой оператор программы можно выделить среди остальных операторов, записав перед ним через двоеточие метку. Такой оператор называется помеченным оператором. Оператор не может быть помечен более чем одной меткой, а все метки операторов должны быть различны. Метка выполняет роль имени помеченного оператора, так что на такой оператор можно сослаться путем указания его метки, например в операторах перехода, которые сами задают своих преемников. В паскале в качестве меток используются неотрицательные целые числа (т.е. целые без знака) из диапазона [О, 9999J, например:
Любая метка, используемая в программе, должна быть предварительно объявлена путем ее описания в разделе меток. Этот раздел открывается служебным словом label (метка), вслед за которым перечисляются все те целые без знака, которые в теле программы используются в качестве меток операторов
Поскольку все используемые метки должны быть описаны в разделе меток и в дальнейшем могут встретиться только в определенных контекстах, не может возникнуть неоднозначной трактовки того или иного целого без знака. Так что в качестве метки может применяться такое же целое без знака, что и операнд какой-либо арифметической операции, например:
В разделе меток объявляемые метки могут быть перечислены в произвольном порядке независимо от того, в каком порядке эти метки встречаются в разделе операторов, при этом любая метка в разделе меток может быть указана только один раз.
Пример непустого раздела меток:
Источник: bstudy.net