250 likes | 639 Views
(Технология нисходящего программирования). Подпрограммы в Паскале. Базируется на методе программирования «сверху – вниз» (иное название – метод пошаговой детализации ).
E N D
(Технология нисходящего программирования) Подпрограммы в Паскале
Базируется на методе программирования «сверху – вниз» (иное название – метод пошаговой детализации). • Основа метода – разбиение исходной задачи на ряд подзадач. Решение отдельного фрагмента сложной задачи может представлять собой самостоятельный программный блок, называемый подпрограммой. • ПОДПРОГРАММА – это обособленная, оформленная в виде отдельной синтаксической конструкции и снабжённая именем часть программы. • В основной программе указываются только имена подпрограмм. Вызовы подпрограмм возможны неоднократно из разных участков программы. Технология нисходящего программирования
flaw Виды подпрограмм
ПРОЦЕДУРЫ Описание: PROCEDURE <имя>(<служебная информация>); < блок описаний>; BEGIN <тело процедуры> END;
Имя процедуры – правильный идентификатор • Состоит из латинских букв и цифр. • Начинается с латинской буквы.
Пример1. Program prim; Uses crt; Procedure a; Begin write(‘I am procedure’); end; BEGIN clrscr; writeln(‘ Where is a procedure?’); a; Writeln; write(‘good’); Readln end.
Используя оператор выбора и процедуры, написать программу, вызывающую одну из трех страниц: 1 – справка; 2 – тест; 3 – выход. Используя цикл и процедуры, «построить» забор. Задания
Оператор выбора Позволяет выбрать одно из нескольких продолжений программы. CASE < ключ выбора> OF <список выбора> Else <оператор>end; Ключ выбора – выражение, значение которого представлено порядковым типом. Список выбора <Константа выбора>:<оператор>;
Работа оператора выбора • Вычисляется значение <ключ выбора>; • В последовательности операторов <список выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению <ключ выбора>. Найденный оператор выполняется, после чего оператор выбора завершает работу.
Используя оператор выбора и процедуры, написать программу, вызывающую одну из трех страниц: 1 – справка;2 – тест; 3 – выход. procedure vixod; begin textbackground(5); clrscr; gotoxy(38,12); write('vixod') end; BEGIN textbackground(0); clrscr; write('vibor1\2\3='); readln(m); case m of 1:sprav; 2:test; 3:vixod; end; readln; END. program menu1; uses crt; var m:integer; procedure sprav; begin textbackground(4); clrscr; gotoxy(38,12); write('spravka') end; procedure test; begin textbackground(2); clrscr; gotoxy(38,12); write('test') end;
procedure ekran(c:byte;st:string); begin textbackground(c);textcolor(15); clrscr; gotoxy(38,12); write(st) end; begin textbackground(0); clrscr; write('vibor1\2\3='); readln(m); case m of 1: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. Пример процедуры с параметрами-значениями Механизм передачи параметров: PROGRAM PZ; VAR i : integer; Procedure P1 (i: integer); Begin i:=i*2; End; BEGIN i:=2; P1(i); WriteLn(‘i=‘, i); END. 1.Назовите глобальные и локальные переменные. 2. назовите формальные и фактические параметры. 3.Какие формальные параметры использованы? PROGRAM PZ; i 2 Procedure P1 i 2 4 ЭКРАН i= 2
2. Примерпроцедурыс параметрами-переменными Механизм передачи параметров: 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 1.Назовите глобальные и локальные переменные. 2. назовите формальные и фактические параметры. 3.Какие формальные параметры использованы? PROGRAM PP; PROCEDURE P2 a 0 x 1 0 1 b 0 y адрес яч.b 1 ЭКРАН 1 1 0 1
Упражнения на механизм передачи параметров в процедурах. А) var c,d:integer; Procedure P(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); ? Б) 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;
Задания: • Даны 4 действительных числа a,b,c,d (0). Решитьквадратные yравнения: ax2+bx+c=0; bx2+cx+d=0; ax2+dx+c=0; dx2+bx+c=0.
Задания: • Даны 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.