Скачать презентацию Модульное программирование 1  Раздел 1 ПОДПРОГРАММЫ 2 Скачать презентацию Модульное программирование 1 Раздел 1 ПОДПРОГРАММЫ 2

Модульное программирование.ppt

  • Количество слайдов: 96

Модульное программирование 1 Модульное программирование 1

Раздел 1 ПОДПРОГРАММЫ 2 Раздел 1 ПОДПРОГРАММЫ 2

ПОДПРОГРАММЫ 1. Понятие подпрограммы. Механизм вызова. Виды подпрограмм. 2. Подпрограмма – функция 3. Подпрограмма ПОДПРОГРАММЫ 1. Понятие подпрограммы. Механизм вызова. Виды подпрограмм. 2. Подпрограмма – функция 3. Подпрограмма – процедура 4. Глобальные и локальные переменные 5. Формальные и фактические параметры 3

1. Понятие подпрограммы. Механизм вызова. Виды. 4 1. Понятие подпрограммы. Механизм вызова. Виды. 4

Подпрограммы Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Записывается Подпрограммы Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Записывается однократно, а в соответствующих местах программы происходит вызов по имени подпрограммы. 5

Подпрограммы Подпрограмма – это самостоятельный алгоритм, который может многократно использоваться при решении более общей Подпрограммы Подпрограмма – это самостоятельный алгоритм, который может многократно использоваться при решении более общей задачи 6

Механизм вызова Основная программа подпрограмма … … Вызов подпрограммы Точка вызова … … Вызов Механизм вызова Основная программа подпрограмма … … Вызов подпрограммы Точка вызова … … Вызов подпрограммы 7

Подпрограммы позволяют: 1. 2. 3. Упростить структуру программы (повышение степени абстракции) Избежать избыточности кода Подпрограммы позволяют: 1. 2. 3. Упростить структуру программы (повышение степени абстракции) Избежать избыточности кода (не повторять одно и то же в разных частях) Уменьшить вероятность ошибок и упростить процесс отладки программы 8

Виды подпрограмм: 1. 2. Процедуры – подпрограмма, которая может не возвращать в основную программу Виды подпрограмм: 1. 2. Процедуры – подпрограмма, которая может не возвращать в основную программу значения переменных Функции – подпрограмма, которая обязана возвращать в основную программу значения переменных 9

2. Подпрограмма - функция Функция – подпрограмма, которая обязательно имеет один выходной параметр, передаваемый 2. Подпрограмма - функция Функция – подпрограмма, которая обязательно имеет один выходной параметр, передаваемый через ее имя. Дополнительно может иметь любое количество входных и выходных параметров. 10

Подпрограмма - функция Виды: 1. Стандартные (описаны в модуле System). Вызываются без предварительного описания. Подпрограмма - функция Виды: 1. Стандартные (описаны в модуле System). Вызываются без предварительного описания. 2. Пользовательские (определяются программистом в разделе процедур и функций программы или в созданном модуле) 11

Описание функции function имя [(список формальных параметров) ] : тип результата; {Описание локальных переменных} Описание функции function имя [(список формальных параметров) ] : тип результата; {Описание локальных переменных} begin тело функции имя: =значение end; 12

Вызов функции В основной программе в правой части оператора присваивания: Имя переменной: = имя Вызов функции В основной программе в правой части оператора присваивания: Имя переменной: = имя функции(список фактических параметров) Y: =SIN(X) или Число и тип формальных и фактически параметров должно совпадать с С: =Summa(3, 6); точностью до их следования! 13

Примеры функций (1) Var K, N, Res : Byte; function Sum(A, B : Byte) Примеры функций (1) Var K, N, Res : Byte; function Sum(A, B : Byte) : Byte; begin Sum : = A + B; end; Begin readln(K, N); Res : = Sum(4, 4); End. 14

Примеры функций (2) Var K, N, Res : Byte; function Sum : Byte; begin Примеры функций (2) Var K, N, Res : Byte; function Sum : Byte; begin Sum : = K + N; end; Begin readln(K, N); Res : = Sum; End. 15

Примеры функций (3) Var X, Y, Res : Real; function Del(A, B : Real, Примеры функций (3) Var X, Y, Res : Real; function Del(A, B : Real, Var R : Real) : Boolean; begin if B = 0 then Del : = False else begin R : = A / B; Del : = True end; Begin readln(X, Y); if Del(X, Y, Res) then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) 16 End.

Примеры функций (4) Var Res : Real; Const X = 20; Y = 7; Примеры функций (4) Var Res : Real; Const X = 20; Y = 7; function Del(A, B : Real, Var R : Real) : Boolean; begin if B = 0 then Del : = False else begin R : = A / B; Del : = True end; Begin if Del(X, 7, Res) then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) End. 17

Примеры функций (5) Var X, Res : Real; N : Byte; function Step(A : Примеры функций (5) Var X, Res : Real; N : Byte; function Step(A : Real, M : Byte) : Real; Var J : Byte; Y : Real; begin Y : = 1; for J: =1 to M do Y : = Y * A; Step : = Y end; Begin readln(X, N); Res : = Step(X, N); writeln(Res: 12: 4) End. 18

1 Примеры функций (6) Найти разность средних арифметических значений двух вещественных массивов из 10 1 Примеры функций (6) Найти разность средних арифметических значений двух вещественных массивов из 10 элементов. 19

Примеры функций (6_продолжение) {Раздел описания} Const N=10; Type mas = array [1. . N] Примеры функций (6_продолжение) {Раздел описания} Const N=10; Type mas = array [1. . N] of real; Var a, b: mas; I : integer; dif : real; 20 2

Примеры функций (6 _продолжение) {Раздел описания} function Average(X : mas) : Real; Var i Примеры функций (6 _продолжение) {Раздел описания} function Average(X : mas) : Real; Var i : integer; av: real; begin av : = 0; for i: =1 to n do av : = av+x[i]; Average: =av/n; end; 21 3

Примеры функций (6 _продолжение) {Основная программа} Begin for i: =1 to n do read Примеры функций (6 _продолжение) {Основная программа} Begin for i: =1 to n do read (a[i]); for i: =1 to n do read (b[i]); dif: = average(a)- average(b); Writeln (‘Разность значений ’, dif: 6: 2) end. 22 4

3. Подпрограмма - процедура 23 3. Подпрограмма - процедура 23

Процедура – подпрограмма, которая может быть без параметров. Также может иметь любое количество входных Процедура – подпрограмма, которая может быть без параметров. Также может иметь любое количество входных и выходных параметров. Вызывается по имени: Writeln (X, Y) 24

1 Описание процедур procedure Имя(Параметры) ; {Локальные переменные} begin операторы ; end; 25 1 Описание процедур procedure Имя(Параметры) ; {Локальные переменные} begin операторы ; end; 25

2 Описание процедур procedure Имя 1(Параметры) ; begin операторы ; end; procedure Имя 2 2 Описание процедур procedure Имя 1(Параметры) ; begin операторы ; end; procedure Имя 2 ; {Локальные переменные} begin операторы ; end; 26

Примеры процедур (1) Var K, N, Res : Byte; procedure Sum. P(A, B : Примеры процедур (1) Var K, N, Res : Byte; procedure Sum. P(A, B : Byte, Var Result : Byte); begin Result : = A + B; end; Begin readln(K, N); Sum. P(K, N, Res); End. 27

Примеры процедур (2) Var K, N, Res : Byte; procedure Sum. P; begin Res Примеры процедур (2) Var K, N, Res : Byte; procedure Sum. P; begin Res : = K + N; end; Begin readln(K, N); Sum. P; writeln(Res); End. 28

Примеры процедур (3) Var X, Y, Res : Real; Code. E : Boolean; procedure Примеры процедур (3) Var X, Y, Res : Real; Code. E : Boolean; procedure Del. P(A, B : Real, Var R : Real; Var Err : Boolean); begin if B = 0 then Err : = True else begin R : = A / B; Err : = False end; Begin readln(X, Y); Del. P(X, Y, Res, Code. E); If Not Code. E then writeln(Res: 12: 4) else writeln(‘Деление на ноль’) 29 End.

1 Примеры процедур (4) Найти разность средних арифметических значений двух вещественных массивов из 10 1 Примеры процедур (4) Найти разность средних арифметических значений двух вещественных массивов из 10 элементов. 30

Примеры процедур (4 2 продолжение {Раздел описания} Const N=10; Type mas = array [1. Примеры процедур (4 2 продолжение {Раздел описания} Const N=10; Type mas = array [1. . N] of real; Var a, b: mas; I : integer; dif, av_a, av_b, : real; 31 )

Примеры процедур (4 3 продолжение ) {Раздел описания} Procedure Average(X : mas, var av: Примеры процедур (4 3 продолжение ) {Раздел описания} Procedure Average(X : mas, var av: real); Var i : integer; begin av : = 0; for i: =1 to n do av : = av+x[i]; av: =av/n; end; 32

Примеры процедур (4 4 продолжение {Основная программа} Begin for i: =1 to n do Примеры процедур (4 4 продолжение {Основная программа} Begin for i: =1 to n do read (a[i]); for i: =1 to n do read (b[i]); average (a, av_a); average (b, av_b); Dif: = av_a- av_b; Writeln (‘Разность значений ’, dif: 6: 2) end. 33 )

4. Глобальные и локальные переменные 34 4. Глобальные и локальные переменные 34

Глобальные переменные § Глобальными называются переменные, описанные в главной программе. § Переменные, которые не Глобальные переменные § Глобальными называются переменные, описанные в главной программе. § Переменные, которые не были инициализированы явным образом, перед началом выполнения программы обнуляются. § Время жизни глобальных переменных - с начала программы и до ее завершения. § Глобальные переменные доступны в любом месте программы или подпрограммы, кроме тех подпрограмм, в которых описаны локальные переменные с такими же именами. 35

Локальные переменные § Описываются внутри подпрограмм. § Значения локальных переменных между двумя вызовами одной Локальные переменные § Описываются внутри подпрограмм. § Значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются и эти переменные предварительно не обнуляются. § Локальные переменные могут использоваться только в подпрограмме, в которой они описаны, и всех вложенных в нее. 36

5. Формальные и фактические параметры 37 5. Формальные и фактические параметры 37

Формальные и фактические параметры § Фактические параметры - передаются процедуре при обращении к ней. Формальные и фактические параметры § Фактические параметры - передаются процедуре при обращении к ней. § Формальные параметры – это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Описание Procedure A 1(x 1, x 2: integer; a, b: char); . . Вызов: A 1(x, y, z, f) X, Y: должны быть типа integer 38 Z, F: типа char

Виды формальных параметров подпрограмм • Значения • Переменные • Константы • Нетипизированные параметры • Виды формальных параметров подпрограмм • Значения • Переменные • Константы • Нетипизированные параметры • Открытые массивы и строки • Процедурные и функциональные параметры • Объекты 39

Параметры-значения Описывается в заголовке подпрограммы: имя : тип; Например, передача в процедуру Р величины Параметры-значения Описывается в заголовке подпрограммы: имя : тип; Например, передача в процедуру Р величины целого типа записывается так: procedure P(x : integer); Имя параметра может быть произвольным. Параметр х можно представить себе как локальную переменную, которая получает свое значение из главной программы при вызове подпрограммы. В подпрограмму передается копия значения аргумента. 40

Параметры-значения. Механизм передачи параметра 1. Из ячейки памяти, в которой хранится переменная, передаваемая в Параметры-значения. Механизм передачи параметра 1. Из ячейки памяти, в которой хранится переменная, передаваемая в подпрограмму, берется ее значение и копируется в область оперативной памяти, называемую областью параметров. 2. Подпрограмма работает с этой копией, следовательно, доступа к ячейке, где хранится сама переменная, не имеет. По завершении работы подпрограммы стек освобождается. Такой способ называется передачей по значению. 41

Параметры-значения При вызове подпрограммы на месте параметра, передаваемого по значению, может находиться выражение. Тип Параметры-значения При вызове подпрограммы на месте параметра, передаваемого по значению, может находиться выражение. Тип выражения должен быть совместим по присваиванию с типом параметра. Например, если в вызывающей программе описаны переменные var x : integer; c : byte; y : longint; то следующие вызовы подпрограммы Р, ( procedure P(x : integer); ) будут синтаксически правильными: P(x); P(c); P(y); P(200); P(x div 4 + 1); 42

Недостатки передачи по значению 1. Затраты времени на копирование параметра 2. Затраты памяти в Недостатки передачи по значению 1. Затраты времени на копирование параметра 2. Затраты памяти в стеке и опасность его переполнения, когда речь идет о параметрах, занимающих много места - например, массивах большого размера. Более правильно использовать для передачи в подпрограмму исходных данных параметры-константы 43

Параметры-переменные Признаком параметра-переменной является ключевое слово var перед описанием параметра: var имя : тип; Параметры-переменные Признаком параметра-переменной является ключевое слово var перед описанием параметра: var имя : тип; Например, передача в процедуру Р параметрапеременной целого типа записывается так: procedure P(var x : integer); 44

Параметры-переменные При вызове подпрограммы в область параметров копируется не значение переменной, а ее адрес, Параметры-переменные При вызове подпрограммы в область параметров копируется не значение переменной, а ее адрес, и подпрограмма через него имеет доступ к ячейке, в которой хранится переменная. Этот способ передачи параметров называется передачей по адресу. Подпрограмма работает непосредственно с переменной из вызывающей программы и, следовательно, может ее изменить. ВНИМАНИЕ! При вызове подпрограммы на месте параметрапеременной может находиться только ссылка на переменную точно того же типа. 45

§ Константы § Нетипизированные параметры § САМОСТОЯТЕЛЬНО! 46 § Константы § Нетипизированные параметры § САМОСТОЯТЕЛЬНО! 46

http: //www. pascal 7. ru/ 47 http: //www. pascal 7. ru/ 47

Раздел 2 Модули 48 Раздел 2 Модули 48

Модуль – это подключаемая к программе библиотека ресурсов (описания типов, констант, переменных и подпрограмм. Модуль – это подключаемая к программе библиотека ресурсов (описания типов, констант, переменных и подпрограмм. Обычно это связанные между собой ресурсы. ) Виды модулей: 1. Стандартные 2. Пользовательские (модуль программиста) § TPU - файл 49

Особенности: 1. Для использования достаточно знать интерфейс, детали реализации скрыты от пользователя. 2. Программа Особенности: 1. Для использования достаточно знать интерфейс, детали реализации скрыты от пользователя. 2. Программа становится более понятной 3. Возрастает скорость компиляции (т. к. модули уже скомпилированы) 4. Преодолевается ограничение на объем кода исполняемой программы в один сегмент памяти (код содержится в отдельном сегменте) 50

Описание модуля UNIT имя; {заголовок модуля} {интерфейсная секция} INTERFACE {описание глобальных элементов модуля (видимых Описание модуля UNIT имя; {заголовок модуля} {интерфейсная секция} INTERFACE {описание глобальных элементов модуля (видимых извне)} {секция реализации} IMPLEMENTATION {описание локальных (внутренних) элементов} {секция инициализации} Begin {может отсутствовать} End. Исходный текст модуля хранится в отдельном файле с расширением. pas Имя файла, в котором хранится модуль, должно совпадать с именем, заданным после ключевого слова unit. 51

Назначение разделов модуля § § Модуль может использовать другие модули, для этого их надо Назначение разделов модуля § § Модуль может использовать другие модули, для этого их надо перечислить в операторе uses, который может находиться только непосредственно после ключевых слов interface или implementation. Интерфейсная секция: § определяют константы, типы данных, переменные, а также заголовки процедур и функций. § Секция реализации § описываются подпрограммы, заголовки которых приведены в интерфейсной части. Заголовок подпрограммы должен быть или идентичным указанному в секции интерфейса, или состоять только из ключевого слова procedure или function и имени подпрограммы. Для функции также указывается ее тип. § также можно определять константы, типы данных, переменные и внутренние подпрограммы. § Секция инициализации предназначена для присваивания начальных значений переменным, которые используются в модуле. Операторы, расположенные в секции инициализации модуля, выполняются перед операторами основной программы. 52

Для сохранения скомпилированного модуля на диске требуется установить значение пункта Destination меню Compile в Для сохранения скомпилированного модуля на диске требуется установить значение пункта Destination меню Compile в значение Disk. Компилятор создаст файл с расширением. tpu. , который надо переместить в специальный каталог, путь к которому указан в пункте Directories в поле Unit Directories. 53

Технология создания модуля 1. Создать файл модуля 2. Откомпилировать его (Compile – Destination установить Технология создания модуля 1. Создать файл модуля 2. Откомпилировать его (Compile – Destination установить Disk) 3. Подключить в нужной программе (Uses имя модуля) 54

Пример модуля (описание) 1 Unit Average; Interface Const N=10; Type mas = array [1. Пример модуля (описание) 1 Unit Average; Interface Const N=10; Type mas = array [1. . N] of real; Procedure Average(X : mas, var av: real); Implementation Procedure Average(X : mas, var av: real); Var i : integer; begin av : = 0; for i: =1 to n do av : = av+x[i]; av: =av/n; end. 55

Пример модуля (использование) 2 Program Div_Average; После этого все описания, расположенные в интерфейсных секциях Пример модуля (использование) 2 Program Div_Average; После этого все описания, расположенные в интерфейсных секциях модулей, Uses Average; становятся доступными в программе и ими можно пользоваться так же, как и Var a, b : mas; величинами, определенными в ней i: integer; непосредственною Dif, av_a, av_b : real; Begin for i: =1 to n do read (a[i]); for i: =1 to n do read (b[i]); average(a, av_a); average(b, av_b); dif: = av_a- av_b; Writeln (‘Разность значений ’, dif: 6: 2) 56 end.

§ Поиск модуля: 1. В библиотеке исполняющей среды; 2. В текущем каталоге; 3. В § Поиск модуля: 1. В библиотеке исполняющей среды; 2. В текущем каталоге; 3. В каталогах заданных в Option/Directories § Если описаны две величины с одинаковыми именами ( в модуле и в программе), то обращение к той что из модуля: имя модуля. имя величины 57

Стандартные модули § § § § System CRT DOS, WINDOWS Graph Printer Overlay Strings Стандартные модули § § § § System CRT DOS, WINDOWS Graph Printer Overlay Strings 58

Пример использования модуля CRT Программа

Пример использования модуля CRT Программа Пример использования модуля CRT Программа "Угадай число" Text. Color(Light. Gray); { цвет символов – серый} k : = – 1; { счетчик попыток } Goto. XY(12, 5); writeln(' Введите число : '); repeat { цикл ввода ответа } Goto. XY(20, 9); { установить курсор } readln(n); { ввести число } inc(k); until i = n; 60

Пример использования модуля CRT Программа Пример использования модуля CRT Программа "Угадай число“_продолжение window(20, 22, 60, 24); { определить окно результата } Text. Attr : = 2 shl 4 + 14; { желтые символы за зеленом фоне } clrscr; { залить окно фоном } Goto. XY(6, 2); { установить курсор } writeln(' Коэффициент невезучести : ', k / max : 5: 1); readkey; { ждать нажатия любой клавиши } Text. Attr : = 15; { белые символы на черном фоне } clrscr; { очистить после себя экран } end. 61

Раздел 3 Рекурсия Просмотр презентации 62 Раздел 3 Рекурсия Просмотр презентации 62

Рекурсия 63 Рекурсия 63

Определение рекурсии § § Рекурсия — частичное определение объекта через себя, определение объекта с Определение рекурсии § § Рекурсия — частичное определение объекта через себя, определение объекта с использованием ранее определённых параметров. Рекурсия используется, когда можно выделить самоподобие задачи. Это метод, сводящий общую задачу к некоторым задачам более узкого простого типа. 64

Примеры рекурсий 65 Примеры рекурсий 65

Примеры рекурсий 66 Примеры рекурсий 66

Примеры рекурсий Лингвистические рекурсии: 1. У попа была собака… 2. Дом, который построил Джек… Примеры рекурсий Лингвистические рекурсии: 1. У попа была собака… 2. Дом, который построил Джек… (Р. Бернс) 67

Примеры рекурсий Музыкальная рекурсия: М. Равель «Болеро» 68 Примеры рекурсий Музыкальная рекурсия: М. Равель «Болеро» 68

Рекурсия в программировании • Рекурсивной называют процедуру или функцию, внутри которой происходит обращение самой Рекурсия в программировании • Рекурсивной называют процедуру или функцию, внутри которой происходит обращение самой к себе, но с другими параметрами. Это прямая рекурсия. 69

Рекурсия в программировании • Косвенной называется рекурсия, когда две или более процедуры или функции Рекурсия в программировании • Косвенной называется рекурсия, когда две или более процедуры или функции вызывают друга. Пример косвенного вызова процедуры или функции: процедура A вызывает процедуру B, а процедура B вызывает процедуру A. 70

Суть рекурсии § При каждом вызове создается новая копия со своими переменными, но как Суть рекурсии § При каждом вызове создается новая копия со своими переменными, но как только она заканчивает работу, память занятая локальными переменными освобождается, а полученные результаты передаются в точку вызова. § Рекурсивный алгоритм в процессе работы обращается сам к себе. 71

Рекурсия Структура описания рекурсивных процедур (функций) имеет следующий вид: <действия на входе в рекурсию>; Рекурсия Структура описания рекурсивных процедур (функций) имеет следующий вид: <действия на входе в рекурсию>; If <условие> then <команды выхода из рекурсии> else <вызов процедуры (функции) с другими параметрами> <действия на выходе из рекурсии> 72

Рекурсия • В качестве <условие> выступают граничные случаи параметров, при которых результат работы рекурсии Рекурсия • В качестве <условие> выступают граничные случаи параметров, при которых результат работы рекурсии известен. Это условие завершения процесса вхождения в рекурсию. 73

Механизм работы рекурсии 1. Со входом в рекурсию осуществляется вызов процедур (функций), а для Механизм работы рекурсии 1. Со входом в рекурсию осуществляется вызов процедур (функций), а для выхода необходимо помнить, откуда пришли, т. е помнить точки возврата (адреса). 2. Место хранения точек возврата называется стеком вызова и для него отводится определенная область оперативной памяти. 3. В стеке запоминаются также значения всех локальных переменных, т. е. создается копия параметров процедур (функций). 4. Стек ограничен! Возможно его переполнение – это главный недостаток рекурсии! 74

Рекурсивная функция и стек § Каждый рекурсивный вызов порождает новый Рекурсивная функция и стек § Каждый рекурсивный вызов порождает новый "экземпляр" формальных параметров и локальных переменных, причем старый "экземпляр" не уничтожается, а сохраняется в стеке по принципу вложенности. Здесь имеет место единственный случай, когда одному имени переменной в процессе работы программы соответствуют несколько ее экземпляров. 75

function FTR(n : byte): longint; begin if (n = 0) or (n = 1) function FTR(n : byte): longint; begin if (n = 0) or (n = 1) then FTR : = 1 else FTR : = FTR(n - 1) * n; стек end; -----A : = FTR(4); n=1 … n=2 … n=3 … n=4 … 76

Глубина рекурсии § Определяется как максимальная вложенность рекурсии, т. е. максимальное число подпрограмм, завершение Глубина рекурсии § Определяется как максимальная вложенность рекурсии, т. е. максимальное число подпрограмм, завершение которых не произошло. 77

Идея рекурсивного алгоритма § Войдя в рекурсивную функцию F, мы Идея рекурсивного алгоритма § Войдя в рекурсивную функцию F, мы "движемся" по ее тексту до тех пор, пока не встретим ее вызова, после чего мы опять начнем выполнять ту же самую функцию сначала. При этом следует отметить самое важное свойство рекурсивной функции - ее первый вызов еще не закончился. 78

Виды задач с рекурсией 1. 2. 3. 4. Задачи с рекурсивной формулировкой Из постановки Виды задач с рекурсией 1. 2. 3. 4. Задачи с рекурсивной формулировкой Из постановки задачи можно извлечь рекурсию Задачи, которые можно решить как частный случай обобщенной Задачи, в которых можно использовать характеристику или свойство функции 79

Примеры рекурсивных алгоритмов 80 Примеры рекурсивных алгоритмов 80

1. Рекурсивная формулировка Вычисление факториала N! 0!=1!=1 2!=2=1!*2=1*2 3!=2!*3=1!*2*3=1*2*3 /……………. . N!= 1*2*3*4*…. *n 1. Рекурсивная формулировка Вычисление факториала N! 0!=1!=1 2!=2=1!*2=1*2 3!=2!*3=1!*2*3=1*2*3 /……………. . N!= 1*2*3*4*…. *n function fact(n: byte): longint; begin If (n=0)or (n=1) then fact: =1 else fact: =fact(n-1)*n; end; F(5)=5*F(4)=4*F(3)=3*F(2)=2*F(1)=1 81

function FTR(n : byte): longint; begin if (n = 0) or (n = 1) function FTR(n : byte): longint; begin if (n = 0) or (n = 1) then FTR : = 1 else FTR : = FTR(n - 1) * n; стек end; -----A : = FTR(4); n=1 … n=2 … n=3 … n=4 … 83

2. Из постановки задачи можно извлечь рекурсию 1. Найти A+B. Если В=0, то А+В=а. 2. Из постановки задачи можно извлечь рекурсию 1. Найти A+B. Если В=0, то А+В=а. Если B>0, то А+В=(A+1)+(B-1). Если B<0, то А+В=(A-1)+(B+1). Function Sum (a, b: integer): integer; Begin if b=0 then sum: =a else if b>0 then sum: =sum(a+1, b-1) else sum: =sum(a-1, b+1); End; 84

2. Из постановки задачи можно извлечь рекурсию 2. Вычисление НОД (наибольший общий делитель) по 2. Из постановки задачи можно извлечь рекурсию 2. Вычисление НОД (наибольший общий делитель) по алг. Евклида. Если а=в, то НОД=а. Если а>b, то НОД (а, в)=НОД(а-в, в). Если a1 then Rec(n div 2); Write(n mod 2); end; 4. Перевод из 10 -ой СС в К-ую (при К от 2 до 16). 85

3. Задачи, которые можно решить как частный случай обобщенной Является ли число простым? Обобщение: 3. Задачи, которые можно решить как частный случай обобщенной Является ли число простым? Обобщение: верно ли что число N не делится ни на одно число >=M и 0) and Simple (M+1, N); end; 86

4. Задачи, в которых можно использовать характеристику или свойство функции Для натурального N>=1 найти 4. Задачи, в которых можно использовать характеристику или свойство функции Для натурального N>=1 найти число A, для которого верно 87

4. Задачи, в которых можно использовать характеристику или свойство функции Для натурального N>=1 найти 4. Задачи, в которых можно использовать характеристику или свойство функции Для натурального N>=1 найти число A, для которого верно Function A(n: integer): integer; Begin If n=1 then a: =1 Else a: =a(n div 2) +1; End; 88

Процедура ввода с клавиатуры последовательности чисел (окончание ввода - 0) и вывода ее на Процедура ввода с клавиатуры последовательности чисел (окончание ввода - 0) и вывода ее на экран в обратном порядке. procedure solve; var n: integer; begin readln(n); if n<>0 then solve; write (n: 5); End; Пример 1 89

Поиск n-ного числа Фибоначчи (1, 1, 2, 3, 5, 8, …. ) function fib Поиск n-ного числа Фибоначчи (1, 1, 2, 3, 5, 8, …. ) function fib (n: integer): integer; begin If n<=2 then fib: =1 else fib: =fib(n-1)+fib(n-2); end; Пример 2 90

Поиск суммы n элементов арифметической прогрессии (первый элемент – а, разность – d) function Поиск суммы n элементов арифметической прогрессии (первый элемент – а, разность – d) function sa (n, a: integer): integer; begin If n>0 then sa: =a+sa(n-1, a+d) else sa: =0; end; Пример 3 91

Поиск максимального элемента в глобальном массиве A procedure search_max(n: Integer; var x: Integer); begin Поиск максимального элемента в глобальном массиве A procedure search_max(n: Integer; var x: Integer); begin if n=1 then x: =A[1] else begin search_max (n-1, x); if A[n]>x then x: =A[n] end End; Пример 4 92

Рекурсивная (фрактальная) графика § Это особый, очень интересный раздел, в котором рассматриваются алгоритмы построения Рекурсивная (фрактальная) графика § Это особый, очень интересный раздел, в котором рассматриваются алгоритмы построения фрактальных кривых. 93

Треугольник Серпинского 94 Треугольник Серпинского 94

Дерево 95 Дерево 95

Узоры 96 Узоры 96

Задание § Найти и протестировать программы для построения фрактальных фигур. 97 Задание § Найти и протестировать программы для построения фрактальных фигур. 97