Кцикл
Do
Цикл
Cls screen 2,0 circle (100,100),20 circle (100,100),50
Кон
Графический_экран окружность (100,100),20 окружность (100,100),50
Нач
Screen 2,0
Кон
Графический_экран рамка (50,50)-(150,100)
Нач
Line (150,50)-(100,100),3 line (150,50)-(200,100),3 line (100,100)-(200,100),3
Cls screen 2,0
Кон
Графический_экран линия (150,50)-(100,100) линия (150,50)-(200,100) линия (100,100)-(200,100)
Нач
Gosub ring
Gosub box
Gosub treug
Нач
Кон
Нач окружность (100,100), 20 окружность (100,100),50
Рамка (50,50)-(150,100) кон
Кон
алг «рисунок_прямоугольника» нач
алг «рисунок_кольца»
Реализация данного алгоритма в виде структурированной программы:
Алгоритмы:
алг «Галерея картинок»
вывод («Список картинок:») вывод («1. треугольник») вывод («2. прямоугольник») вывод («З. кольцо») запрос(«номер =», n) если n = 1 то
рисунок_треугольника инеc n = 2 то
рисунок_прямоугольника инеc n = 3 то рисунок_кольца
Программа: 'Галерея картинок cls print «Список картинок:» print «1. треугольник» print «2. прямоугольник» print «3. кольцо» input «номер =», n if n = 1 then
if n = 2 then
if n = 3 then
инеc п < 1 или n > 3 то
вывод («нет такого рисунка») все кон
if n < 1 or n >3 then
|
|
print «нет такого рисунка» 'все end
алг «рисунок треугольника»
treug: 'рисунок треугольника
return
алг «рисунок прямоугольника»
box: 'рисунок прямоугольника cls
line (50,50)-(150,100),3,b return
алг «рисунок кольца»
ring: 'рисунок кольца
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. Циклы с выходами.
s: = s + x при х < 1 выход
х: = x/2
s = s + x if х < 1 then exit do
x = x/2 loop
В циклах в общем случае возможны несколько выходов. Дополнительные выходы счита-ются допустимыми даже для циклов со счетчиками. Приведем примеры решения задач с исполь-зованием дополнительных правил структурирования алгоритмов и программ.
Пример записи структурированных алгоритмов и программ с использованием циклов для алгоритма игры-эксперимента «звездное небо»:
Алгоритм алг «звездное небо» нач цикл запрос(«звезд=», п) при п <= 0 выход графический_экран от k = 1 до п цикл х: = случайное [0:200] у: = случайное [0:200] точка (х,у) кцикл кцикл кон
|
|
Программа ' звездное небо» сls do input «звезд=», n if n <= 0 then exit do screen 2,10 for k = 1 to n х = rnd*200 у = rnd*200 pset (x,y),3 next k end do end
Пример структурированного алгоритма и программы с применением многоальтернативно-го выбора и циклов с несколькими выходами:
Алгоритм алг «угадай-ка» нач
вывод («Угадай-ка число») вывод («от 1 до 100») z: = случайное [0:100] цикл
запрос («число =», х) при х = z вых если х < z то
вывод («мало») инеc х > z тo
вывод («много») все кцикл
вывод («молодец, умница») кон
Программа ' угадай-ка cls print «Угадай-ка число» print от 1 до 100» z = int (rnd*100) do
input «число =», х if х = z then exit do if х < z then
print «мало» elseif х > z then
print «много» end if end do
print «молодец, умница» end
Основной недостаток традиционной практики составления программ для ЭВМ заключа-ется в том, что при таком подходе никто не может гарантировать отсутствие в них ошибок. Осо-бенностью традиционной практики является поиск ошибок в программах при их отладке на ЭВМ.
Однако, так как число ошибок в программах заранее неизвестно, то неизвестна заранее и продолжительность отладки программ на ЭВМ. Более того даже после «завершения» отладки ни-кто не может гарантировать отсутствие ошибок. Естественно, что использование таких программ, приводит к возникновению отказов, сбоев и получению неверных результатов.
Структурный подход снижает количество ошибок в алгоритмах и программах. Однако и при этом подходе число ошибок также заранее неизвестно. Хотя структурная форма записи и уп-рощает поиск и исправление ошибок в текстах программ, гарантии отсутствия ошибок структур-ный подход не дает.
Однозначные суждения об отсутствии или наличии ошибок в алгоритмах и программах возможны только при наличии описаний конечных результатов их выполнения. Такие описания принято называть спецификациями.
Спецификации программ - это точные, математически строгие описания результатов вы-полнения алгоритмов и программ. Только при наличии спецификаций возможно создание алго-ритмов и программ, в которых можно гарантировать отсутствие ошибок.
Более того, при систематическом использовании спецификаций возможен не только ана-лиз правильности алгоритмов и программ, но и становится возможным составление программ с одновременным доказательством правильности.
Безошибочное программирование - это составление алгоритмов и программ с гарантиями отсутствия в них ошибок. А составление алгоритмов и программ с одновременным доказательст-вом правильности называется доказательным программированием. И в том и другом подходе не-обходимо составление спецификаций.
Для составления программ на любом языке программирования весьма полезно предва-рительное составление реализуемых в них алгоритмов. Эти описания алгоритмов вместе со спе-цификациями позволяют в полной мере оценить правильность составленных программ. Пример составления алгоритмов с использованием в качестве иллюстрации спецификаций сценария диа-лога с ЭВМ:
Сценарий «Галерея картинок»
В соответствии с этими четырьмя картинками построим три вспомогательных алгоритма рисования отдельных картинок из «Галереи» и общий алгоритм выбора картинок в соответствии с принятым сценарием:
алг «Галерея картинок»