
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Рекурсия и итерация
Рекурсия - это определение понятия самого через себя. В случае процедур и функций рекурсия используется в виде вызова функции самой себя в собственном теле. Это делается обычно для последовательного понижения размерности задач, пока решаемая задача не станет тривиальной. Запись решения задачи в виде последовательности рекурсивных вызовов функции обычно выглядит более понятно (более просто) по сравнении с обычным (нерекурсивным) решением.
Одно и то же вычисление факториала можно сделать несколькими способами:
n
fact(n)
=1*2*3*4*...*n
=
i
нерекурсивное (итерационное)
решение
i=1
Рекурсивное решение имеет вид:
1,при
n
=0
fact(n) =
fact(n-1)*n при n >0.
4!=(3!)*4
При таком задании имеем следующую цепочку вызовов:
Fact(3) 3*Fact(2) 3*( 2* Fact(1) ) 3*( 2*( 1* Fact(0)))
Fact(0)=1 завершает цепочку рекурсивных вызовов.
По завершению последнего вызова функции, Паскаль должен возвратить значение от каждого рекурсивного вызова, начиная с последнего.
Процедуры и функции как параметры
В качестве формальных параметров допускается использовать имена процедур или функций. При вызове подпрограммы на место формальных параметров процедур или функций осуществляется подстановка имен соответствующих им фактических процедур или функций.
Для передачи функций и процедур в качестве параметров в Турбо Паскале используется понятие процедурного типа, определяющего, какой вид подпрограммы (процедуру или функцию) можно использовать в качестве параметра и с какими параметрами, в свою очередь, должна быть эта подпрограмма. При объявлении процедурного типа указывается заголовок процедуры/функции, в котором опускается ее имя. Фактически этот параметр является параметром-значением, т. к. записывается без зарезервированного слова var.
Синтаксическая диаграмма процедурного типа:
Тип - процедура
Тип- функция
Туре
Proc_0 = Procedure; {тип-процедура}
Ргос_2 = Procedure(Var х, у); {тип-процедура }
Ргос_3 = Procedure(a, b : real; Var у : real); {тип-процедура}
Func_0 = Function : integer; {тип-функция }
Func_1 = Function(s : real): real; {тип-функция }
Установлены следующие правила использования подпрограмм в качестве параметров:
правила совместимости: процедурные типы для совместимости по присваиванию должны иметь одинаковое число формальных параметров, а параметры на соответствующих позициях в заголовках, должны иметь эквивалентный тип. Кроме того, для функций должны совпадать типы возвращаемых значений.
они не должны объявляться внутри других процедур или функций;
для установки правильных связей между вызывающими и вызываемыми подпрограммами они должны компилироваться с директивой компилятору {SF+} или иметь в заголовке опцию Far, что определяет «дальнюю» модель вызова этих подпрограмм и формирование их полного адреса;
согласно принципу опережающего описания объектов в Паскале, процедура или функция может обращаться только к той процедуре или функции, описание которых располагается перед описанием вызывающей процедуры или функции.
они не должны быть стандартными процедурами или функциями;