КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Основы безошибочного программирования
Вопросы Кон кон Все окружность (100,100), 50 Иначе нач Графический_экран если п = 1 то алг «рисунок_прямоугольника» рисунок_треугольника нач инес п = 2 то рамка (50,50)-(150, 100) рисунок_прямоугольника кон инес п = 3 то рисунок_кольца алг «рисунок_кольца» вывод («нет такого рисунка») окружность (100,100),20
Реализация данного алгоритма в виде структурированной программы: Алгоритмы: Программа: алг «Галерея картинок» ' Галерея картинок нач сls вывод («Список картинок:») print «Список картинок:» вывод («1. треугольник») print «1. треугольник» вывод («2. прямоугольник») print «2. прямоугольник» вывод («З. кольцо») print «3. кольцо» запрос(«номер =», п) input «номер =», n если п = 1 то if n = 1 then рисунок_треугольника gosub treug инеc п =2 то if n = 2 then рисунок_прямоугольника gosub box инеc п = 3 то if n = 3 then рисунок_кольца gosub ring инеc п < 1 или п > 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: 'рисунок кольца нач els графический _экран screen 2,0 окружность (100,100),20 circle (100,100),20 окружность (100,100),50 circle (100,100),50 кон return Данный подход — составление структурированных алгоритмов — может применяться к составлению структурированных программ для любых ЭВМ на любых языках программирования — Паскаль, Си, Ада, Модула и т. д. На практике используется более широкий набор правил структурной композиции алгоритмов и программ, принятых в современных языках программирования, — правила альтернативного выбора, а также циклы с выходами и со счетчиками.
1. Условные действия: если у < 0 то if у < 0 then вывод («недопустим») print «недопустим» кесли end if
2. Многоальтернативный выбор: если х > 1 то if х > 1 then y: = 1 у = 1 инеc х < —1 то elseif х < —1 then у: = - 1 у = -1 иначе else у: = х у = х кесли end if
3. Циклы со счетчиком: от k = 1 до п цикл for к = 1 to n вывод (k ∙ k) print k*k кцикл next k
4. Циклы с выходами: цикл do s: = s + х s = s + х при х < 1 выход if x < 1 then exit do х: = x/2 x = x/2 кцикл loop
В циклах в общем случае возможны несколько выходов. Дополнительные выходы считаются допустимыми даже для циклов со счетчиками. Приведем примеры решения задач с использованием дополнительных правил структурирования алгоритмов и программ. Пример записи структурированных алгоритмов и программ с использованием циклов для алгоритма игры-эксперимента «Звездное небо»:
АлгоритмПрограмма нач cls цикл 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 то elseif х > z then вывод («много») print «много» все end if кцикл end do вывод («молодец, умница») print «молодец, умница» кон end
1. Что такое алгоритмизация? 2. Что такое структурированные алгоритмы? 3. Что такое неструктурированные алгоритмы? 4. В чем достоинства структурированных программ? 5. В чем недостатки неструктурированных программ? 6. Можно ли гарантировать отсутствие ошибок в программах? Задания
1. Постройте вспомогательные алгоритмы и подпрограммы с выделением параметров для рисования следующих блоков: а) крыша; б) дерево; в) стена с окном; г) столб. 2. Предложите рисунки и составьте алгоритмы рисования, используя вспомогательные алгоритмы из предыдущего задания, для следующих строений: а) домика с окном и деревом; б) домика с двумя окнами; в) домика с собачьей будкой; г) двухэтажного домика. 3. Составьте алгоритм вывода на экран полной таблицы умножения. 4. Составьте, используя вспомогательные алгоритмы из предыдущих задач, алгоритмы изображения на экране: а) многосекционных домов с различным числом секций; б) многоэтажных домов с различным числом этажей и секций.
Основной недостаток традиционной практики составления программ для ЭВМ заключается в том, что при таком подходе никто не может гарантировать отсутствие в них ошибок. Особенностью традиционной практики является поиск ошибок в программах при их отладке на ЭВМ. Однако так как число ошибок в программах заранее неизвестно, то неизвестна заранее и продолжительность отладки программ на ЭВМ. Более того, даже после «завершения» отладки никто не может гарантировать отсутствие ошибок. Естественно, что использование таких программ приводит к возникновению отказов, сбоев и получению неверных результатов. Структурный подход снижает количество ошибок в алгоритмах и программах. Однако и при этом подходе число ошибок также заранее неизвестно. Хотя структурная форма записи и упрощает поиск и исправление ошибок в текстах программ, гарантии отсутствия ошибок структурный подход не дает. Однозначные суждения об отсутствии или наличии ошибок в алгоритмах и программах возможны только при наличии описаний конечных результатов их выполнения. Такие описания принято называть спецификациями. Спецификации программ — это точные, математически строгие описания результатов выполнения алгоритмов и программ. Только при наличии спецификаций возможно создание алгоритмов и программ, в которых можно гарантировать отсутствие ошибок. Более того, при систематическом использовании спецификаций возможен не только анализ правильности алгоритмов и программ, но и становится возможным составление программ с одновременным доказательством правильности. Безошибочное программирование — это составление алгоритмов и программ с гарантиями отсутствия в них ошибок. А составление алгоритмов и программ с одновременным доказательством правильности называется доказательным программированием. И в том и другом подходе необходимо составление спецификаций. Для составления программ на любом языке программирования весьма полезно предварительное составление реализуемых в них алгоритмов. Эти описания алгоритмов вместе со спецификациями позволяют в полной мере оценить правильность составленных программ. Пример составления алгоритмов с использованием в качестве иллюстрации спецификаций сценария диалога с ЭВМ:
В соответствии с этими четырьмя картинками построим три вспомогательных алгоритма рисования отдельных картинок из «Галереи» и общий алгоритм выбора картинок в соответствии с принятым сценарием: алг «Галерея картинок» нач алг «рисунок_треугольника» вывод («Список картинок:») нач вывод («1. треугольник») линия(150,50)-(100,100) вывод («2. прямоугольник») линия(150,50)-(200,100) вывод («З. кольцо») линия(100,100)-(200,100) запрос («номер=», п) кон
Дата добавления: 2017-01-14; Просмотров: 152; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |