<<
>>

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

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

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

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

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

Такие описания принято называть спецификациями.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

инес п = 3 то

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

иначе нач

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

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

кон кон

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

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

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

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

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

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

нач cls

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

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

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

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

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

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

кцикл next k

кон end

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

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

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

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

нач 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

кцикл loop

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

кон end

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

Вопросы

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

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

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

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

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

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

Задания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<< | >>
Источник: В.А. КАЙМИН. ИНФОРМАТИКА. 2001

Еще по теме 4.6. Основы безошибочного программирования:

  1. Иванова Г.С. Основы программирования, 2002
  2. Основной курс (Программирование)
  3. Эстетика программирования
  4. Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев. Объектно- ориентированное программирование, 2001
  5. О. Л. Голицына, Т. Л. Партыка, И. И. Попов. ЯЗЫКИ ПРОГРАММИРОВАНИЯ, 2008
  6. Часть вторая Родительское программирование
  7. Программирование телевизионного вещания
  8. Часть вторая Родительское программирование СУДЬБА ЧЕЛОВЕКА
  9. Нейро-лингвистическое программирование
  10. Сергей Александрович Орлов. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения, 2013
  11. ПРОГРАММИРОВАНИЕ НА УСПЕХ
  12. Научное программирование телевидения
  13. Программирования основные понятия
  14. Глава 2 Отрицательное и положительное программирование
  15. 3 Используйте активное программирование, «подключая» к работе голос и движение.
  16. 5 Лучшим временем для программирования является последний час перед сном.
  17. ДЕЙСТВИЕ: ОСНОВА ОРИЕНТИРОВОЧНАЯ
  18. Лариса Александровна Малинина Вадим Васильевич Лысенко Максим Анатольевич Беляев. Основы информатики: Учебник для вузов, 2006
  19. 4.1. Основы психологииличности юриста