Вы находитесь на странице: 1из 31

Алгоритмизация

Тема 1. ОБЩИЕ СВЕДЕНИЯ ОБ АЛГОРИТМАХ


Алгоритм — это последовательность команд, предназначенная
исполнителю, в результате выполнения которой он должен
решить поставленную задачу. Алгоритм должен описываться на
формальном языке, исключающем неоднозначность толкования.
Основными свойствами алгоритмов являются:
1. Универсальность (массовость) - применимость алгоритма к
различным наборам исходных данных.
2. Дискретность - процесс решения задачи по алгоритму разбит
на отдельные действия.
3. Однозначность - правила и порядок выполнения действий
алгоритма имеют единственное толкование.
4. Конечность - каждое из действий и весь алгоритм в целом
обязательно завершаются.
5. Результативность - по завершении выполнения алгоритма
обязательно получается конечный результат.
6. Выполнимость - результата алгоритма достигается за
конечное число шагов.
Алгоритм считается правильным, если его выполнение дает
правильный результат. Соответственно алгоритм содержит
ошибки, если можно указать такие допустимые исходные
данные или условия, при которых выполнение алгоритма либо
не завершится вообще, либо не будет получено никаких
результатов, либо полученные результаты окажутся
неправильными.
Выделяют три крупных класса алгоритмов:
- вычислительные алгоритмы, работающие со сравнительно
простыми видами данных, такими как числа и матрицы, хотя сам
процесс вычисления может быть долгим и сложным;
- информационные алгоритмы, представляющие собой набор
сравнительно простых процедур, работающих с большими
объемами информации (алгоритмы баз данных);
- управляющие алгоритмы, генерирующие различные
управляющие воздействия на основе данных, полученных от
внешних процессов, которыми алгоритмы управляют.
Разновидности структур алгоритмов
Различают следующие структуры алгоритмов:
1)линейные;
2)разветвляющиеся;
3)циклические.
Линейный вычислительный процесс – это процесс, в котором
направление вычислений является единственным.
Разветвляющийся вычислительный процесс – это процесс, в
котором направление вычислений определяется некоторыми
условиями.
Циклический вычислительный процесс – процесс, в котором
отдельные участки вычислений выполняются многократно.

Дополнительная информация на сайте


Способы описания алгоритмов
Алгоритм может быть записан различными способами:
Словесное описание (на естественном языке) алгоритма
представляет собой описание структуры алгоритма на
естественном языке. Например, к приборам бытовой техники,
как правило, прилагается инструкция по эксплуатации, т. е.
словесное описание алгоритма, в соответствии с которым
данный прибор должен использоваться.
Формальное описание - на формализованном языке, например
на языке программирования.
Графическое описание алгоритма в виде блок-схемы – это
описание структуры алгоритма с помощью геометрических фигур
с линиями связи.
Блок схема алгоритма – это графическое представление метода
решения задачи, в котором используются специальные символы
для отображения операций.
Основные элементы блок-схем:
Каждый из перечисленных способов изображения алгоритмов
имеет и достоинства и недостатки. Например, словесный способ
отличается многословностью и отсутствием наглядности, но дает
возможность лучше описать отдельные операции. Графический
способ более наглядный, но часто возникает необходимость
описать некоторые операции в словесной форме.
Тема 2. РАЗНОВИДНОСТИ СТРУКТУР АЛГОРИТМОВ

Разновидности структур алгоритмов


Различают следующие структуры алгоритмов:
1)линейные;
2)разветвляющиеся;
3)циклические.
Линейный вычислительный процесс – это процесс, в котором
направление вычислений является единственным.
Разветвляющийся вычислительный процесс – это процесс, в
котором направление вычислений определяется некоторыми
условиями.
Циклический вычислительный процесс – процесс, в котором
отдельные участки вычислений выполняются многократно.
Циклические алгоритмические структуры бывают двух типов:
• циклы, со счетчиком, в которых тело цикла выполняется
определенное количество раз;
• циклы с условием, в которых тело цикла выполняется, пока
условие истинно.
Цикл со счетчиком. Когда заранее известно, какое число
повторений тела цикла необходимо выполнить, можно
воспользоваться циклической инструкцией (оператором цикла со
счетчиком) For . . . Next
Циклы с условием. Часто бывает так, что необходимо повторить
тело цикла, но заранее неизвестно, какое количество раз это
надо сделать. В таких случаях количество повторений зависит от
некоторого условия. Такой цикл реализуется с помощью
инструкции Do ... Loop.
Также есть циклы с постусловием while do и с предусловием do
whilile различие в том, что цикла с предусловием, выполняется
обязательно как минимум один раз, независимо от того,
выполняется условие или нет.
Тема 3. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
Общие сведение структурного программирования
Структур́ ное программи́рование — методология разработки
программного обеспечения, в основе которой лежит
представление программы в виде иерархической структуры
блоков.
Структурное программирование основано на модульной
структуре программного продукта и типовых управляющих
структурах алгоритмов обработки данных различных
программных модулей.
Типы управляющих структур:
– последовательность;
– альтернатива (условие выбора);
– цикл.

Распространены две методики (стратегии) разработки программ,


относящиеся к структурному программированию:
– программирование «сверху вниз»;
– программирование «снизу вверх».
Программирование «сверху вниз», или нисходящее
программирование – это методика разработки программ, при
которой разработка начинается с определения целей решения
проблемы, после чего идет последовательная детализация,
заканчивающаяся детальной программой.
Программирование «снизу вверх», или восходящее
программирование – это методика разработки программ,
начинающаяся с разработки подпрограмм (процедур, функций),
в то время когда проработка общей схемы не закончилась.
Достоинства структурного программирования по сравнению с
интуитивным неструктурным программированием:
· уменьшение трудностей тестирования программ;
· повышение производительности труда программистов;
· повышение ясности и читабельности программ, что
упрощает их сопровождение;
· повышение эффективности объектного кода программ как с
точки зрения времени их выполнения, так и с точки зрения
необходимых затрат памяти.
Представление структурированных схем.
Для графического представления структурированных схем
алгоритмов разработан ряд специальных методов
Например метод Дамке:
М. Дамке предложил для конструкций структурированных схем алгорит-
мов специальные обозначения, основанные на идеях нисходящего
проектирования. Основные конструкции структурного программирования
по методу Дамке изображаются следующим образом:

Рисунок 4 Представление функционального блока

Рисунок 5 Представление конструкции If-Then-Else


Рисунок 6 Представление цикла с предусловием

Рисунок 7 Представление цикла с постусловием

Рисунок 8 Представление конструкции цикла с параметром


Рисунок 9 Представление конструкции Case по методу Дамке

Достоинства метода Дамке:


· схема алгоритма, представленная с помощью данного метода, нагляд-
нее, чем классическая, особенно для больших программ;
· метод Дамке удобно использовать при разработке алгоритма по
методу нисходящего проектирования;
· метод Дамке удобен при коллективной разработке ПС, так как позволя-
ет независимо разрабатывать отдельные функциональные части
программы.
Восходящее и нисходящее проектирование.
Нисходящим - называют проектирование, в котором решение
задач высоких иерархических уровней предшествует решению
задач более низких иерархических уровней. Система
разрабатывается, в условиях, когда ее элементы неопределены
и, следовательно, сведения об их возможных свойствах носят
предположительный характер.
Восходящее - называется проектирование, в котором элементы
проектируются раньше системы, и, следовательно,
предположительный характер имеют требования к элементам.
На практике обычно сочетают восходящее и нисходящее
проектирование.
При восходящем проектировании разработка идет снизу вверх.
На первом этапе разрабатываются модули самого низкого
уровня. На следующем этапе к ним подключаются модули более
высокого уровня и проверяется их работоспособность. На
завершающем этапе проектирования разрабатывается головной
модуль, отвечающий за логику работы всего программного
комплекса.
Методы нисходящего и восходящего программирования
имеют свои преимущества и недостатки.
Недостатки нисходящего проектирования:
 Необходимость заглушек.
 До самого последнего этапа проектирования неясен
размер программного комплекса и его эксплутационные
характеристики, за которые, как правило, отвечают модули
самого низкого уровня.
Преимущество нисходящего проектирования – на самом
начальном этапе проектирования отлаживается головной
модуль (логика программы).
Преимущество восходящего программирования – не нужно
писать заглушки.
Недостаток восходящего программирования – головной модуль
разрабатывается на завершающем этапе проектирования, что
порой приводит к необходимости дорабатывать модули более
низких уровней. На практике применяются оба метода. Метод
нисходящего проектирования чаще всего применяется при
разработке нового программного комплекса, а метод
восходящего проектирования – при модификации уже
существующего комплекса.
Преобразование неструктурированных программ в
структурированные.

В общем случае произвольная программа не может быть


преобразована в структурированную программу, которая
реализует тот же алгоритм, построена с применением тех же
конструкций и не использует дополнительных переменных.
Такое преобразование возможно при использовании трех
известных методов:
 Дублирование кодов программы
 Введения переменной состояния
 Метод булевых признаков
Рассмотрим применение данного метода на примере
неструктурированной программы типа “решетка”.
Стрелки, соединяющие блоки на данной схеме алгоритма,
представляют собой операторы перехода.
Программа, реализующая данный алгоритм, не является
структурированной, так как не удовлетворяет условию «один вход – один
выход».
Сущность метода дублирования кодов: дублируются те модули
исходного алгоритма или программы, в которые можно войти из
нескольких мест (кроме последнего блока).
В соответствии с этим в исходной схеме необходимо дублировать
модули 5 (в него можно войти из модулей 2 и 3), 7 (в него можно войти из
модулей 4 и 5) и 8 (в него можно войти из модулей 5 и 6). Это приводит
исходную схему к виду, который иллюстрирует рисунок 3.8.
Полученная схема алгоритма является структурированной.
Чтобы доказать это, необходимо воспользоваться
преобразованиями Бома-Джакопини, т.е. последовательно преобразовать
схему к одному функциональному блоку с одним входом и одним
выходом. Для этого необходимо выполнить несколько шагов.
Шаг 1 преобразования.
На вышеприведенной схеме модули 4 и 7 представляют собой
конструкцию следования. В соответствии с преобразованиями
БомаДжакопини они могут быть сведены к одному функциональному
блоку Х1. Модули 5, 7, 8 представляют собой конструкцию If-Then-Else с
одним входом и одним выходом. Они также могут быть преобразованы к
одному функциональному блоку (Х2 и Y1). Аналогичные рассуждения
справедливы для конструкции следования, состоящей из модулей 6, 8 –
она сводится к функциональному блоку Y2. В результате предыдущая
схема принимает вид, который представляет рисунок 3.9.
Шаг 2 преобразования.
В полученной в результате выполнения шага 1 схеме группа
модулей 2, X1, X2 и группа модулей 3, Y1, Y2 представляют собой
конструкции If-Then- Else c одним входом и одним выходом. В
соответствии с преобразованиями Бома-Джакопини их можно
представить в виде функциональных блоков (блоков Х и Y
соответственно). В результате схема принимает вид, который
иллюстрирует рисунок 3.10.
Рисунок 3.8 – Преобразованная по методу дублирования кодов схема
алгоритма

Рисунок 3.9 Схема алгоритма после первого шага преобразования Бома-


Джакопини

Рисунок 3.10 – Схема алгоритма после второго шага преобразования Бома-


Джакопини

Шаг 3 преобразования.
В полученной в результате выполнения шага 2 схеме группа
модулей 1, X, Y представляет собой конструкцию If-Then-Else c одним
входом и одним выходом. В соответствии с преобразованиями Бома-
Джакопини ее можно представить в виде функционального блока Z. В
результате схема принимает вид конструкции следования (рисунок 3.11).
Шаг 4 преобразования.
В соответствии с преобразованиями Бома-Джакопини конструкцию
следования можно представить в виде функционального блока R (см.
рисунок
3.11).

Рисунок 3.11

Таким образом, с помощью четырех шагов преобразования


доказано, что полученная в результате применения метода дублирования
кодов схема алгоритма (см. рисунок 3.8) является структурированной.
Достоинством метода дублирования кодов является то, что его
удобно использовать при нисходящем проектировании программ.
Исходную задачу укрупненно можно представить в виде одного
функционального блока, а затем ее постепенно разукрупнять через
промежуточные схемы алгоритма к результирующей структурированной
схеме. В применении к рассмотренному алгоритму рассмотрите схемы
алгоритма (см. рисунок 3.9 – рисунок 3.11), соответствующие четырем
шагам преобразования, в обратном порядке.
Недостатки метода дублирования кодов:
1)неприменимость к программам с циклами;
2)дополнительные затраты памяти для хранения дублируемых модулей.
Поэтому метод используется, если дублируемые модули содержат
незначительное число операторов. Если модули велики, то вместо
дублирования кодов необходимо использовать вызываемые
подпрограммы с формальными параметрами.

Метод введения переменной состояния

Рассмотрим пример данной схемы на рисунке. Данная схема не


является структурированный так, как из цикла блоков 1, 3
существует два выхода нарушено условие “один вход один
выход”

Процесс преобразования программы в структурированную состоит


из следующей последовательности шагов.
1) Каждому блоку неструктурированной схемы приписывается
номер. Обычно первому блоку присваивается 1, последнему – 0.
2)В программу вводится дополнительная переменная целого типа
(например, J), называемая переменной состояния.
3)Функциональные блоки исходной схемы заменяются блоками,
выполняющими помимо основных функций преобразование переменной
J: переменной J присваивается значение, равное номеру блока-приёмника
в исходной схеме.
4)Аналогично преобразуются логические блоки. При этом, если в
логическом блоке условие истинно, то это соответствует одному значению
J, если ложно – другому.
5)Исходная схема перестраивается к виду, предложенному
АшкрофтомМанной (рисунок 3.13).
На данной схеме блоки 1а – nа являются аналогами
соответствующих блоков исходной схемы и, помимо этого, присваивают
значение переменной J.
В результате преобразований Ашкрофта-Манны исходная
неструктурированная схема рассматриваемого примера (см. рисунок 3.12)
принимает структурированный вид, который представляет рисунок 3.14.
При выполнении алгоритма, реализованного по методу
АшкрофтаМанны, переменная состояния J устанавливается в начальное
значение, равное номеру первого блока непреобразованной схемы (как
правило, это единица). Затем осуществляется последовательный опрос
переменной J, начиная с нуля и заканчивая максимальным номером блока
исходной схемы (в нашем примере он равен пяти). Выполняется тот блок
исходной схемы, номер которого соответствует текущему значению J.
Помимо этого в J заносится значение, равное номеру того блока исходной
схемы, который должен выполняться за текущим блоком. Когда значение
J станет равно нулю, выполняется последний блок непреобразованной
схемы (блок с номером ноль) и осуществляется выход из алгоритма.
Полученная по методу Ашкрофта-Манны схема алгоритма является
структурированной. Для доказательства этого достаточно последовательно
преобразовать данную схему к одному функциональному блоку.
Шаг 1 преобразования.
Конструкции 1а, 3а и 4а представляют собой конструкции If-Then-
Else с одним входом и одним выходом, конструкции 2а, 5а являются
конструкциями следования (см. рисунок 3.14). Следовательно, они могут
быть преобразованы к соответствующим функциональным блокам.
Данный шаг преобразований и все последующие шаги поясняет рисунок
3.15.
Следующие шаги преобразований необходимо проводить снизу
вверх схемы (см. рисунок 3.15).
Шаг 2 преобразования.
Символ “Решение” с проверкой условия J = 5 и блок 5а
представляют собой конструкцию If-Then-else (с одной ветвью) с одним
входом и одним выходом. Поэтому данный символ «решение» и блок 5а
могут быть заменены функциональным блоком I см рис 3.15

Рисунок 3.13

Вторая ветвь данного символа «Решение» может быть использована


для повышения надежности программы и на данном рисунке не показана
(данная ветвь обеспечивает возможность контроля непопадания значений
J в диапазон
0 – n, где n – максимальный номер блока в исходной схеме).
По сути, без проверки условия J = 5 в алгоритме можно обойтись,
перейдя на выполнение блока 5а по ветви «нет» проверки условия J = 4.

Рисунок 3.14

Рисунок 3.15

Шаг 3 преобразования.
Символ “Решение” с проверкой условия J = 4 и блоки I и 4а
представляют собой конструкцию If-Then-Еlse с одним входом и одним
выходом. Поэтому они заменяются функциональным блоком II (см.
рисунок
3.15).
Шаг 4 преобразования.
Символ “Решение” с проверкой условия J = 3 и блоки II и 3а
представляют собой конструкцию If-Then-Else с одним входом и одним
выходом. Поэтому они заменяются функциональным блоком III (см.
рисунок
3.15).
Шаг 5 преобразования.
Символ “решение” с проверкой условия J = 2 и блоки III и 2а
представляют собой конструкцию If-Then-Else с одним входом и одним
выходом. Поэтому они заменяются функциональным блоком IV (см.
рисунок
3.15).
Шаг 6 преобразования.
Символ “решение” с проверкой условия J = 1 и блоки IV и 1а
представляют собой конструкцию If-Then-Else с одним входом и одним
выходом. Поэтому они заменяются функциональным блоком V (см.
рисунок
3.15).
Шаг 7 преобразования.
Символ “решение” с проверкой условия J = 0 и блок V
представляют собой конструкцию обобщенного цикла с одним входом и
одним выходом. Поэтому они заменяются функциональным блоком VI
(см. рисунок 3.15).
Шаг 8 преобразования.
Функциональный блок начальной установки J = 1, блок VI и блок 0
представляют собой конструкцию следования с одним входом и одним
выходом. Поэтому они заменяются функциональным блоком VII (см.
рисунок
3.15).
Таким образом, за восемь шагов преобразований Бома-Джакопини
исходная схема, построенная по методу Ашкрофта-Манны, преобразована
в один функциональный блок с одним входом и одним выходом. Это
подтверждает, что она является структурированной.
Достоинства метода введения переменной состояния:
1)процесс преобразования программы отличается наглядностью и
чёткостью;
2)любому блоку исходной схемы соответствует определённое
состояние программы, что помогает выполнять тестирование и отладку
программы;
3)метод применим к программам любой структуры
(разветвляющимся и циклическим);
4)возможно автоматическое применение данного метода.
Недостатки метода:
1)структурированная форма схемы алгоритма сильно отличается от
топологии исходной схемы, что затрудняет ее понимание;
2)дополнительные затраты времени на анализ и установку значений
переменной сосотояния;
3)громоздкость результирующей схемы.

Метод булевого признака


Сущность метода булевого признака заключается в следующем.
Впрограмму, содержащую циклы, вводится некоторый признак.
Начальное значение признака задаётся до цикла. Цикл выполняется, пока
признак сохраняет своё исходное значение. Значение признака изменяется
при наличии некоторых условий внутри цикла.
Рассмотрим применение метода булевого признака на примере
преобразования неструктурированной схемы, которую представляет
рисунок
3.16.
Схема алгоритма (см. рисунок 3.16) не является структурированной,
поскольку входящий в нее цикл (блоки 1, 2, 3) содержит один вход и два
выхода. На данной схеме в блоках 1 и 2 записаны некоторые условия,
определяющие выполнение того или иного участка вычислений. Данные
условия обозначены как номера блоков 1 и 2. Значения 1 и 0 возле
выходов символов «Решение» соответствуют логическим значениям «да»
и «нет».
Всоответствии с рассматриваемым методом в исходную схему
вводится признак (например, J). Схема приобретает структурированный вид
и легко реализуется конструкциями обобщенного цикла и принятия
двоичного решения
(рисунок 3.17).
Принцип доказательства того, что данная схема является
структурированной, подробно рассмотрен в пп. 3.3.1 – 3.3.2.
Рисунок 3.17 схематично иллюстрирует шаги последовательности
преобразований Бома-Джакопини:
1)блок 4, функциональный блок J := 1 → блок I;
2)блоки 2, 3, I → блок II;
3)блок 5, функциональный блок J := 1 → блок III;
4)блоки 1, II, III → блок IV;
5)условный блок (решение) J = 1, блок IV → блок V;
6)блоки J := 0, V → блок VI.

Рисунок 3.16

Каждый из этих шагов преобразований на схеме (см. рисунок 3.17)


показан пунктирным функциональным блоком.
Достоинства метода булевого признака:
1)компактность, экономичность;
2)топология исходной схемы изменяется незначительно.
Недостаток метода булевого признака: метод предназначен для
использования только в циклах.
Иногда можно обойтись без специального признака, используя те
условия, которые уже есть в исходной схеме.
Например, рассмотренную исходную неструктурированную схему
можно представить так, как иллюстрирует рисунок 3.18.
На данном рисунке условие «(1 и 2) = 0» означает одновременное
равенство нулю условий, записанных в блоках 1 и 2 исходной
неструктурированнтй схемы (см. рисунок 3.16). Таким образом, тело
цикла 3 будет выполнено в том случае, если оба условия 1 и 2 не
выполняются.

Рисунок 3.17

Рисунок 3.18 Структурированная форма исходной схемы,


преобразованная без использования дополнительного признака
Результирующая схема (см. рисунок 3.18) содержит обобщенный
цикл с одним входом и одним выходом и конструкцию If-Then-Else, то
есть является структурированной.
Следует иметь в виду, что преобразование схемы к
структурированному виду без дополнительного признака возможно и
эффективно только при небольшом количестве условий.
Тема 4. СПОСОБЫ ГРАФИЧЕСКОГО ПРЕДСТАВЛЕНИЯ
СХЕМ АЛГОРИТМОВ

5. ПРИМЕНЕНИЕ СИМВОЛОВ
Схема
Схем Схема
Схема Схема ресурс
Наименование а работы
Си м вол програм взаимодейств ов
символа данн систем
мы ия программ систем
ых ы
ы

Символы данных

Основные

Данные + + + + +

Запоминаемые + - + + +
данные

Специфические

Оперативное + - + + +
запоминающее
устройство
Запоминающее + - + + +
устройство с
последовательной
выборкой
Запоминающее + - + + +
устройство с
прямым доступом
Документ + - + + +

Ручной ввод + - + + +

Карта + - + + +

Бумажная лента + - + + +

Дисплей + - + + +

Символы процесса
Основные

Процесс + + + + +

Специфические

Предопределенны - + + + -
й процесс

Ручная операция + - + + -

Подготовка + + + + -

Решение - + + - -

Параллельные - + + + -
действия
Граница цикла - + + - -

Символы линий

Основные

Линия + + + + +

Специфические

Передача - - - + -
управления

Канал связи + - + + +

Пунктирная + + + + +
линия
Специальные
символы
Соединитель + + + + +

Терминатор + + + - -
Комментарий + + + + +

Пропуск + + + + +

Примечание. Знак «+» указывает, что символ используют в данной схеме, знак «-»-не используют.

ПРИМЕРЫ ВЫПОЛНЕНИЯ СХЕМ


1. Схема данных

2. Схемы программы
Пример 1.
Пример 2.
3. Схема работы системы
4. Схема взаимодействия программ
5. Схема ресурсов системы