- •2 Организация программ линейной структуры. Примеры. Ввод-вывод различных типов данных и матриц.
- •3 Операторы передачи управления. Организация программ разветвляющейся структуры. Примеры.
- •4 Организация программ циклической структуры. Виды циклов. Примеры использования.
- •6 Классификация типов данных. Описание характеристик каждого типа данных. Описание конструкций пользовательских типов данных с помощью синтаксических диаграмм. Примеры использования.
- •7 Файловые типы данных. Работа с файлами различных типов в режиме последовательного доступа. Работа с файлами в режиме прямого доступа. Обработка ошибок.
- •8 Процедуры и функции. Сравнительная характеристика. Примеры использования.
- •9 Структура программ с использованием подпрограмм. Виды параметров. Использование массивов в качестве параметров. Параметр – открытый массив.
- •10 Параметры процедурного типа. Примеры использования.
- •11 Локальные и глобальные переменные. Процедуры без параметров. Побочные эффекты. Примеры.
- •12 Рекурсивные подпрограммы в языке Паскаль: организация, примеры использования. Взаимная рекурсия. Директива forward.
- •13 Задание начальных значений переменным. Примеры использования в программах для различных типов данных, определяемых пользователем.
- •14 Общая характеристика модуля и примеры его использования. Структура программы и структура модуля.
12 Рекурсивные подпрограммы в языке Паскаль: организация, примеры использования. Взаимная рекурсия. Директива forward.
{Если вам попадёт на экзамене этот вопрос(forward), попросите Юрия Евтиховича заменить вам этот вопрос}
Все подпрограммы в языке Паскаль (и функции, и процедуры) являются рекурсивными. Это означает, что внутри подпрограммы можно обращаться к самой подпрограмме. Однако, чтобы такое обращение имело смысл, подпрограмма должна быть организована должным образом, т.е. реализовала бы именно рекурсивный алгоритм. Например, составим функцию, вычисляющую сумму элементов одномерного массива. Если использовать известный прием накопления суммы, предусматривающий вычисление суммы в цикле, то такая функция может иметь следующий вид:
program fun2rec;
{$APPTYPE CONSOLE}
uses
SysUtils;
const nn=20;
type mas=array[1..nn] of real;
var a:mas;
i,n:integer; s:real;
function sum(a:mas;n:integer):real;
var i:integer;
begin
result:=0;
for i:=1 to n do
Result:=Result+a[i];
end;
begin
readln(n);
for i:=1 to n do
read(a[i]);
readln;
s:=sum(a,n);
writeln('s= ',s:6:1);
readln;
end.
Рекурсивный вариант:
function sum(a:mas;n:integer):real;
begin
if n=1 then sum:=a[n]
else sum:=a[n]+sum(a,n-1)
end;
При создании косвенной рекурсии возникает проблема: как описать вызываемую процедуру. Как известно, в Паскале все переменные, константы, метки, процедуры должны быть описаны до того, как будут упомянуты в операторах или выражениях, в противном случае компилятор объявит их имена неизвестными. В косвенной рекурсии процедура "А" вызывает процедуру "В", которая не описана. Выход из ситуации в следующем: используется опережающее описание с помощью директивы FORWARD. Эта директива объявляет только заголовок вызываемой процедуры, заменяя собой тело процедуры, откладывая описание содержимого (раздела операторов) на дальнейшее. Местоположение раздела операторов уже не играет роли, и в нем можно не указывать формальные параметры, а ограничиться лишь именем подпрограммы:Procedure B(y:integer); FORWARD;
{описание раздела операторов процедуры "В"}
{откладывается на дальнейшее}
Procedure A(x:integer);
begin
....................
B(x);
....................
end;
Procedure B; {формальные параметры описаны ранее}
begin
....................
A(y);
....................
end;
Теперь в процедуре "А" допустимо обращение к процедуре "В", ведь последняя уже описана, точнее известны ее формальные параметры и компилятор может правильно организовать ее вызов. Заголовок "Procedure B" перед текстом процедуры "В" содержит только имя процедуры, т.к. список формальных параметров был указан выше.
13 Задание начальных значений переменным. Примеры использования в программах для различных типов данных, определяемых пользователем.
В Delphiимеется возможность объявления переменных с заданным начальным значением. Такие переменные называютинициализированнымии объявляют в специальном конструкцииCONST.
Инициализированных переменных в программе можно изменять, так же как и обычные