
IV. Процедуры
Процедура – это относительно самостоятельная часть программы, имеющая собственное имя. Процедура описывается перед основной программой.
Структура процедуры:
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);
Readln;
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); {вывод результата, полученного из процедуры}
Readln;
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, ’можно построить’)
else writeln(‘Треугольник со сторонами ’ x, ‘,’, y, ‘,’, z, ‘нельзя построить ‘)
End;
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);
Readln;
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); {вывод результата}
Readln;
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);
Readln;
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); {вызываем процедуру для проверки очередного числа}
Readln;
end.
Результат:
2 - prostoe
3 - prostoe
4 - sostavnoe
5 - prostoe
6 - sostavnoe
7 - prostoe
8 - sostavnoe
9 - sostavnoe
10 - sostavnoe
ЗАДАНИЯ
Создать процедуру для вычисления периметра и площади квадрата по длине его стороны.
Создать процедуру для вычисления объема и площади поверхности куба по длине его ребра.
Создать процедуру для вычисления длины окружности и площади круга по заданному значению радиуса. ( L= 2R, S=R2)
Создать процедуру для вычисления периметра и площади прямоугольника по длинам его сторон.
Создать процедуру для вычисления периметра и площади треугольника по длинам его сторон (
, a, b, c – стороны треугольника, p – полупериметр)
Создать процедуру для нахождения корней квадратного уравнения по его коэффициентам a,b,c.
Вводятся A, B, C, D. Поменять местами A и C, B и D, создав процедуру обмена значениями 2-х переменных.
Создать процедуру для вывода первых N членов арифметической прогрессии, заданной первым членом а и разностью d. С помощью этой процедуры вывести 8 первых членов прогрессии 1, 4, … и 10 первых членов прогрессии 24, 22, ….
Создать процедуру для вывода первых N членов арифметической прогрессии, заданной первым членом а и разностью d. С помощью этой процедуры вывести 5 первых членов прогрессии 3, 7, … и 7 первых членов прогрессии 14, 11, ….
Создать процедуру для вывода первых N членов арифметической прогрессии, заданной первым членом а и разностью d. С помощью этой процедуры вывести 7 первых членов прогрессии 12, 10, … и 9 первых членов прогрессии 2, 5, ….
Создать процедуру для вывода и нахождения суммы первых N членов арифметической прогрессии, заданной формулой an=2n+1.
Создать процедуру для вывода и нахождения суммы первых N членов арифметической прогрессии, заданной формулой an=3n-2.
Создать процедуру для вывода и нахождения суммы первых N членов арифметической прогрессии, заданной формулой an=5n-3.
Определить, какие из целых чисел от -3 до 8 являются решениями неравенства (x-5)(x+1)>0 (создать процедуру, определяющую является или не является данное целое число решением неравенства (x-5)(x+1)>0)
Определить, какие из целых чисел от -10 до 2 являются решениями неравенства (x+4)(x+1)<0 (создать процедуру, определяющую является или не является данное целое число решением неравенства (x+4)(x+1)<0)
Создать процедуру для вывода и подсчета суммы последовательных целых чисел от a до b. С помощью этой процедуры вывести и найти сумму целых чисел: 1) от 10 до 20; 2) от -5 до 15.
Создать процедуру для вывода таблицы значений функции y=sin 3x + 1 для х от a до b с шагом h. Вывести две таблицы: а) для х от 1 до 2 с шагом 0.1 и б) для х от 5 до 10 с шагом 0.5
Создать процедуру для вывода таблицы значений функции y=tg x + 1/x для х от a до b с шагом h. Вывести две таблицы: а) для х от 2 до 4 с шагом 0.2 и б) для х от 1 до 10 с шагом 0.5
Создать процедуру для вывода таблицы значений функции y= 3x2 + 1 для х от a до b с шагом h. Вывести две таблицы: а) для х от 1 до 2 с шагом 0.1 и б) для х от 2 до 5 с шагом 0.5
Создать процедуру для вывода таблицы значений функции y=sin (x + 1)2 для х от a до b с шагом h. Вывести две таблицы: а) для х от 2 до 3 с шагом 0.1 и б) для х от -2 до 3 с шагом 0.5