Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике все.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
986.62 Кб
Скачать

Пример 51

program FactorIt; {вычисление факториала с использованием итерации} var

F, N, I: integer;

begin

writeln('Введите целое число '); read(N); F := 1; for I := 1 to N do

F := F * I;

writeln('Факториал', N:4, '=', F);

end.

Бесспорно, что реализация вычисления факториала в примере 51 является более традиционной, однако в этом случае используется три переменных.

Сформулируем свойства рекурсивных алгоритмов:

1. Наличие тривиального случая. Правильный рекурсивный алгоритм не должен создавать бесконечную последовательность вызовов самого себя. Для этого он обязательно должен содержать нерекурсивный выход, т.е. при некоторых исходных данных вычисления в алгоритме должны производиться без вызовов его самого - тривиальный случай. Примером тривиального случая в рекурсивном алгоритме вычисления N! является условие N = 0. 2. Определение сложного случая в терминах более простого. При любых исходных данных нерекурсивный выход должен достигаться за конечное число рекурсивных вызовов. Для этого каждый новый вызов рекурсивного алгоритма должен решать более простую задачу, т.е. рекурсивный алгоритм должен содержать определение некоторого сложного случая в терминах более простого случая. В случае вычисления факториала - это вычисление по формуле N! = N * (N-1)!, где N уменьшается при каждом рекурсивном вызове.

Когда нужна рекурсия? Выбор зависит от конкретной задачи. В общем случае рекурсия требует дополнительных расходов памяти, т.к. она реализуется с использованием стеков, однако, если задача или используемые данные определены рекурсивно, применение рекурсии часто дает более простое решение и реализация алгоритма выглядит изящнее.

Реализация объектно-ориентированного подхода в турбо-паскале

При разработке больших программных систем возникают трудности, связанные с четырьмя основными причинами: "... сложностью проблемы, сложностью управления процессом разработки, сложностью обеспечения гибкости конечного программного продукта и сложностью описания поведения отдельных подсистем." [1]. Г. Буч предлагает пять признаков сложной системы:

1. Сложная система состоит, как правило, из взаимосвязанных подсистем, т.е. имеет иерархическую структуру. 2. Выбор низшего уровня иерархии достаточно произволен. 3. Связи внутри структуры обычно сильнее связей между структурами. 4. Иерархические системы состоят из нескольких подсистем разного типа, реализованных в различном порядке и в разнообразных комбинациях. 5. Работающая сложная система неизбежно оказывается результатом развития работающей простой системы, а сложные объекты становятся элементами низших уровней абстракции.

Объектно-ориентированный подход предполагает поиск общих абстракций для сложной системы. Под абстракцией принято понимать существенные характеристики объекта, которые определяют его особенности. В качестве таких характеристик можно выделить типовую и структурную иерархии. Основным видом типовой иерархии является структура классов (иерархия по номенклатуре), а структурной иерархии - структура объектов (иерархия по составу). Объект можно представить как реализацию некоторой абстракции в виде объединения данных и правил (методов) их преобразования. Объект обладает состоянием, поведением и индивидуальностью. Структура и поведение схожих объектов определяет общий для них класс. Понятие класса и объекта тесно связаны. Однако существует важное отличие: объект является конкретной реализацией, определенной во времени и в пространстве. Класс определяет некоторую абстракцию - множество объектов. Можно сказать, что любой объект является экземпляром класса.