Презентация к занятию 31 2007-08.ppt
- Количество слайдов: 24
Структурное программирование. Подпрограммы
Пример 1 Составить программу вычисления выражения 1 k + 2 k + … + nk для натуральных n и k.
Решение var s, s 1: longint; i, j, n, k: byte; begin readln(n, k); s: =0; for i: =1 to n do begin s 1: =1; for j: =1 to k do s 1: =s 1*i; s: =s+s 1; end; writeln(s); end.
Другое решение var s, s 1: longint; i, n, k: byte; Глобальные Формальные переменные параметры Function step(x, y: byte): longint; Var P: longint; z: byte; Begin Локальные переменные P: =1; For z: =1 to y do P: =P*x; Step: =P; End; begin readln(n, k); s: =0; for i: =1 to n do s: =s+step(i, k); writeln(s); end. Фактические параметры
Пример 2 Найти цифровой корень произвольного натурального числа.
Решение Var a, x: integer; Begin Readln(a); While a>9 do Begin s: =0; While a>0 do begin s: =s+a mod 10; a: =a div 10; end; a: =s; end; Writeln(a); End.
Другое решение Глобальная переменная Var a : integer; Function sc(x : integer) : integer; Var s : integer; Begin Формальный параметр s: =0; While x>0 do begin Локальная переменная s: =s+x mod 10; x: =x div 10; end; Sc: =s; End; Begin Фактический параметр Readln(a); While a>9 do a: =sc(a); Writeln(a); End.
Пример 3 Упорядочить три различных целых числа a, b, c по возрастанию.
Решение Var a, b, c, d : integer; Begin Readln(a, b, c); If a>b then begin d : = a; a : = b; b : =d; end; If b>c then begin d : = b; b : = c; c : =d; end; If a>b then begin d : = a; a : = b; b : =d; end; End.
Другое решение Var a, b, c : integer; Procedure sw( x, y : integer); Var d : integer; Begin d : = x; x : = y; y : = d; End; Begin Readln(a, b, c); If a>b then sw(a, b); If b>c then sw(b, c); If a>b then sw(a, b); Writeln(a, ‘ ‘, b, ‘ ‘, c); End.
Основные понятия Структурирование программы - разбиение программы на ряд подзадач, каждая из которых может быть оформлена в виде отдельного блока со своим названием и структурой. В основной программе происходит вызов этих блоков по их именам. Языки программирования, в которых использованы механизмы структурирования, называются процедурно-ориентированными. Блоки, из которых строится основная программа, называются подпрограммами. В Паскале различают два типа подпрограмм: процедуры и функции. Подпрограммой называется обособленная, оформленная в виде синтаксической конструкции и снабженная своим именем часть программы.
Структура процедуры Procedure <имя> [<список формальных параметров>: <тип>]; Const <описание констант>; Label <описание меток>; Type <описание типов данных>; Var <описание локальных переменных>; Procedure<имя, описание и тело вложенных процедур>; Function < имя, описание и тело вложенных функций>; Begin <тело процедуры>; End;
Структура функции Function <имя> [<список формальных параметров>: <тип>]: <тип результата>; Const <описание констант>; Label <описание меток>; Type <описание типов данных>; Var <описание локальных переменных>; Procedure<имя, описание и тело вложенных процедур>; Function < имя, описание и тело вложенных функций>; Begin <тело функции>; End;
Встроенные (стандартные) процедуры Readln(x); Writeln(x); Clrscr; Dec(x, n); Delay(1000)
Встроенные (стандартные) функции Abs(x); Sqr(x); Chr(x); Ord(x); Odd(x);
Пользовательские подпрограммы Создаются в случаях, когда среди стандартных подпрограмм нет необходимой, или когда определенная группа действий должна выполняться неоднократно. Подпрограммы: избавляют от необходимости многократного повторения одних и тех же блоков, экономя тем самым память; улучшают структуру программы, облегчая ее понимание при разборе (основная программа становится похожей на оглавление); Нестандартные подпрограммы необходимо описать, чтобы компилятор мог установить связь между оператором вызова и теми действиями, которые предусмотрены в подпрограмме.
Параметры подпрограммы Если в подпрограмму передаются данные, то говорят, что она имеет ПАРАМЕТРЫ. Параметры, указанные в основной программе, называются ФАКТИЧЕСКИМИ. Параметры, указанные в подпрограмме называются ФОРМАЛЬНЫМИ. Количество, порядок следования и тип фактических и формальных параметров должны совпадать.
Механизм передачи параметров По значению (параметры-значения). Если формальный параметр является параметром по значению, то при вызове подпрограммы это значение вычисляется, результат копируется в особую область памяти (стек) и передается в подпрограмму. Подпрограмма работает не с переменной, а с ее копией, следовательно, доступа к ячейке, где хранится сама переменная, не имеет. Параметром-значением может быть переменная, выражение (к примеру, а+b), константа.
Механизм передачи параметров По адресу (параметры-переменные). Если перед списком формальных параметров указано служебное слово var, то в подпрограмму передается сама переменная, точнее, адрес ячейки, в которую записана эта переменная: Procedure sw ( var x , y : integer); Таким образом, любые изменения формальных параметров отражаются на фактических параметрах. Параметром переменной может быть только переменная.
Механизм передачи параметров параметры-константы (перед списком стоит служебное слово const, после списка указывается тип. Параметромконстантой может быть переменная, константа, выражение (как при параметре по значению), но в подпрограмму фактически передается адрес величины, хотя доступ к ней существует только для чтения, т. е. запрещены любые изменения такого параметра; нетипизированные параметры (перед списком стоит служебное слово «var» или «const» и нет указания типа. Передаются они всегда по адресу – либо как константы, либо как переменные. Но выполнять с такими параметрами какие либо действия нельзя, пока они не приведены к какому-либо типу. параметры-процедуры; параметры-функции.
Вывод Исходные данные в подпрограмму могут передаваться как значения (примеры 1 и 2) или как переменные (пример 3). Результаты в основную программу могут возвращаться через параметры-переменные (пример 3) или через подпрограммы-функции (примеры 1 и 2). В списке параметров указываются имя, тип и способ передачи данных.
Локальные и глобальные переменные Переменные, описанные в основной программе, называются ГЛОБАЛЬНЫМИ и «действуют» как в основной программе, так и в подпрограмме. Время их жизни – с начала программы и до ее завершения. Глобальные переменные в большинстве случаев перед началом работы программы обнуляются. Переменные , описанные в подпрограмме, называются ЛОКАЛЬНЫМИ переменными и имеют значения только внутри подпрограммы. В основной программе такая величина не определена, ее использование вызовет ошибку. Локальные переменные хранятся в особой части памяти, называемой стеком, причем распределение этой памяти происходит в момент вызова подпрограммы, а ее освобождение – в момент завершения подпрограммы. Таким образом, время жизни локальных переменных – с начала работы подпрограммы и до ее завершения. Такие переменные предварительно не обнуляются, т. е. , в соответствующих ячейках памяти находятся произвольные значения. Имена локальных и глобальных переменных могут совпадать. В таких случаях внутри подпрограммы глобальные переменные перекрываются локальными.
Задача 1 var x, y : real; procedure kv(a, b : real); begin a : = a*a; b : = b*b; writeln(‘сумма квадратов‘, a+b); end; begin x : = 1. 5; y : = 2. 5; kv(x, y); writeln(‘x = ‘, x : 7 : 2, ‘y = ‘ , y : 7 : 2); end.
Задача 2 var a, b : integer; procedure sw(x, y : integer); var c : integer; begin c : = x; x : = y; y : = c; writeln(x : 4, y : 4); end; begin a : = 4; b : = 3; sw(a, b); writeln(‘a = ‘, a, ‘b = ‘, b); end.


