- •2.2. Основные элементы и конструкции языка
- •2.2.2. Алфавит, слова, комментарии
- •Данные
- •Целочисленные типы
- •Логические типы
- •Вещественные типы
- •Массивы
- •Совместимость типов
- •Выражения и операции
- •Арифметические выражения и операции
- •Поразрядные операции
- •Логические операции и выражения
- •Операции со строками
- •Приоритеты операций
- •Операторы
- •Простые операторы
- •Операторы ввода и вывода.
- •Структурные операторы
- •Условные операторы
- •Операторы цикла
- •Структура Паскаль программы
- •Функции и процедуры
- •Процедуры
- •Функции
- •Параметры процедур и функций
- •Модули
- •Общая структура модуля
- •Компиляция и использование модулей
- •Стандартные модули
- •Работа с файлами
- •Общие правила работы с файлами.
- •Текстовые файлы
- •Примеры задач
дится к выполнению операторов, заключенных в операторные скобки begin и end.
Функции и процедуры
В алгоритмах обработки данных достаточно часто встречаются одинаковые (или подобные) участки. Например, расчет по одной и той же формуле в различных местах программы или неоднократное использование вычислительного процесса, описывающего решения системы уравнений и т.п. Паскаль позволяет выделять фрагменты программы во вспомогательные алгоритмы (процедуры), поэтому язык Паскаль называют процедурно-ориентированным. Это позволяет писать хорошо структурированные программы. Структурированные программы обычно проще в понимании и отладке.
В практическом программировании такие вспомогательные алгоритмы удобно оформлять в виде самостоятельных блоков операторов – подпрограмм (процедур или функций). В том месте программы, где необходимы вычисления описанные в подпрограммах, записываются обращения к процедурам или функциям.
По характеру оформления процедуры и функции разделяются на:
Библиотечные процедуры и функции. Они могут храниться в специальных библиотеках на магнитных дисках с тем, чтобы любой пользователь мог вызывать их по мере необходимости и "встраивать" в соответствующие участки своей программы. Библиотечные процедуры и функции, как правило, разрабатываются квалифицированными программистами и обеспечивают надежные результаты.
Процедуры и функции, определяемые пользователем. Эти процедуры и функции определяются (описываются) пользователем в теле его программы и могут быть ис-
пользованы только в той программе, где они определены.
Вызов процедуры на выполнение осуществляется с помощью специального оператора по ее имени. Вызов функции осуществляется простым включением ее имени в любое выражение при условии согласованности типов. Описание процедур и функций должно предшествовать их вызову и располагается перед началом основной программы. Нельзя вызывать на выполнение те подпрограммы, которые содержатся внутри других процедур и функций.
Обмен значениями данных между процедурами (функциями) и программой пользователя осуществляется с помощью формальных и фактических параметров.
При описании подпрограммы список формальных параметров размещается в круглых скобках после имени подпрограммы. В теле этой подпрограммы имена формальных параметров используются только для описания алгоритма вычисления. При вызове подпрограммы в оператор вызова включается имя подпрограммы, после которого в круглых скобках перечисляются фактические параметры – те значения или переменные которые передаются подпрограмме при каждом обращении к ней. Списки фактических и формальных параметров должны быть согласованы по количеству, порядку следования и типам параметров. Другими словами в подпрограмме используются формальные параметры как «псевдонимы» фактических параметров для описания сути вычислений, а при обращении к этой процедуре формальные параметры получают конкретные значения соответствующих им фактических параметров.
Формальные параметры подразделяются на параметры-значения и параметрыпеременные. Параметры-значения используются только для передачи значений данных подпрограмме. Изменения значений таких формальных параметров при выполнении подпрограммы никак не влияет на значения соответствующих фактических параметров. Поэтому соответствующие им фактические параметры могут быть как переменными, так и константами.
59
Параметры-переменные используются как для передачи значений данных подпрограмме, так и для передачи результатов от подпрограммы программе пользователя. Формальным параметрам-переменным должны соответствовать фактические парамет- ры-переменные. Любые изменения значений формальных параметров-переменных непременно ведут к изменению значений соответствующих фактических параметровпеременных.
Описание процедуры |
Формальные параметры |
|
|
|
|
Primer |
Параметры |
Параметры |
|
||
|
константы |
переменные |
procedure Primer (A,B,C:Real; var D,E:Real);
Обращение к процедуре
Primer
Primer (X,Y,0.25,W,Z);
Фактические параметры
Процедуры
Описание процедуры включает в себя:
заголовок процедуры, состоящий из служебного слова procedure, идентификатора (имени), списка формальных параметров (если они имеются).
блок описания локальных переменных используемых в данной процедуре;
блок операторов, реализующий данную процедуру.
Формат описания процедуры:
procedure имя_процедуры(формальные параметры); {блок описаний если необходимо}
begin
{блок операторов} end;
Пример оформления процедуры нахождения корней квадратного уравнения:
procedure Koren(A,B,C: Real; var X1, X2: Real); var
D: Real; begin
D := B*B - 4*A*C; if D >= 0 then
begin
X1 := (-b - sqrt(D))/2/A;
X2 := (-b + sqrt(D))/2/A; end
else
WriteLn(‘Нет вещественных корней’);
end;
В теле вызывающей программы для обращения к процедуре записывается ее идентификатор (имя) и (в скобках) список фактических параметров.
Например:
60
{ Описание процедуры Koren } var
AA,BB,CC : Real;
XX1, XX2 : Real; begin
Koren(1.0, 5.4, 8.9, XX1, XX2);
WriteLn(‘ X1 = ‘,XX1:8:3, ‘ X2 = ‘,XX2:8:3); AA := 2.8; BB := 4.9; CC := -5.1;
Koren(AA, BB, CC, XX1, XX2);
WriteLn(‘ X1 = ‘,XX1:8:3, ‘ X2 = ‘,XX2:8:3); end.
В приведенном фрагменте программы предполагается, что процедура Koren описана непосредственно перед разделом var программы. В самой программе к процедуре Koren обращаются дважды. В первом случае невозвращаемыми фактическими параметрами являются константы, а во втором переменные.
Функции
Основное отличие функции от процедуры заключается в том, что возвращаемый результат присваивается имени функции как переменной. Но результаты расчета можно возвращать (как в процедурах) используя так же аппарат формальных и фактических параметров.
Описание функции включает в себя:
заголовок функции, состоящий из служебного слова function, идентификатора (имени), списка формальных параметров (если они имеются), символа двоеточие и указателя типа функции, связываемого с именем функции.
блок описания локальных переменных используемых в данной функции;
блок операторов, реализующий данную функцию.
Формат описания функции:
function имя_функции(формальные параметры):тип_функции; {блок описаний если необходимо}
begin
{блок операторов} имя_функции := значение;
end;
Пример оформления и использования функции возведения числа X в нецелую степень N:
var
XX, YY, M : Real;
function Step(X:Real; N:Real):Real; begin
Step:=exp(N*Ln(X)); end;
begin
XX:=3.5;
M:=0.25;
YY:=Step(XX,M); Writeln(‘Y= ’,YY:8:3);
end.
Напомним, что функция отличается от процедуры только тем, что функция возвращает вычисленное значение, посредством присвоения его имени функции.
61
