Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
ПРОЦЕДУРЫ И ФУНКЦИИ
Подпрограмма - автономная часть программы, с помощью которой можно многократно производить одни и те же вычисления в различных местах программы, с разными исходными данными.
![]() |
Процедуры
Подпрограмма – многократно повторяющаяся часть программы, оформленная отдельно от основной программы.
Процедура – подпрограмма, которая может иметь несколько входящих и исходящих данных.
Функция - подпрограмма, которая может содержать несколько входных (и только) параметров, но результат получается только один. Результат функции обозначается тем же именем, которым и названа функция.
Преимущества использования процедур - уменьшение объем программы, сокращение времени на отладку.
Место расположения процедур в программах - между описанием переменных и началом программы (оператором Begin).
Последовательность выполнения программы
![]() |
Описание процедуры
Заголовок процедуры | Procedure имя (список параметров); |
Раздел описаний | label …; Var …; |
Раздел операторов процедуры | Begin … end; |
Описание функции
Заголовок процедуры | Function ИмяФ (список параметров): тип; |
Раздел описаний | label …; Var …; |
Раздел операторов процедуры | Begin … ИмяФ:=…; end; |
Глобальные и локальные переменные
Глобальные переменные – описанные в разделе описаний программы.
Локальные переменные – описанные в разделе описаний функций и процедур
Var a: integer; S: string; - глобальные переменные
Procedure New (f, g: Integer; k: string); - локальные переменные
Begin
…
End;
BEGIN
…
…
END.
Глобальные переменные сохраняют своё значение, как в основной части программы, так и во всех её функциях и процедурах
Локальные переменные хранят своё значение только в функциях и процедурах
Формальные и фактические переменные
Формальные переменные – описываемые в подпрограмме.
Фактические переменные – переменные, передаваемые в формальные переменные при вызове подпрограммы или которые создаются в самой подпрограмме.
Виды формальных параметров
Формальные переменные делятся на:
* параметры – значения;
* параметры – переменные.
Параметры-значения – получают значения из программы и используются в процедурах и функциях.
Параметры-переменные – получают значения из программы, используются в процедурах и функциях, при завершении подпрограммы, значения таких параметров возвращаются в программу.
Чтобы Параметр-значение стал Параметром-переменной, надо при описании перед параметром поставить слово Var.
Пример:
Procedure stl (len: integer); - параметры-значения.
Procedure stl (Var n: integer); - параметры – переменные.
Procedure stl (len: integer; Var n: integer); - параметры-значения и параметры – переменные.
Вызов подпрограмм
Вызов процедуры происходит по имени с указанием фактических параметров, например:
stl (а, n);
Вызов функции происходит по имени с указанием фактических параметров, и должен указывать место, куда следует передать ответ. Функция может использоваться в операторах присваивания, условных операторах
· K:= tan (а, n);
· Writeln ( cos(3) );
· if length(s) < 1 then writeln (‘Строка пустая');
Имена фактических параметров могут не совпадать с именами формальных параметров,
Тип фактической переменной должен соответствовать с типов формальной переменной.
Пример использования процедур:
Написать программу, которая выводит на экран строку, состоящую из заданного числа звездочек. Использовать процедуру.
Uses crt;
Var n: integer;
Procedure sterline (var len: integer);
Var i:integer;
Begin
For i:=1 to len do
Write (‘*’);
End;
Begin
Write(‘Введите количество звездочек’); Readln(n);
Sterline (n);
Readln;
End.
Пример использования функций:
Написать программу, которая с помощью функции сравнивает два целых числа и выводит результат сравнения в виде одного из знаков: >,<,=
Uses crt;
Var x1, x2: integer;
res: char;
Function Compare (a, b: integer): char;
Begin
If a>b then Compare:=’>’
else if a<b then Compare:=’<’
else Compare:=’=’;
End;
Begin
Writeln (‘Введите числа’);
Readln(x1, x2);
Res:=Compare(x1, x2);
Writeln(x1, res, x2);
Readln;
end.
Обработка массивов в подпрограммах
В подпрограмму можно передать не только отдельные переменные, но и массивы.
1) ОПИСАНИЕ ПОДПРОГРАММ, ПРИНИМАЮЩИХ МАССИВ В КАЧЕСТВЕ ВХОДЯЩИХ ПАРАМЕТРОВ
Чтобы передать массив в подпрограмму, необходимо, чтобы среди формальных переменных программы была переменная типа ARRAY.
Procedure WriteArrayI (a: array of integer);
Begin
end;
2) ФУНКЦИЙ С ТИПОМ МАССИВ НЕ СУЩЕСТВУЕТ
Нельзя создавать функцию, тип которой – массив.
Пример НЕДОПУСТИМОЙ ФУНКЦИИ
Function ReadArray : array [1..20] of integer;;
Begin
end;
3) ВЫЗОВ ПОДПРОГРАММЫ И ПЕРЕДАЧА В НЕЁ МАССИВА
Для вызова процедуры, имеющей среди формальных параметров – массив, достаточно написать её название и передать в качестве фактического параметра – переменную массива.
Var Mas : array [1..20] of integer;
…
Begin
…
WriteArrayI (Mas);
…
End.
4) ОСОБЕННОСТИ ОБРАБОТКИ МАССИВА, ПОЛУЧЕННОГО ПОДПРОГРАММОЙ
А) Вне зависимости от того, какую индексацию имел массив в программе, в подпрограмме массив будет начинаться с индекса 0.
Значит обращаться к первому элементу массива А, следует так: А[0].
Обращаться ко второму элементу массива следует так: А[1] и т. д.
Б) Чтобы определить индекс последней переменной массива следует воспользоваться функцией High.
Индекс последней переменной массива = High(A)
В) Чтобы обработать все элементы массива, можно пользоваться циклом, для этого понадобиться дополнительная переменная – счётчик. Эту переменную следует описать после заголовка процедуры, до её начала,
Начальное значение счётчика обычно соответствует первому номеру индекса массива – 0. Последнее значение счётчика обычно соответствует последнему элементу массива – High(a)
Пример:
Разработать процедуру, выводящую значения массива на экран
Var Mas: array [1..3] of integer;
Procedure WriteArrayI (a: array of integer);
Var i: integer;
Begin
For i:= 0 to High(a) do
Write (a[i]);
End;
Begin
Mas[1]:=6;
Readln(Mas[2]);
Mas[3]:=Mas[1]*Mas[2];
WriteArrayI (Mas);
End.
НЕКОТОРЫЕ ПРИМЕРЫ ПОДПРОГРАММ
Разработать функцию удаления символов из строки.
Var m, n, l: integer;
s, w: string;
Function Ddd(s: string; m, n: integer): string;
Var g1, g2, w: string; l, k: integer;
Begin
L:=length(s);
G1:=’’;
For k:=1 to m-1 do
g1:=g1+s[k];
G2:=’’;
For k:= m+n to L do
g2:=g2+s[k];
Ddd:=g1+g2;
End;
Begin
Readln(s); Readln (m, n);
W:=Ddd (s, m, n);
Writeln (w);
Readln;
end.
Разработать процедуру, читающую значения массива с клавиатуры
Var Mas: array [1..3] of integer;
Procedure ReadArrayI (var a: array of integer);
Var i: integer;
Begin
For i:= 0 to High(a) do
Readln (a[i]);
End;
Begin
ReadArrayI (Mas);
End.
Модули
Чтобы заново не писать в каждой программе одни и те же подпрограммы, можно группировать написанные подпрограммы в Модули и подключать эти модули к тем программам, где нужно использовать созданные ранее подпрограммы.
Так, например, можно создать модуль, содержащий в себе множество функций и процедур по работе с массивами. После этого, каждый раз как программисту понадобиться работать с массивами, ему достаточно подключить созданный модуль к своей программе и пользоваться встроенными в него функциями и процедурами.
Модуль (библиотека) – файл с программным кодом (представленным, как правило, функциями и процедурами).
Последовательность создания модуля
![]() |
Где надо писать текст модуля?
Файл модуля пишется в том же окне, где и все программы на Паскале (можно написать модуль и в текстовом редакторе «Блокнот», но тогда вы не сможете проверить модуль на ошибки).
Как откомпилировать модуль?
Когда текст модуля открыт в Паскале, нажать F9.
Где найти откомпилированный файл модуля?
После компиляции в той же папке где сохранён текст модуля появляется файл с расширением TPU. Это и есть файл модуля.
Куда нужно поместить файл модуля, чтобы его можно было подключать к программам?
Файл модуля размещают в каталоге, который указан в меню Паскаля Option à Directories à Unit Directories
СТРУКТУРА МОДУЛЯ
Unit имя;
Interface {меню модуля}
Uses
Const
Type
Var
Procedure
Function
Implementation {раздел описания модуля}
Uses
Label
Const
Type
Var
Procedure
Function
Begin {раздел запуска модуля}
…
End.
Раздел UNIT
Содержит имя модуля. Имя модуля не должно превышать 8 символов и должно совпадать с именем файла модуля.
Раздел INTERFACE
Меню модуля. Содержит модули, константы, типы, переменные, заголовки процедур и функций, доступные из программы, к которым будет подключаться модуль.
Раздел IMPLEMENTATION
Раздел описания модуля. Содержит все используемые модулем константы, типы, переменные, процедуры и функции. Если что-то описано в разделе Implementation, но не представлено в разделе Interface (меню), то такая подпрограмма является локальной и доступна только внутри модуля.
Раздел Инициализации модуля
Может отсутствовать (тогда от него остаётся лишь « End. »). В разделе содержаться команды, которые выполняются при включении модуля. Таким образом, программа, к которой подключается модель, вначале выполняет команды из этого раздела и потом начинает выполнять собственные команды.
ПРИМЕР: Напишем текст модуля, для работы с прямоугольным треугольником
Unit RTrian;
Interface
Function Hypotenuse (c1, c2: real): real;
Function Cathetus (c1, Hip: real): real;
Function SRTriangle (c1,c2: real): real;
Function HRTriangle(c1, c2: real): real;
Implementation
Function Hypotenuse (c1, c2: real): real;
Begin Hypotenuse:=SQRT(c1*c1+c2*c2); End;
Function Cathetus (c1, Hip: real): real;
Begin Cathetus:=SQRT(Hip*Hip – c1*c1) End;
Function SRTriangle (c1, c2: real): real;
Begin SRTriangle:=c1*c2/2; End;
Function HRTriangle(c1, c2: real): real;
Begin HRTriangle:=c1*c2/Hypotenuse(c1,c2); End;
End.
Сохраним созданный файл на диске под именем “RTrian. pas”. Нажмём F9. В папке, где был сохранён текст модуля, найдём файл «RTrian. tpu» - это наш модуль. Если перенесём модуль «RTrian. tpu» в папку, указанную в разделе Option à Directories à Unit Directories, то можно использовать модуль в любых программах.
Программа рассчитывает высоту прямоугольного треугольника, опущенную на гипотенузу, на основе величины одного из катетов и гипотенузы.
Uses crt, RTrian; {подключаем модуль}
Var a, b, Hipot, h :real;
Begin
Clrscr; Readln (a, Hipot); {читаем катет и гипотенузу}
b:= Cathetus (a, Hipot); {находим второй катет, пользуясь нашим модулем}
h:= HRTriangle(a,b); {находим высоту, пользуясь нашим модулем}
Writeln (‘Высота = ‘, h);
Readkey;
End.





