На практике широко используются два подхода к алгоритмизации:
1) традиционный подход (с использованием блок-схем);
2) структурный подход (с использованием структурной записи);
Традиционный подход к составлению алгоритмов с применением блок-схем грешит большим числом ошибок в программах из-за их громоздкости и запутанности. Из-за этого традиционный подход к составлению программ чреват большим числом ошибок в создаваемых программах.
Структурный подход к программированию заключается в обязательном предварительном составлении структурированных алгоритмов с записью их на псевдокоде. Простота чтения, понимания и исправления структурированных описаний позволяет существенно уменьшить количество ошибок в алгоритмах и программах и сократить время их отладки на ЭВМ.
При структурном подходе к составлению алгоритмов и программ используются три основных правила композиции:
1) альтернативный выбор;
2) циклический повтор;
3) вспомогательные алгоритмы (подпрограммы).
Структурированными считаются алгоритмы и программы составленными только с использованием указанных трех правил структурной композиции. Неструктурированными считаются алгоритмы и программы, в которых используются операторы goto ... или отсутствует ступенчатая запись циклов и альтернатив.
Основные правила структурной композиции алгоритмов с примерами записи их на языке структурированного Бейсика:
1. Альтернативный выбор:
Алгоритм Запись
если х > 0 тоif х > 0 then
у := ху = х
иначеelse
у := -ху = -х
кеслиend if
2. Циклический повтор:
Алгоритм Запись
пока х > 1 циклdo while х > 1
х:= х/2х = х/2
кцикл loop
3. Вспомогательные алгоритмы (подпрограммы).
Алгоритм Подпрограмма
алг «у = |х|»mod: 'у = |х|
нач '
если х > 0 тоif х > 0 then
у := х у = х
иначеelse
у := -х у = -х
всеend if
конreturn
Обращение к алгоритмуОбращение к подпрограмме
«у = |х|»gosub mod
В качестве иллюстрации приведем пример структурированного алгоритма «Галерея картинок» и соответствующей структурированной программы:
Сценарий «Галерея картинок»
Список картинок:
1. треугольник
2. прямоугольник
3. кольцо
номер =?«N»
n = 1 n =2 n = 3
В соответствии с этими четырьмя картинками построим три вспомогательных алгоритма рисования отдельных картинок из «Галереи» и общий алгоритм выбора картинок в соответствии с приведенным выше сценарием:
алг «Галерея картинок»
нач алг «рисунок_треугольника»
вывод («Список картинок:») нач
вывод («1. треугольник») линия (150,50)-(100,100)
вывод («2. прямоугольник») линия (150,50)-(200,100)
вывод («3. кольцо») линия (100,100)-(200,100)
запрос(«номер =», n) кон
графический_экран
если n = 1 то алг «рисунок_прямоугольника»
рисунок_треугольника нач
инес n = 2 то рамка (50,50)-( 150,100)
рисунок_прямоугольника кон
инес n = 3 то
рисунок_кольца алг «рисунок_кольца»
иначе нач
вывод («нет такого рисунка») окружность (100,100), 20
все окружность (100,100),50
кон кон
Реализация данного алгоритма в виде структурированной программы:
Алгоритмы: Программа:
алг «Галерея картинок»'Галерея картинок
начcls
вывод («Список картинок:»)print «Список картинок:»
вывод («1. треугольник»)print «1. треугольник»
вывод («2. прямоугольник»)print «2. прямоугольник»
вывод («З. кольцо»)print «3. кольцо»
запрос(«номер =», n)input «номер =», n
если n = 1 тоif n = 1 then
рисунок_треугольникаgosub treug
инеc n = 2 тоif n = 2 then
рисунок_прямоугольникаgosub box
инеc n = 3 тоif n = 3 then
рисунок_кольцаgosub ring
инеc п < 1 или n > 3 тоif n < 1 or n >3 then
вывод («нет такого рисунка»)print «нет такого рисунка»
все'все
конend
алг «рисунок треугольника»treug: 'рисунок треугольника
начcls
графический_экранscreen 2,0
линия (150,50)-( 100,100)line (150,50)-(100,100),3
линия (150,50)-(200,100)line (150,50)-(200,100),3
линия (100,100)-(200,100)line (100,100)-(200,100),3
конreturn
алг «рисунок прямоугольника»box: 'рисунок прямоугольника
начcls
графический_экранscreen 2,0
рамка (50,50)-(150,100)line (50,50)-(150,100),3,b
конreturn
алг «рисунок кольца»ring: 'рисунок кольца
начcls
графический_экранscreen 2,0
окружность (100,100),20circle (100,100),20
окружность (100,100),50circle (100,100),50
конreturn
Данный подход - составление структурированных алгоритмов может применяться к составлению структурированных программ для любых ЭВМ на любых языках программирования - Паскаль, Си, Ада, Модула и т. д.
На практике используется более широкий набор правил структурной композиции алгоритмов и программ, принятых в современных языках программирования, ~ правила альтернативного выбора, а также циклы с выходами и со счетчиками.
1. Условные действия.
если у < 0 то if у < 0 then
вывод («недопустим») print «недопустим»
кесли end if
2. Многоальтернативный выбор.
если х > 1 то if х > 1 then
у: = 1 у = 1
инес х < -1 то elseif х < -1 then
у: = -1 у = -1
иначе else
у: = х у = х
кесли end if
3. Циклы со счетчиком:
от k = 1 до п цикл for k = 1 to n
вывод (k×k) print k*k
кцикл next k
4. Циклы с выходами.
цикл do
s: = s + xs = s + x
при х < 1 выход if х < 1 then exit do
х: = x/2x = x/2
кцикл loop
В циклах в общем случае возможны несколько выходов. Дополнительные выходы считаются допустимыми даже для циклов со счетчиками. Приведем примеры решения задач с использованием дополнительных правил структурирования алгоритмов и программ.
Пример записи структурированных алгоритмов и программ с использованием циклов для алгоритма игры-эксперимента «звездное небо»:
АлгоритмПрограмма
алг «звездное небо» ' звездное небо»
нач сls
цикл do
запрос(«звезд=», п) input «звезд=», n
при п <= 0 выход if n <= 0 then exit do
графический_экран screen 2,10
от k = 1 до п цикл for k = 1 to n
х: = случайное [0:200]х = rnd*200
у: = случайное [0:200]у = rnd*200
точка (х,у) pset (x,y),3
кцикл next k
кцикл end do
кон end
Пример структурированного алгоритма и программы с применением многоальтернативного выбора и циклов с несколькими выходами:
АлгоритмПрограмма
алг «угадай-ка»' угадай-ка
нач cls
вывод («Угадай-ка число») print «Угадай-ка число»
вывод («от 1 до 100») print от 1 до 100»
z: = случайное [0:100] z = int (rnd*100)
цикл do
запрос («число =», х)input «число =», х
при х = z выхif х = z then exit do
если х < z тоif х < z then
вывод («мало»)print «мало»
инеc х > z тoelseif х > z then
вывод («много»)print «много»
всеend if
кциклend do
вывод («молодец, умница»)print «молодец, умница»
конend
В о п р о с ы
1. Что такое алгоритмизация?
2. Что такое структурированные алгоритмы?
3. Что такое неструктурированные алгоритмы?
4. В чем достоинства структурированных программ?
5. В чем недостатки неструктурированных программ?
6. Можно ли гарантировать отсутствие ошибок в программах?
З а д а ч и
1. Постройте вспомогательные алгоритмы и подпрограммы с выделением параметров для рисования следующих блоков:
а) крыша;
б) дерево;
в) стена с окном;
г) столб.
2. Предложите рисунки и составьте алгоритмы рисования, используя вспомогательные алгоритмы из предыдущего задания, для следующих строений:
а) домика с окном и деревом;
б) домика с двумя окнами;
в) домика с собачьей будкой;
г) двухэтажного домика,
3. Составьте алгоритм вывода на экран полной таблицы умножения.