ПРОЦЕДУРЫ ПОЛЬЗОВАТЕЛЯ
Краткие теоретические сведения
Процедура – это относительно самостоятельная часть программы, имеющая соб- ственное имя. Процедура описывается перед основной программой.
Процедура возвращает результат через параметры, поэтому процедура является оператором.
Структура процедуры:
Procedure <имя_процедуры>(<формальные параметры>); -заголовок процедуры
Label <метки>;
Const <константы>; раздел объявления меток, констант, типов данных,
Type <типы данных>; переменных (может отсутствовать)
Var <переменные>; Begin
<операторы > - тело процедуры
End;
Вызов процедуры осуществляется из основной программы указанием ее имени. Различают формальные и фактические параметры. Параметры, указанные в заголовке процедуры называются формальными. Они определяют, как будет происходить обра- ботка конкретных значений этих параметров. Фактические параметры указываются при обращении к подпрограмме. При вызове подпрограммы значения фактических па- раметров автоматически передаются в переменные, являющиеся формальными па- раметрами. После чего начинается выполнение подпрограммы. Количество и тип формальных и фактических параметров должны совпадать.
Для передачи исходных данных в процедуру используются параметры- значения. Фактические параметры-значения могут быть константами, переменными, выражениями. Полученный в процедуре результат передается в основную программу с помощью параметров-переменных. В заголовке описания процедуры перед пара- метрами-переменными пишется Var.
Пример 1.
Создать процедуру вычисления среднего арифметического и среднего квадра- тичного натуральных чисел a и b.
Program pr1;
Var
a, b: integer;
SrAr, SrKv: real; {SrAr- среднее арифметическое, SrKv – среднее квадратичное}
Procedure Sredn(a,b:integer; Var SrAr, SrKv: real);
{a,b – входные данные (параметры-значения}
{SrAr, SrKv – результат выполнения процедуры (параметры-переменные)}
Begin {тело процедуры}
SrAr:=(a+b)/2; SrKv:=SQRT(a*b);
End;
BEGIN {основная программа}
Write('a='); Readln(a); {ввод a}
Write('b='); Readln(b); {ввод b}
{вызов процедуры и передача фактических параметров a,b }
Sredn(a, b, SrAr, SrKv);
{вывод результата, полученного в процедуре}
Writeln(‘Ср. арифм.=', SrAr:6:2, ' Ср. квадр.е =', SrKv:6:2);
END.
Результат:
a=2 b=8
Ср. арифм.= 5.00 Ср. квадр.= 4.00
Пример 2.
Создать процедуру для вычисления периметра и площади прямоугольного тре- угольника по его катетам a, b.
Program pr2;
Var
a, b, p, s: real; { a, b- катеты, p - периметр, s - площадь }
Procedure Treug(a,b: real; Var p, s: real);
{a, b- входные данные(параметры-значения),}
{p, s-выходные данные(параметры-переменные)}
Begin
p:= a + b + Sgrt(a*a + b*b); {периметр треугольника с катетами a, b}
s:= a*b/2; { площадь треугольника с катетами a, b }
End;
Begin {основная программа}
Write('a, b =');Readln(a, b); {ввод исходных данных} Treug(a, b, p, s); {вызов процедуры и передача исходных данных a, b} Writeln('p=', p:4:1, ‘ s=’, s:4:1); {вывод результата, полученного из процедуры}
End.
Результат:
a, b= 3 4
p=12.0 s= 6.0
Пример 3.
Создать процедуру, определяющую возможность построения треугольника со сторонами x, y, z. Из чисел a,b,c,d выбрать тройки таких, которые позволяют постро- ить треугольник.
Для решения задачи используется «правило треугольника»: каждая сторона тре- угольника меньше суммы двух других сторон.
Program pr3;
Var
a,b,c,d: integer;
Procedure Treug(x, y, z:integer);
Begin
if (x<y+z) and (y<x+z) and (z<x+y)
then writeln (‘Треугольник со сторонами ‘, x, ‘,’, y, ‘,’, z, ’можно постро-
ить’)
ить ‘) End;
else writeln(‘Треугольник со сторонами ’ x, ‘,’, y, ‘,’, z, ‘нельзя постро-
Begin {основная программа}
Write('Введите a b c d: '); Readln(a,b,c,d); {ввод исходных данных}
{вызываем процедуру и проверяем возможность построения треугольника со сторо- нами a,b,c}
Treug(a,b,c);
{вызываем процедуру и проверяем возможность построения треугольника со сторо- нами a,b,d}
Treug(a,b,d);
{вызываем процедуру и проверяем возможность построения треугольника со сторо- нами a,c,d}
Treug(a,c,d);
{вызываем процедуру и проверяем возможность построения треугольника со сторо- нами b,c,d}
Treug(b,c,d);
end.
Результат:
Введите a b c d: 1 3 4 5
Треугольник со сторонами 1,3,4 нельзя построить Треугольник со сторонами 1,3,5 нельзя построить Треугольник со сторонами 1,4,5 нельзя построить Треугольник со сторонами 3,4,5 можно построить
Пример 4.
Упорядочить по возрастанию числа A, B, C, создав процедуру обмена значения- ми 2-х переменных.
Program pr4; Var
A, B, C: real;
Procedure Obmen(Var X,Y:real);
{X,Y являются и входными, и выходными данными}
Var
T: real; { T –вспомогательная переменная}
Begin
T:=X;
X:=Y;
Y:=T;
End;
begin {основная программа}
Write('A, B, C ='); Readln(A,B,C); {ввод исходных данных} If A>B then Obmen(A,B); {если A больше B, то производим их обмен} If A>C then Obmen(A,C); {если A больше С, то производим их обмен} If B>C then Obmen(B,C); {если В больше С, то производим их обмен} Writeln('A=', A:5:2,' B=', B:5:2,' C=', C:5:2); {вывод результата} end.
Результат:
A, B, C = 6 18 3
A= 3.00 B= 6.00 C= 18.00
Пример 5.
Создать процедуру для вывода первых N членов арифметической прогрессии, заданной значением первого члена а и разностью d. Вывести первые 7 членов про- грессии 2, 5, … (a=2, d=3) и первые 10 членов прогрессии 20, 19, ….(a=20, d= -1)
Program pr5;
Procedure progres(a,d,n:integer); Var
i: integer; {i – номер очередного члена прогрессии }
Begin
for i:=1 to n do {перебираем i от 1 до n}
begin
write(a,' '); {выводим очередной член прогрессии}
a:=a+d; {вычисляем следующий член прогрессии}
end; End;
begin {основная программа}
{вызов процедуры для вывода 7 членов арифметической прогрессии 2, 5,…}
progres(2,3,7); writeln;
{вызов процедуры для вывода 10 членов прогрессии 20,19,…}
progres(20,-1,10); end.
Результат:
2 5 8 11 14 17 20
20 19 18 17 16 15 14 13 12 11
Пример 6
Выяснить, какие натуральные числа от 2 до 10 являются простыми, а какие - со- ставными (создать процедуру, определяющую простым или составным является дан- ное число).
Число называется простым, если оно не имеет делителей кроме 1 и самого се- бя. Если у него есть другие делители, то число – составное.
Program pr6;
Var
i: integer;
Procedure prostoe(x:integer);
Var
k,n: integer; {n - возможные делители числа, k – количество делителей}
Begin
k:=0;
for n:=2 to x div 2 do {перебираем числа от 2 до x div 2 для поиска делителей}
if x mod n = 0 {если n –делитель числа x}
then k:=k+1; {увеличиваем количество делителей на 1}
if k=0 {если у числа нет делителей}
then writeln (x,' - prostoe') {то число простое}
else writeln (x,' - sostavnoe'); {иначе число составное}
End;
begin {основная программа}
for i:=2 to 10 do {перебираем числа от 2 до 10}
prostoe(i); {вызываем процедуру для проверки очередного числа}
end.
Результат:
1 - prostoe
2 - prostoe
3 - sostavnoe
4 - prostoe
5 - sostavnoe
6 - prostoe
7 - sostavnoe
8 - sostavnoe
9 - sostavnoe
Контрольные вопросы
1. Описание процедуры. Общая структура.
2. Как осуществляется вызов процедуры из основной программы?
3. Каким образом процедура передает результат в основную программу?
4. Что такое формальные и фактические параметры?
5. Какая взаимосвязь существует между формальными и фактическими парамет- рами?
6. Какие виды параметров могут быть указаны при описании процедуры или функции в ее заголовке?
7. Для чего используются параметры-значения?
8. Для чего используются параметры-переменные?
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.