Цель урока:
- Изучить понятие "подпрограмма" и возможности реализации подпрограммы в языке программирования Паскаль.
- Научиться решать задачи на компьютере с использованием подпрограмм.
Что такое подпрограмма?
Подпрограмма — повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы.
Записывается однократно, а в соответствующих местах программы обеспечивается обращение к ней (ссылка).
В каком случае при повторении действий используют цикл, а в каком подпрограмму?
Если действия повторяются на одном этапе обработки информации, то используют цикл.
Если на различных , то подпрограммы.
Для чего используют подпрограммы?
Подпрограммы используют, чтобы сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости, уменьшить вероятность ошибок и облегчить процесс отладки программы.
Принцип нисходящего программирования
При создании программы для решения сложной задачи выполняется разделение этой задачи на подзадачи, этих подзадач – на более мелкие подзадачи и так далее до тех пор, пока подзадачи не станут легко программируемыми.
Для такой организации используются подпрограммы .
В языке Паскаль подпрограммы реализуются в виде процедур и функций.
При вызове процедуры или функции формальные параметры, указанные в заголовке, …
заменяются фактическими параметрами в порядке их следования.
Формальные параметры — это
переменные , формально присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.
Фактические параметры — это
реальные объекты программы , заменяющие в теле процедуры при ее вызове формальные параметры.
Соответствие между фактическими и формальными параметрами должно быть следующим:
- число фактических параметров должно быть равно числу формальных параметров;
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
program primer1;
procedure okl;
begin
writeln (‘ Это подпрограмма. ’);
end;
procedure ok2;
begin
writeln (' Еще одна подпрограмма. ');
end;
begin
writeln (‘ Привет !’);
okl ;
writeln ('Снова привет!');
okl ;
writeln ('А это что такое?');
ok 2;
end .
Привет!
Это подпрограмма.
Снова привет!
Это подпрограмма.
А это что такое?
Еще одна подпрограмма.
y z:=y z:=x max(m1,c,m) Вывод m выход ( z ) x, y, z - Формальные параметры конец a, b, c - Фактические параметры " width="640"
2. Найти большее из трех данных чисел, используя подпрограмму нахождения большего из двух.
Основной алгоритм
I. Используем процедуру
начало
Вспомогательный алгоритм
Ввод
a, b, c
max ( x, y )
да
нет
max(a,b,m1)
xy
z:=y
z:=x
max(m1,c,m)
Вывод
m
выход ( z )
x, y, z - Формальные параметры
конец
a, b, c - Фактические параметры
y then z:=x else z:=y end; begin w riteln( ‘a=’ ); readln ( a ); w riteln( ‘b=’ ); readln ( b ); w riteln( ‘c=’ ); readln ( c ); max ( a, b, m1 ); max ( m1, c, m ); w riteln (‘ max= ', m ); end. параметры переменные параметры значения m1 – большее из a и b m – большее из m1 и c x, y, z – локальные переменные, a, b, c, m, m1 - глобальные переменные " width="640"
2. Найти большее из трех данных чисел, используя подпрограмму нахождения большего из двух.
I. Используем процедуру
program pr2 ;
var a, b, c, m, m1 : real;
p rocedure max(x , y : real ; var z : real ) ;
begin
if xy then z:=x else z:=y
end;
begin
w riteln( ‘a=’ ); readln ( a );
w riteln( ‘b=’ ); readln ( b );
w riteln( ‘c=’ ); readln ( c );
max ( a, b, m1 );
max ( m1, c, m );
w riteln (‘ max= ', m );
end.
параметры переменные
параметры значения
m1 – большее из a и b
m – большее из m1 и c
x, y, z – локальные переменные,
a, b, c, m, m1 - глобальные переменные
y m:=max(max(a,b),c) max:=y max:=x Вывод m Выход ( max ) конец x, y, z - Формальные параметры a, b, c - Фактические параметры " width="640"
2. Найти большее из трех данных чисел, используя подпрограмму нахождения большего из двух.
II. Используем функцию
Основной алгоритм
Вспомогательный алгоритм
начало
Вход ( x, y )
Ввод
a, b, c
да
нет
xy
m:=max(max(a,b),c)
max:=y
max:=x
Вывод
m
Выход
( max )
конец
x, y, z - Формальные параметры
a, b, c - Фактические параметры
y then max:=x else max:=y end; begin w riteln( ‘a=’ ); readln ( a ); w riteln( ‘b=’ ); readln ( b ); w riteln( ‘c=’ ); readln ( c ); m:=max ( max(a, b), c ); w riteln (‘ max= ', m ); end. " width="640"
2. Найти большее из трех данных чисел, используя подпрограмму нахождения большего из двух.
II. Используем функцию
program pr2 ;
var a, b, c, m, m1 : real;
function max(x , y : real ) : real;
begin
if xy then max:=x else max:=y
end;
begin
w riteln( ‘a=’ ); readln ( a );
w riteln( ‘b=’ ); readln ( b );
w riteln( ‘c=’ ); readln ( c );
m:=max ( max(a, b), c );
w riteln (‘ max= ', m );
end.
Вывести на экран 5 строк примерно такого текста:
- Вывести на экран 5 строк примерно такого текста:
Привет, Катя! Поздравляю тебя с новым годом!
Привет, Таня! Поздравляю тебя с новым годом!
Привет, Вася! Поздравляю тебя с новым годом!
Привет, Коля! Поздравляю тебя с новым годом!
Привет, Боря! Поздравляю тебя с новым годом!
В программе использовать процедуру для вывода текста.
program primer;
var s: string;
procedure ok;
begin
writeln (‘ Привет ’ , s,’! Поздравляю тебя с новым годом! ’);
end;
begin
s:=‘ Катя ’;
ok ;
s:=‘ Таня ’;
ok ;
s:=‘ Вася ’;
ok ;
s:=‘ Коля ’;
ok ;
s:=‘ Боря ’;
ok ;
end .
y x max:=y max:=x min:=y min:=x Выход ( max ) Выход ( min ) " width="640"
Найти , используя подпрограммы нахождения большего и меньшего из двух чисел.
Вспомогательные алгоритмы
Вход ( x, y )
Вход ( x, y )
нет
да
да
нет
xy
x
max:=y
max:=x
min:=y
min:=x
Выход
( max )
Выход
( min )
y then max:=x else max:=y end; function min(x , y : real ) : real; begin if x end; begin w riteln( ‘a=’ ); readln ( a ); w riteln( ‘b=’ ); readln ( b ); w riteln( ‘c=’ ); readln ( c ); m:=(2*max ( a, b)+min(a+3,b))/min(c,a-b ); w riteln (‘ max= ', m ); end. начало Ввод a, b, c Вывод m конец " width="640"
Основной алгоритм
program pr2 ;
var a, b, c, m : real;
function max(x , y : real ) : real;
begin
if xy then max:=x else max:=y
end;
function min(x , y : real ) : real;
begin
if x
end;
begin
w riteln( ‘a=’ ); readln ( a );
w riteln( ‘b=’ ); readln ( b );
w riteln( ‘c=’ ); readln ( c );
m:=(2*max ( a, b)+min(a+3,b))/min(c,a-b );
w riteln (‘ max= ', m );
end.
начало
Ввод
a, b, c
Вывод
m
конец
y x max:=y max:=x min:=y min:=x Выход ( max ) Выход ( min ) " width="640"
Найти , используя подпрограммы нахождения большего и меньшего из двух чисел.
Вспомогательные алгоритмы
Вход ( x, y )
Вход ( x, y )
нет
да
да
нет
xy
x
max:=y
max:=x
min:=y
min:=x
Выход
( max )
Выход
( min )
Параметры - значения в основной программе не меняются.
Используются для передачи исходных данных в подпрограмму (отсутствует слово var ).
Параметры - переменные подпрограмма может изменить в основной программе.
Используется для определения результатов выполнения процедуры (обязательно var ).
- Локальные переменные объявляются внутри подпрограммы и доступны только ей самой, т.е. недоступны основной программе.
- Глобальные переменные объявляются в основной программе и доступны как программе, так и всем подпрограммам.