Подпрограммы в Подпрограммы в ПаскалеПаскале
(Технология нисходящего (Технология нисходящего программирования)программирования)
Технология нисходящего Технология нисходящего программированияпрограммирования
Базируется на методе программирования «сверху – вниз» (иное название – метод пошаговой детализации).
Основа метода – разбиение исходной задачи на ряд подзадач. Решение отдельного фрагмента сложной задачи может представлять собой самостоятельный программный блок, называемый подпрограммой.
ПОДПРОГРАММА – это обособленная, оформленная в виде отдельной синтаксической конструкции и снабжённая именем часть программы.
В основной программе указываются только имена подпрограмм. Вызовы подпрограмм возможны неоднократно из разных участков программы.
Виды подпрограммВиды подпрограммПРОЦЕДУРЫ
СЛУЖАТ ДЛЯ ЗАДАНИЯ СОВОКУПНОСТИ ДЕЙСТВИЙ , НАПРАВЛЕННЫХ НА ИЗМЕНЕНИЯ ВНЕШНЕЙ ПО ОТНОШЕНИЮ К НИМ ПРОГАММНОЙ ОБСТАНОВКИ.
ФУНКЦИИЯВЛЯЮТСЯ ЧАСТНЫМ СЛУЧАЕМ ПРОЦЕДУР. ОБЯЗАТЕЛЬНО ВОЗВРАЩАЮТ В ТОЧКУ ВЫЗОВА ОСНОВНОЙ ПРОГРАММЫ ЕДИНСТВЕННЫЙ РЕЗУЛЬТАТ КАК ЗНАЧЕНИЕ ИМЕНИ ЭТОЙ ФУНКЦИИ.
определ
ение
write, writeln,
Read, readln…
Sqr, sqrt, sin, cos …
Встр
оен
ны
е (станд
артн
ые)
Kvur (ax2 + c)
Оп
ред
елён
ны
е по
ль
зов
ателем
flaw
ПРОЦЕДУРЫПРОЦЕДУРЫОписание:Описание:
PROCEDURE <имя>(<служебная информация>);
< блок описаний>;
BEGIN
<тело процедуры>
END;
Имя процедуры – правильный идентификатор
1. Состоит из латинских букв и цифр.
2. Начинается с латинской буквы.
Пример1.
Program prim;Uses crt;Procedure a;Begin write(‘I am procedure’); end;BEGIN clrscr; writeln(‘ Where is a procedure?’); a;Writeln; write(‘good’);Readlnend.
Задания
1. Используя оператор выбора и процедуры, написать программу, вызывающую одну из трех страниц:
1 – справка;
2 – тест;
3 – выход.
2. Используя цикл и процедуры, «построить» забор.
Оператор выбора
Позволяет выбрать одно из нескольких продолжений программы.
CASE < ключ выбора> OF <список выбора>
Else <оператор> end;
Ключ выбора – выражение, значение которого представлено порядковым типом.
Список выбора
<Константа выбора>:<оператор>;
Работа оператора выбора Вычисляется значение <ключ выбора>; В последовательности операторов
<список выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению <ключ выбора>. Найденный оператор выполняется, после чего оператор выбора завершает работу.
Используя оператор выбора и процедуры, написать программу, вызывающую одну из трех страниц:
1 – справка;2 – тест;
3 – выход.
program menu1;uses crt;varm:integer;procedure sprav;begintextbackground(4);clrscr;gotoxy(38,12);write('spravka')end;procedure test;begintextbackground(2);clrscr;gotoxy(38,12);write('test')end;
procedure vixod;begintextbackground(5);clrscr;gotoxy(38,12);write('vixod')end;BEGIN textbackground(0); clrscr;write('vibor1\2\3=');readln(m);case m of1:sprav;2:test;3:vixod; end;readln; END.
procedure ekran(c:byte;st:string);begintextbackground(c);textcolor(15);clrscr;gotoxy(38,12);write(st)end;begin textbackground(0); clrscr;write('vibor1\2\3=');readln(m);case m of1:ekran(4,'cprav');2:ekran(2,'test');3:ekran(5,'vixod'); end;readln; end.
Что включает в себя Что включает в себя служебная информацияслужебная информация
PROCEDURE <имя>(<список формальных параметров>: <тип>);< блок описаний>;BEGIN <тело процедуры>END;
Вызов процедуры
Необходимо указать имя и список фактических параметров.
Количество и тип формальных и фактических параметров должны совпадать.
Формальные и фактические Формальные и фактические параметрыпараметры
При вызове процедуры её формальные параметры заменяются на фактические в порядке их следования.
Фактические параметры – это параметры, которые передаются процедуре при обращении к ней (т.е. записываются при вызове процедуры в основной программе)
Формальные параметры – это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия.
Между формальными и фактическими параметрами должно быть полное соответствие:
формальных и фактических параметров должно быть одинаковое количество;
Порядок следования фактических и формальных параметров должен быть один и тот же;
Тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.
Формальные параметры
Параметры-значения
Параметры-переменные
Параметры-процедуры
Параметры-функции
Параметры-переменные – это формальные параметры, перед которыми стоит служебное слово VAR. Они передаются по ссылке (передаётся адрес фактического параметра) тогда, когда необходимо передать некоторые новые значения в точку вызова процедуры из программы.
Параметры-значения – перед ними слово VAR не ставится и идёт передача по значению, т.е. передаётся только копия значения этих параметров. Их любые изменения никак не отражаются на значениях соответствующих фактических параметров.
ГлобальныеГлобальные и локальныелокальные переменныепеременные
Глобальные переменные – это те переменные, которые объявлены в описании основной части.
Локальные переменные – это те, которые объявлены в процедурах и функциях.
Локальные переменные существуют только тогда, когда работает подпрограмма, появляются при вызове и исчезают при завершении работы.
Примеры обращения к Примеры обращения к процедуре (вызова процедуры).процедуре (вызова процедуры).
PROCEDURE SQ (a,b,c: real;VAR x1,x2:real)
Примеры обращения к процедуре:
SQ((25/3+2)*2, -1.5, (8.2-3.1)/3, a1, a2);
SQ(P,Q,R,Y,Z);Фактическим параметром, соответствующим формальному параметру-значению, может быть
• любое выражение соответствующего типа;
• константа соответствующего типа;
• переменная соответствующего типа.
Фактический параметр, соответствующим формальному параметру-переменной, может быть только переменной.
МЕХАНИЗМ ПЕРЕДАЧИ МЕХАНИЗМ ПЕРЕДАЧИ ПАРАМЕТРОВПАРАМЕТРОВА) ПАРАМЕТРЫ-ЗНАЧЕНИЯ (п-з)
1. В памяти выделяется место для каждого формального параметра.
2. Вычисляется значение фактического параметра и засылается в ячейку, соответствующую формальному параметру.
3. Если фактический параметр есть имя переменной, то значение этой переменной пересылается в соответствующий формальный параметр. На этом всякая связь между фактической переменной и формальным параметром обрывается.
Б) ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ (п-п)
Для формального параметра используется именно та ячейка, которая содержит соответствующий фактический параметр.
1. Пример процедуры с 1. Пример процедуры с параметрами-значениямипараметрами-значениями
PROGRAM PZ;
VAR i : integer;
Procedure P1 (i: integer);
Begin
i:=i*2;
End;
BEGIN
i:=2;
P1(i);
WriteLn(‘i=‘, i);
END.
Механизм передачи параметров:
i 2
i 2 4
ЭКРАН
i= 2
PROGRAM PZ;
Procedure P1
1.Назовите глобальные и локальные переменные.
2. назовите формальные и фактические параметры.
3.Какие формальные параметры использованы?
22. . ПримерПример процедурыпроцедуры с с параметрами-переменнымипараметрами-переменными
PROGRAM PP;
VAR a,b: integer;
PROCEDURE P2 (x: integer;
VAR y: integer);
Begin
x:=x+1; y:=y+1;
WriteLn(x,’ ‘,y);
End;
BEGIN
a:=0; b:=0;
P2(a,b);
WRITELN(a,’ ‘,b);
END
PROGRAM PP;
Механизм передачи параметров:1.Назовите глобальные и локальные переменные.
2. назовите формальные и фактические параметры.
3.Какие формальные параметры использованы?
PROCEDURE P2a
b
0
0 x
y0адрес яч.b
1
1
1
ЭКРАН
1 1
0 1
Упражнения на механизм передачи параметров в процедурах.
А) var c,d:integer;Procedure P(x,y:integer;);
Begin y:=x + 1;end;
Б) var c,d:integer;Procedure Q(x:integer; var
y:integer);Begin y:=x + 1;end;
B) var c,d:integer;Procedure R(var x,y:integer);
Begin y:=x + 1;end;
1) для каждой процедуры указать параметры-значения и параметры-переменные;2) определить, что будет выведено на экран в следующих случаях:с:=2;d:=0;P(sqr( c ) + c, d); Writeln(d); с:=2;d:=0;Q(sqr( c ) + c, d); Writeln(d);
3) допустимы ли обращения R(sqr( c ) + c, d); и R(c, d); ?
Задания:
1. Даны 4 действительных числа a, b, c, d (0). Решить квадратные yравнения: ax2+bx+c=0;
bx2+cx+d=0;
ax2+dx+c=0;
dx2+bx+c=0.
Задания:
2. Даны 4 действительных числа a, b, c, d (0). Решить линейные yравнения: ax+c=0;
bx+c=0;
ax+d=0;
dx+b=0.
Задачи.1. Вводятся два числа a и b. Определить ab и ba, используя процедуру вычисления степени числа.
PROGRAM z1;
VAR a, b: byte; ab: Longint;
PROCEDURE stepen (x, y : byte, Var z : Longint);
Var i: byte;
Begin
z:=1;
For i:=1 To y Do z:=z*x;
End;
BEGIN
WriteLn(‘Введите два целых числа’);
ReadLn(a,b);
stepen(a, b,ab); WriteLn(a:3, ‘в степени’ b:3, ‘равно ’,ab:10);
stepen(b, a,ab); WriteLn(‘’);
END.