- •Внутреннее представление данных
- •1) Представление чисел
- •2) Представление текстовых данных.
- •3) Представление мультимедийной информации
- •2. Основные этапы обработки программ пользователя.
- •Средства записи алгоритмов. Виды алгоритмов
- •4. Основные этапы решения задачи на компьютере.
- •Структура программы на языке Паскаль
- •6. Идентификаторы, числа, строки, выражения .
- •Операторы ввода/вывода данных
- •8. Числовые типы данных .
- •Полезные функции
- •Логические операции над битами
- •Символьный тип данных
- •10. Логический тип данных (Boolean) .
- •11.Перечисляемый и ограниченный типы.
- •Функция succ(X)
- •Функция pred(X)
- •Функция ord(X)
- •12. Раздел описания типов и констант . Типизированные константы.
- •Оператор присваивания, составной и условные операторы
- •Составной оператор
- •Оператор if-else
- •14. Операторы цикла.
- •Циклы включают в себя
- •Цикл for
- •Итерационные циклы Цикл while
- •Цикл repeat
- •16. Оператор выбора.
- •Массивы и переменные с индексами
- •18. Сортировка массивов.
- •Метод "пузырька"
- •Сортировка вставками
- •Строковые типы данных.
- •20. Приведение типов в Паскале.
- •Правила работы с типами данных
- •Пример задачи, где используется явное преобразование типов
- •21. Тип множество (Set).
- •23. Файловые типы данных
- •Классификация файлов в tp
- •24. Типизированные файлы. Создание и просмотр файлов.
- •25. Корректировка и дозапись компонент в типизированных файлах.
- •26. Текстовые файлы.
- •27. Корректировка и дозапись информации в текстовый файл.
- •28.Описание и вызов процедур в Паскале.
- •Параметры-значения, параметры-переменные
- •29. Описание и вызов функций в Паскале.
- •30.Область действия переменных при использовании подпрограмм.
- •31.Способы передачи параметров в подпрограммы.
- •32.Рекурсивное описание процедур и функций.
- •Существует два вида рекурсий:
- •33. Динамические типы данных. Простейшие действия с указателями.
- •34.Создание и обработка динамических списков
- •35. Создание и обработка стеков.
- •36.Создание и обработка очередей.
- •37. Создание и использование таблиц.
- •40.Буферизированный и небуферизированный ввод данных.
31.Способы передачи параметров в подпрограммы.
Механизм передачи параметров в процедуры:
В момент вызова процедуры выделяется память под переменные процедуры.
Формальные параметры получают значения фактических.
Связь между параметрами и значениями разрывается.
Процедура завершила работу – память освобождается.
Передача параметров различных видов
При вызове подпрограммы в формальные параметры-значения передаются копии фактических. Далее связь между фактическими и формальными параметрами прерывается.
При вызове подпрограммы в формальные параметры-переменные передаются адреса фактических параметров переменных. Фактическое значение по указанному адресу меняется – реализуется возврат значений.
При вызове подпрограммы в формальные параметры-константы передаются адреса фактических параметров. Фактическое значение по указанному адресу не меняется. Экономим память и гарантируем сохранение значений исходных данных.
Бестиповые параметры передаются по адресу. Перед использованием бестиповых параметров требуется выполнить приведение формального бестипового параметра к какому-либо типу.
При вызове подпрограммы на место формальных параметров-процедур и параметров-функций осуществляется подстановка имен соответствующих фактическим параметрам процедур и функций
32.Рекурсивное описание процедур и функций.
Объект называется рекурсивным, если он содержит сам себя или определен через самого себя.
Рекурсия в программировании – один из важнейших принципов посторения подпрограмм, когда процедуры и функции могут вызывать сами себя.
Наличие условия в теле рекурсивной функции (или процедуры), при котором она больше себя не будет вызывать, очень важно. В противном случае, как и в ситуации с циклами, может произойти так называемое зацикливание.
Существует два вида рекурсий:
Прямая рекурсия – подпрограмма вызывает саму себя.
Вычисление факториала:
function f(n: integer):longint; |
begin |
if n = 0 then f := 1 |
else |
f := n*f(n-1); |
end;
Рекурсивные вызовы:
|
f(5) = 5 * f(4) = 5 * 4 * f(3) = 5 * 4 * 3 * f(2) = 5 * 4 * 3 * 2 * f(1) = 5 * 4 * 3 * 2 * 1 * f(0) = 5 * 4 * 3 * 2 * 1 * 1 = 120 |
Возведение в степень рекурсивно:
function power (x:real; n:integer):real; begin if n=0 then power:=1 else if n mod 2=0 then power:=power (x*x,n div 2) else power:=x*power (x*x, n div 2);
end; var y:real; begin y:=power (2,5); writeln (y:2:2); readln; end.
Рекурсивные вызовы :
Power (2,5)=2*power (4,2)=2*power (16,1)=2*16*power (256,0)=2*16*1=32
Косвенная рекурсия – опережающее описание (a вызывает b, b вызывает a).
Приведем пример программы, иллюстрирующей косвенные рекурсивные вызовы процедур. В этой программе процедуры Rec1 и Rec2 рекурсивно вызывают друг друга, поочередно уменьшая свои фактические параметры. Легко видеть, что обе процедуры работают с одной глобальной переменной А, которая передается в них по ссылке. Критерием завершения работы является обращение этой переменной в ноль.
Обратите внимание, что в программе необходимо предварительное определение второй процедуры Rec2, так как ее вызов встречается в процедуре Rec1, т.е. перед ее полным описанием.
Program KosvRecurs; Var A : integer; Procedure Rec2 (Var Y:integer); Forward; Procedure Rec1 (Var X:integer); Begin X := X-1; if X>0 then Rec2; writeln (X) End; Procedure Rec2 (Var Y:integer); Begin Y := Y div 2; if Y>2 then Rec1; writeln (Y) End; Begin A := 15; Rec1(A); End. |
Косвенная рекурсия используется при описании типа указатель на запись (в которой находится поле - указатель на такую же запись).
type ptr=^rec;
rec=record
str:string;
p:ptr;
end;