Второе правило – для работы алгоритма требуется память. В памяти размешаются входные данные, с которыми алгоритм начинает работать, промежуточные данные и выходные данные, которые являются результатом работы алгоритма. Память является дискретной, т.е. состоящей из отдельных ячеек. Поименованная ячейка памяти носит название переменной. В теории алгоритмов размеры памяти не ограничиваются, т.е. считается, что мы можем предоставить алгоритму любой необходимый для работы объем памяти. В школьной «теории алгоритмов» эти два правила не рассматриваются.
Третье правило – дискретность. Алгоритм строится из отдельных шагов (действий, операций, команд). Множество шагов, из которых составлен алгоритм, конечно.
Четвертое правило – детерменированность. После каждого шага необходимо указывать, какой шаг выполняется следующим, либо давать команду остановки.
Пятое правило – сходимость (результативность). Алгоритм должен завершать работу после конечного числа шагов. При этом необходимо указать, что считать результатом работы алгоритма.
На практике наиболее распространены следующие способы представления алгоритмов:
· словесно-формульный (запись на естественном языке);
· графический (изображения из графических символов);
· псевдокод (полуформализованные описания алгоритмов на условном алгоритмическом языке);
· программный (тексты на языках программирования);
· с помощью граф-схем;
· с помощью сетей Петри.
При словесно-формульной записи алгоритмы записываются в виде текста с формулами по пунктам, определяющими последовательность действий. Для записи алгоритмов используются средства обычного языка, но с тщательно отрабатывают наборы слов и фраз, не допускающие повторений, синонимов, лишних слов. Принимаются определенные соглашения о форме записи, порядке выполнения действий, допускается использование математических символов.
Пример:
Даны два целых положительных числа, найти их наибольший общий делитель (НОД).
Решение этой задачи может быть получено последовательным делением вначале большего числа на меньшее, затем меньшего числа на полученный остаток, первого остатка на второй остаток и т.д. до тех пор, пока в остатке не получится нуль. Последний по счету делитель и будет искомым результатом.
Обозначим через M и N исходные целые числа, приняв в качестве их начальных значений заданные константы. Сведем деление к повторному вычитанию. Тогда алгоритм может быть сформулирован следующим образом:
1. задать два числа;
2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма;
3. определить большее из чисел;
4. заменить большее из чисел разностью большего и меньшего из чисел;
5. повторить алгоритм с шага 2;
2. Ввести (М, N);
3. Если M
N, то перейти к п.4, иначе перейти к п. 7;4. Если M>N, то прейти к п. 5, иначе перейти к п. 6;
5. М: = М-N; перейти к п. 3;
6. N: = N-М; перейти к п. 3;
7. НОД: =М;
8. Печатать (НОД).
Словесно-формульный способ не имеет широкого распространения по следующим причинам:
- такие описания строго не формализуемы;
- страдают многословностью записей;
- допускают неоднозначность толкования отдельных предписаний.
Графический способ представления алгоритмов является более компактным и наглядным по сравнению со словесным.
При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Внутри блока дается описание соответствующего действия.
Такое графическое представление называется схемой алгоритма или блок-схемой.
Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, т.к. зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.
Можно встретить даже такое утверждение: “Внешне алгоритм представляет собой схему – набор прямоугольников и других символов, внутри которых записывается, что вычисляется, что вводится в машину и что выдается на печать и другие средства отображения информации“. Здесь форма представления алгоритма смешивается с самим алгоритмом.
Принцип программирования “сверху вниз” требует, чтобы блок-схема поэтапно конкретизировалась и каждый блок “расписывался” до элементарных операций. Но такой подход можно осуществить при решении несложных задач. При решении сколько-нибудь серьезной задачи блок-схема “расползется” до такой степени, что ее невозможно будет охватить одним взглядом.
Блок-схемы алгоритмов удобно использовать для объяснения работы уже готового алгоритма, при этом в качестве блоков берутся действительно блоки алгоритма, работа которых не требует пояснений. Блок-схема алгоритма должна служить для упрощения изображения алгоритма, а не для усложнения.
При решении задач на компьютере необходимо не столько умение составлять алгоритмы, сколько знание методов решения задач (как и вообще в математике). Поэтому изучать нужно не программирование как таковое (и не алгоритмизацию), а методы решения математических задач на компьютере. Задачи следует классифицировать не по типам данных, как это обычно делается (задачи на массивы, на символьные переменные и т. д.), а по разделу “Требуется”.
Схема - это графическое представление алгоритма, дополненное элементами словесной записи. Каждый пункт алгоритма отображается на схеме некоторой геометрической фигурой-блоком (блочным символом), причем различным по типу выполняемых действий блокам соответствуют различные геометрические фигуры, изображаемые по ГОСТу.
ГОСТ 19.701-90 (обозначение символов соответствует международному стандарту ИСО 5807-85) распространяется на условные обозначения (символы) в схемах алгоритмов, программ, данных и систем и устанавливает правила выполнения схем, используемых для отображения различных видов задач обработки данных и средств их решения.
В таблице 1 приведены наиболее часто употребляемые блоки и даны пояснения к ним [1,2].
Графические символы на схеме соединяются линиями потока информации. Основное направление потока информации идет сверху вниз и слева на право (стрелки на линиях могут не указываться). В других случаях применение стрелок обязательно. По отношению к блоку линии потока могут быть входящими или выходящими. Количество входящих линий для блока принципиально не ограничено. Выходящая линия может быть только одна. Исключение оставляют логические блоки, имеющие не менее двух выходящих линий потока, каждая из которых соответствует одному из возможных исходов проверки логического условия, а также блоки модификации.
Блок вычислительный процесс применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Для улучшения наглядности схемы несколько отдельных блоков обработки можно объединять в один блок.
Таблица 1. Условные графические обозначения, применяемые при составлении схем алгоритмов
№ п/п | Название символа | Символ | Отображаемая функция |
1 | Блок вычислений | Вычислительное действие или последовательность вычислительных действий | |
2 | Логический блок | Выбор направления выполнения алгоритма в зависимости от некоторых условий | |
3 | Блоки ввода – вывода | Общее обозначение ввода или вывода данных | |
Вывод данных, носителем которых служит документ | |||
4 | Начало-конец | Начало или конец программы, останов, вход или выход в подпрограммах | |
5 | Предопределенный процесс | Вычисления по стандартной подпрограмме или подпрограмме пользователя | |
6 | Блок модификации | Выполнение действий, изменяющих пункты алгоритма | |
7 | Соединитель | Указание связи между прерванными линиями потока информации в пределах одной страницы | |
8 | Межстраничный соединитель | Указание связи между частями схемы, расположенными на разных листах | |
9 | Магнитный диск | Ввод-вывод данных, носителем которых служит магнитный диск |
Логический блок используется для обозначения переходов управления по условию. В каждом блоке "решение" должны быть указаны вопрос, условие или сравнение, которые он определяет.