Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
21
Добавлен:
06.09.2019
Размер:
1.63 Mб
Скачать

Глава 7 алгоритмизация и программирование

Наверняка можно утверждать, что каждый, читающий эти строки, знаком с термином <алгоритм>. Его применяют весьма широко и не только в области вычислительной техники и программирования. Так же несомненно и то, что у читателя сформировалось свое (пусть даже большей частью интуитивное) понимание смысла этого термина.

Термин происходит от имени средневекового математика Абу Джафара ибн Мусы аль-Хорезми. Редакция последней части имени ученого в европейских языках привела к образованию термина <алгорифм> или <алгоритм>. Европейцы, начавшие осваивать довременную десятичную систему счисления в XII в., знакомились с трудами арабских ученых, и труд упомянутого выше жителя Хорезма, посвященный правилам счета в десятичной системе счисления, был широко известен. Поэтому и наполнение термина <алгоритм> было следующим: операции над числами.

Через века старое, прежнее понимание этого термина стало утрачиваться, и данный термин стали применять по отношению к одному-единственному алгоритму - алгоритму Евклида.

7.1. Определение алгоритма

Алгоритм Евклида был предназначен для нахождения наибольше1

общего делителя пары натуральных чисел (m, n).

Алгоритм Евклида

1. { Нахождение остатка} r:=m mod n.

2. {Замена} m:=n; n:=r.

3. {Остановка?} Если n0, то переход к п.1.

4. {Остановка процесса} m-искомое число.

Представленное описание алгоритма - это последовательность шагов, направленных на достижение некоторого результата (наибольшего общего делителя).

Современное содержание понятия алгоритма можно определить следующим образом.

Алгоритм - точное предписание, которое задает алгоритмический процесс, начинающийся с произвольного исходного данного (из некоторой совокупности возможных для данного алгоритма исходных данных) и направленный на получение полностью определённого этим исходным данным результата.

Алгоритмический процесс - процесс последовательного преобразования конструктивных объектов (слов, чисел, пар слов, пар чисел, предложений и т.п.)., происходящий дискретными <шагами>. Каждый шаг состоит в смене одного конструктивного объекта другим.

Поскольку алгоритмы могут применяться к весьма произвольным объектам (числам, буквам, словам, графам, логическим выражениям и т.д.), в определении алгоритма используется специальный термин <конструктивный объект>, объединяющий в себе все эти возможные случаи. Так, в алгоритме Евклида под конструктивными объектами можно понимать пары чисел.

Смена конструктивных объектов в алгоритме Евклида может быть представлена следующим образом (для пары т=10, т=4): (10, 4)(4,2)(2, 0).

Как правило, для заданного алгоритма можно выделить семь характеризующих его независимых параметров:

  • совокупность возможных исходных данных,

  • совокупность возможных промежуточных результатов;

  • совокупность результатов;

  • правило начала;

  • правило непосредственной переработки;

  • правило окончания;

  • правило извлечения результата.

Для алгоритма Евклида эти семь параметров могут быть определены следующим образом:

1)1={(т, n)|тn}.

2) Р={(т, n)|тn}.

3) R={m|m>0}.

4) Ввести пару чисел (m, n) таких, что тп.

5) (m, n)(n, т(mod n)).

6) Если в паре (m, n) n=0, то останов.

7) Результатом является первое число пары (m, 0).

Вывод m на устройство вывода.

И теории алгоритмов изучаются алгоритмы, заданные в строгом формализованном виде. Для алгоритма Евклида эта форма может такой:

Определяется решающее правило (функция) - f.

f: PP;

f(m, n)=(m, n) if n = 0;

f(m, n)=(n, m(mod n)) if n0.

На практике в программировании очень часто используется задание алгоритмов в виде блок-схем.

Блок-схема - элементарный граф, вершины которого могут быть одного из трех типов: функциональная вершина, предикатная вершина, объединяющая вершина.

Функциональная вершина используется для представления функции f: XY.

Предикатная вершина используется для представления функции (или предиката) p: X(T,F), т.е. логического выражения, передающего управление по одной из двух возможных ветвей.

Объединяющая вершина представляет передачу управления от одной из двух входящих ветвей к одной выходящей ветви.

Структурная блок-схема - это блок-схема, которая может быть выражена как композиция из четырех элементарных блок-схем: композиция, выбор (альтернатива), итерация (повторение).

Любая программа для машины может быть представлена структурной блок-схемой.

Важной особенностью приведенных структур является то, что они имеют один вход и один выход.

Структурное программирование - процесс разработки алгоритмов с помощью структурных блок-схем.

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

Программирование сверху вниз - это процесс пошагового разбиения алгоритма на все более мелкие части с целью получения таких элементов, для которых можно написать конкретные команды.

Структурное программирование сверху вниз - это процесс программирования сверху вниз, ограниченный использованием структурных блок-схем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]