- •Оглавление
 - •1. 2. Среда Турбо-Паскаль
 - •1. 3. Структура языка Турбо-Паскаль
 - •1. 4. Типы переменных
 - •Var a1, a2 : array [ 1 . . 1000 ] of real ;
 - •Var m1: array[1..200] of integer; a1: array[100..200] of real;
 - •Var t1,t2:Date_m; c1:Ruch_b; s1:Lat_b; a1,a2:Otmetka; b:Ball;
 - •1. 5. Структура программы
 - •1. 6. Операции и стандартные функции
 - •1. 7. Операторы Турбо-Паскаля
 - •Составной оператор Begin "операторы" end;
 - •1. 7. 1. Операторы ввода/вывода данных
 - •Операторы вывода данных на экран Write("сп"); или Writeln("сп");
 - •X1, y1, z1: integer; xb, yb, zb: boolean;
 - •Var n, X, y: real;
 - •1. 7. 2. Оператор выбора
 - •0..9: Writeln('однозначное');
 - •1. 7. 3. Условный оператор
 - •If "условие" Then "оператор1" Else "оператор2";
 - •Var V : integer; Then
 - •If Writeln(a2)
 - •1. 7. 4. Оператор цикла с параметром
 - •Var a, s, Sn, I, n: word;
 - •Var s, Sn, pr: real; I, n: integer;
 - •Var y, X, a, dx: real; I, j: integer;
 - •Var a1, a2, n1, s, g: longint; bb: boolean;
 - •1. 7. 5. Операторы цикла с условием
 - •Var y, y1, X, eps, a, k: real; n: Word;
 - •1. 7. 6. Операторы ограничения и прерывания цикла
 - •1. 7. 7. Оператор перехода к метке
 - •Var b, a: longint;
 - •1. 8. Блок - схемы алгоритмов
 - •1. 9. Составление диалоговых программ
 - •Var I, n, n1: integer;
 - •1. 10. Массивы
 - •1. 10. 1. Линейные массивы
 - •1. 10. 2. Работа с элементами переменной строкового типа
 - •1. 10. 3. Двумерные массивы
 - •Var a: array[1..30, 1..7] of byte;
 - •2 S[2] Массив a: a[2, 1] a[2, 2] a[2, 3] a[2, 4] . . . A[2, j] . . . A[2, m]
 - •1. 10. 4. Создание баз данных с использованием массивов записей
 - •I: byte;
 - •1. 10. 5. Работа с большими массивами
 - •I, j: word;
 - •1. 11. Текстовые файлы
 - •Var c: char; j, I: word;
 - •1. 12. Разработка функций и процедур
 - •1. 12. 1. Описание функций и процедур
 - •Viz(Dat); { вызов процедуры } Readln end.
 - •Var z: r_1000; x1, x2: real; n: word;
 - •Var X: m_30х30_r; I, j, n, m: byte;
 - •Var a, b, c, ha, hb, hc: real;
 - •Var p, s: real;
 - •Var y, y1, x1: real;
 - •Var a, k, y: real; I: longint;
 - •1. 12. 2. Рекурсивные функции и процедуры
 - •Var n_1: Longint; I: word;
 - •Var ch: char; I: word;
 - •Var n, n1: integer;
 - •1. 13. Разработка модулей
 - •Interface
 - •1. 14. Модуль сrt
 - •1. 14. 1. Управление экраном в текстовом режиме
 - •InsLine; Вставка пустой строки.
 - •1. 14. 2. Управление клавиатурой
 - •Var n : word; f, dx, X, y, I, j, xm, ym : byte;
 - •1. 14. 3. Работа с символьными переменными
 - •Var r: registers;
 - •X, y, I, xm, ym: byte;
 - •1. 14. 4. Работа со строковыми переменными
 - •1. 14. 5. Управление звуковыми сигналами
 - •1. 15. Модуль Graph
 - •1. 15. 1. Инициализация графического режима
 - •InitGraph(Gd, Gm, 'way');
 - •1. 15. 2. Простейшие графические процедуры и функции
 - •Var X, y, VX, Vy, p: array[1..N] of integer; ch: char;
 - •I1, i2, zx, zy, ax, ay, I, k: integer;
 - •1. 15. 3. Рисование геометрических фигур
 - •1. 15. 3. 1. Построение заполненных фигур
 - •Var I, x1, y1, x2, y2, Gd, Gm : integer;
 - •1. 15. 3. 2. Работа с линиями
 - •1. 15. 3. 3 Создание графических узоров
 - •1. Перемещение фигуры.
 - •2. Масштабирование фигуры.
 - •3. Симметричное отображение фигуры.
 - •4. Штриховка углов.
 - •Var xx1, xx2, yy1, yy2, I: integer; k: real;
 - •5. Использование рекурсии.
 - •Var gD, gM, n, X, y, x1, y1, k: integer; dl, ugol, ugol_0, s, I: real;
 - •6. Создание узоров построением зеркальных отображений фигуры.
 - •Var I, j : integer;
 - •Var I, j : integer;
 - •1. 15. 3. 4. Работа с текстом в графическом режиме
 - •Var Gd, Gm, k, X, y, Size: integer; s: string;
 - •1. 15. 5. Мультипликация
 - •1. 15. 5. 1. Мультипликация с запоминанием части экрана
 - •Var Gd, Gm, I, j, k, Size, X, y, Xmax, Ymax: Integer;
 - •1. 15. 5. 2. Мультипликация с чередованием видеостраниц
 - •1. 15. 5. 3. Мультипликация с управлением движения образа
 - •1. 15. 5. 4. Модификация контурного изображения
 - •Var Gd, Gm, I, j, k, n, xc, yc, r, m: integer;
 - •X, y, x1, y1, x2, y2: array[1..12] of integer; alfa: real;
 - •Глава 2. Программирование в среде Турбо - Паскаль
 - •2. 1. Геометрические построения на плоскости
 - •2. 1. 1. Построение графиков функций
 - •0  Left, right  GetMaxX
 - •Interface
 - •Var right, left, down, up: integer; k_xy, kx, ky, x_max, x_min, y_max, y_min: double; { описание глобальных переменных }
 - •Implementation
 - •Var XX, yy: word; xg_m, yg_m:integer;
 - •Var xg0, yg0:integer;
 - •1 Спираль a*fi 0 ... 8 -1 1 3 -
 - •4 Логарифмическая a*Exp(b*fi) -3 ... 3 -1 1 -1 0 1
 - •5 Спираль a*fi2 - b -8 ... 8 -1 1 2 0 1 2
 - •6 Роза a*Sin(b*fi) 0 ... 8 -1 1 2 целые и
 - •12 Строфоида a*Cos(2*fi)/Cos(fi) 0,1 ... 1,5 -3 -2 1 -
 - •13 Циссоида a*Sin2(fi)/Cos(fi) 0,1 ... 1,5 -1 1 2 -
 - •2. 1. 2. Графическое решение уравнений
 - •2. 1. 3. Уравнение прямой на плоскости
 - •2. 1. 4. Построение касательных и нормалей к плоским кривым
 - •2. 1. 5. Двумерные преобразования координат
 - •Var z: real;
 - •Var alfa: real;
 - •I_r; picture;
 - •2. 1. 6. Проецирование пространственного изображения тела на плоскость
 - •2. 2. Некоторые задачи физики
 - •2. 2. 1. Механика
 - •Var x3, y3, l, Lc, sa, ca, s3, c3: double;
 - •2. 2. 2. Оптика и свет
 - •2. 2. 3. Электростатика и электромагнетизм
 - •2. 3. Математическое моделирование физических процессов
 - •2. 4. Моделирование многовариантных задач с использованием графов
 - •2. 5. Программы математических расчетов
 - •2. 5. 1. Численное решение уравнений
 - •2. 5. 2. Аппроксимация по методу наименьших квадратов
 - •2. 5. 3. Численный расчет интегралов
 - •2. 5. 4. Сортировка одномерных массивов
 - •Список литературы
 
1. 12. 2. Рекурсивные функции и процедуры
Если одна процедура (Pr_2) вызывает в своем разделе выполнения другую (Pr_1), то вызываемая процедура должна быть описана во внешней программе перед описанием вызывающей процедуры, либо внутри вызывающей процедуры. Возможны и циклические случаи: если процедура вызывает сама себя - прямая рекурсия , если обе процедуры вызывают в своих разделах выполнения друг друга - косвенная рекурсия.
60
Схема линейного взаимодействия процедур:



Pr_1 - раздел описания Pr_1 Pr_2 - раздел описания Pr_2
 
Pr_2 - раздел описания Pr_2 Pr_1 - раздел описания Pr_1
Вызов Pr_1 в процедуре Pr_2 Вызов Pr_1 в процедуре Pr_2
Внешняя программа Внешняя программа
Схема циклического взаимодействия процедур:
прямая рекурсия косвенная рекурсия


раздел описания программы Pr_2 - заголовок Pr_2 Forward;

Pr_1 - раздел описания Pr_1
 
Вызов
Pr_2 в процедуре Pr_1    
   
 
Pr_1  
-
раздел описания Pr_1                                   
      
Pr_2 - раздел описания Pr_2
Вызов Pr_1 в процедуре Pr_1 Вызов Pr_1 в процедуре Pr_2
Внешняя программа Внешняя программа
Если процедура вызывает сама себя ( прямая рекурсия ), то она описывается как обычно. Рекурсия традиционно применяется для итерационного расчета значения функции с использованием результатов предыдущего шага. Например, для расчета выражений вида: X! ( X факториал ), XN ( X в степени N ), вычисляемых по формулам: XN= XN-1 * k, где k - постоянная или переменная величина. В общем случае рекурсия применяется при расчете функции от функции: FN(x) = FN-1(x). При этом процесс происходит в два этапа: обратное движение с запоминанием цепочки расчета в оперативной памяти и прямое движение - расчет с использованием полученной цепочки. Рекурсивные процедуры требуют больше памяти для запоминания промежуточных результатов, чем обычные циклические операторы, поэтому рекурсии используются реже. В случае рекурсивных процедур следует обязательно предусмотреть условие окончания вызова процедуры.
Приведем пример традиционного использования рекурсии. Пусть требуется рассчитать число осколков, полученных в результате деления тела за "N" миллисекунд, если каждый осколок делится на два за одну миллисекунду. Тогда при N=0 число осколков = 1, при N>0 число осколков = 2N = 2*2(N-1).
Функция, возвращающая число осколков, будет иметь вид:
Function K_O(N: word): Longint;
begin
if N=0 then K_O:=1 {условие окончания рекурсии}
else K_O:=2*K_O(N-1) {рекурсивный вызов}
end;
61
Пример функции, возвращающей число осколков, без использования рекурсии:
Function K_O(N: word): Longint;
