Название: Информатика

Жанр: Информатика

Рейтинг:

Просмотров: 3381


4.4. основы безошибочного программирования

 

Основной недостаток традиционной практики составления программ для ЭВМ заключается в том, что при таком подходе никто не может гарантировать отсутствие в них ошибок. Особенностью традиционной практики является поиск ошибок в программах при их отладке на ЭВМ.

Однако, так как число ошибок в программах заранее неизвестно, то неизвестна заранее и продолжительность отладки программ на ЭВМ. Более того даже после «завершения» отладки никто не может гарантировать отсутствие ошибок. Естественно, что использование таких программ, приводит к возникновению отказов, сбоев и получению неверных результатов.

Структурный подход снижает количество ошибок в алгоритмах и программах. Однако и при этом подходе число ошибок также заранее неизвестно. Хотя структурная форма записи и упрощает поиск и исправление ошибок в текстах программ, гарантии отсутствия ошибок структурный подход не дает.

Однозначные суждения об отсутствии или наличии ошибок в алгоритмах и программах возможны только при наличии описаний конечных результатов их выполнения. Такие описания принято называть спецификациями.

Спецификации программ - это точные, математически строгие описания результатов выполнения алгоритмов и программ. Толькопри наличии спецификаций возможно создание алгоритмов и программ, в которых можно гарантировать отсутствие ошибок.

Более того, при систематическом использовании спецификаций возможен не только анализ правильности алгоритмов и программ, но и становится возможным составление программ с одновременным доказательством правильности.

Безошибочное программирование - это составление алгоритмов и программ с гарантиями отсутствия в них ошибок. А составление алгоритмов и программ с одновременным доказательством правильности называется доказательным программированием. И в том и другом подходе необходимо составление спецификаций.

Для составления программ на любом языке программирования весьма полезно предварительное составление реализуемых в них алгоритмов. Эти описания алгоритмов вместе со спецификациями позволяют в полной мере оценить правильность составленных программ. Пример составления алгоритмов с использованием в качестве иллюстрации спецификаций сценария диалога с ЭВМ:

 

Сценарий «Галерея картинок»

Список картинок:

1. треугольник

2. прямоугольник

3. кольцо

номер = ?

 

 

 n =1                                              n = 2                                   n = 3

 

 

 

 

В соответствии с этими четырьмя картинками построим три вспомогательных алгоритма рисования отдельных картинок из «Галереи» и общий алгоритм выбора картинок в соответствии с принятым сценарием:

 

алг «Галерея картинок»

нач                                                                                         алг «рисуиок_треугольника»

вывод («Список картинок:»)                            нач

вывод («1. треугольник»)                     линия(150,50)-(100,100)

вывод («2. прямоугольник»)                               линия(150,50)-(200,100)

вывод («3. кольцо»)                                               линия(100,100)-(200,100)

запрос («номер=», п)                                        кон

 

графический_экран

если п = 1 то                                                         алг «рисунок_прямоугольника»

рисунок_треугольника                     нач

инес п = 2 то                                                              рамка(50,50)-(150,100)

рисунок_прямоугольника                               кон

инес п = 3 то

рисунок_кольиа                                 алг «рисунок_кольца»

иначе                                                                     нач

вывод («нет такого рисунка»)              окружность( 100,100),20

все                                                                                               окружность(100,100),50

кон                                                                                         кон

 

Правильность каждого из вспомогательных алгоритмов и подпрограмм определяется сравнением с соответствующими фрагментами сценария, а правильность всего алгоритма и соответствующей программы - со сценарием в целом.

Данный подход к составлению алгоритмов и программ с использованием спецификаций - позволяет реализовать основную идею безошибочного программирования - создание алгоритмов и программ, правильных по построению. Такой подход может применяться к составлению алгоритмов и программ для любых современных языков программирования - Паскаль, Си, Ада, Модула, Бейсик и т. д.

Приведем примеры составления сложных алгоритмов и программ с циклами с использованием спецификаций. Первый пример - построение алгоритма и программы изображения на экране картинки «Звездное небо» из n случайных точек:

В приводимом ниже алгоритме для формирования и вывода последовательности случайных точек на экране используется цикл со счетчиком и датчик случайных чисел для генерации координат «звезд».

 

Алгоритм                                             Программа

алг «звездное небо»                           ' звездное небо

нач                                                                         сls

запрос(«звезд=», п)                               input «звезд=», n

графический_экран                              screen 2,0

от k = 1 до п цикл                   for k = 1 to n

x: = случайное [0:200]                               х = rnd*200

у: = случайное [0:200]                              у = rnd*200

точка (х,у)                                                   pset (x,y),3

кцикл                                                        next k

кон                                                                         end

 

Второй пример - составление с использованием спецификаций алгоритма и программы игры «Угадай-ка». В этой игре ЭВМ «загадывает» число от 0 до 100, а человек должен его отгадать, вводя пробные числа с клавиатуры. Для составления алгоритма и программы примем следующий сценарий:

 

Сценарий «Угадай-ка»

Угадай число от 0 до 100

 

число = ? < х>

*

мало

 

много

 

молодец, умница

 

 

Для реализации этого сценария воспользуемся циклом с выходом, в котором задается вопрос число=? и проверяются числа, вводимые человеком. Выход из цикла происходит после совпадения ответа с числом, задуманным ЭВМ:

 

Алгоритм                                             Программа

алг «угадай-ка»                                   ' угадай-ка

нач                                                                         сls

вывод («Угадай число»)                      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

кцикл                                                       loop

вывод («молодец, умница»)              print «молодец, умница»

кон                                                                         end

 

Сравнение алгоритма со сценарием показывает их полное соответствие друг другу.

 

В о п р о с ы

 

1. Сколько ошибок содержится в программах?

2. Как долго длится отладка программ?

3. Что такое спецификации программ?

4. Зачем нужны спецификации?

5. Можно ли гарантировать отсутствие ошибок в программах?

6. Что такое систематический подход к алгоритмизации?

 

З а д а ч и

 

1. Составьте сценарий и алгоритм диалога «Распорядок дня», с помощью которого можно узнать, что запланировано на заданный час дня.

2. Составьте сценарий и алгоритм диалога с выбором по меню;

а) национальных флагов;

б) каталога строительных блоков;

в) набора рисунков;

г) каталога строений.

3. Предложите сценарии и алгоритмы рисования на экране абстрактных рисунков:

а) из случайных разноцветных точек;

б) из случайных разноцветных отрезков;

в) из случайных разноцветных рамок;

г) из случайных разноцветных окружностей;

д) из случайных разноцветных кругов;

е) из случайных разноцветных окошек.

4. Составьте сценарий и алгоритм, моделирующий на экране броуновское движение частиц.

 


Оцените книгу: 1 2 3 4 5