Разработка алгоритма
Метод
Алгоритм
Структурные тесты
Оформление процедуры
Вид процедуры
Имя
Заголовок
Обращение, или вызов (записывается в головном модуле)
Описание
Кодирование алгоритма на языке c++
Определение глобальных объектов
Описание функции
Обращение
Порядок следования пунктов схемы соответствует этапам разработки программы - от проектирования структур данных и алгоритма с параллельной разработкой структурных тестов к его кодированию - и ориентирован на нисходящую отладку. Как только определены входы и выходы подзадачи, задающие интерфейс "задача - подзадача", достаточно сымитировать соответствующие тестам значения выходов с помощью заглушек, чтобы начать отладку алгоритма задачи.
Эта же ориентация отображена в пункте "Оформление функции" - отладка может быть начата, как только определены межмодульные интерфейсы, хотя процедура еще не создана. Для начала отладки достаточно заменить тела всех функций заглушками. Вызывающему модулю важны интерфейсы; тела функций находятся вне его видения. Поэтому при дальнейшей модификации функций головной модуль останется неизменным.
Если разработка алгоритма не представляет сложности, то пункты "Разработка алгоритма" и "Оформление функций" можно объединить.
Уровень 1
1. Задача А0.1
Проверить, все ли элементы массива b из n элементов попадают в заданный диапазон (-10,10).
Уточним постановку задачи, учитывая необходимость вывода диагностики ошибок: вывести индексы и значения элементов, выходящих за границы диапазона.
2. Входные данные
n, массив b - см. выше; во внутреннем представлении (так как к моменту решения задачи А0.1 они введены); входная форма отсутствует.
3. Выходные данные
и стина, если все элементы в границах диапазона;
лог bver=
ложь, в противном случае;
значения неверных элементов с индексами выводим в процессе поиска:
b(<i>)=<b(i)> задано неверно
обр4.2 b(<i>)=<b(i)> задано неверно
. . . . . .
Примечание. Переменная bver - выходная для рассматриваемой подзадачи, но промежуточная для задачи А0. Поскольку выходная форма подзадачи А0.1 является частью общей выходной формы, ее вывод по обр4.2 не делается.
4. Аномалии - нет
5. Функциональные тесты - отмечены в алгоритме задачи А0 в ветви, где находится абстракция А0.1
Разработка заглушки
Выходная форма
обр4.2.1 Заглушка: проверка массива b
[<обр4.2>]
обр4.2.2 Результат проверки: bver=<bver>
Алгоритм заглушки (подставляется вместо А0.1)
{проверка массива b}
вывод по обр4.2.1;
{для тестов 1.1,1.2,4.1,4.2,5.1} - для тестов
bver:=истина; 1,1.2,4.1,4.2,5.1
вывод (bver)по обр4.2.2;
{проверка массива b}
вывод по обр4.2.1;
{для теста 3.1}
bver:=ложь; - для теста 3.1
i:=4;
вывод (i,b(i))по обр4.2;
{выведется: b(4)=11 задано неверно}
вывод (bver)по обр4.2.2;
Представим, что все остальные абстракции раскрыты. Тогда, закодировав и подставив в алгоритм задачи А0 первую заглушку и пропустив тест 1.1, получим результат, соответствующий этому тесту; то же справедливо для второй заглушки и теста 3.1.
Далее следует: разработать заглушки для всех остальных абстракций, перейдя к задаче А0.2 и затем - к А0.3; закодировать программу с заглушками; отладить эту программу.
Описанную ниже последовательность действий для задачи А0.1 надлежит выполнять только по завершении разработки и отладки программы с заглушками .
Разработка алгоритма
Метод
Последовательная проверка всех элементов с выводом индексов и значений, выходящих за диапазон.
Пусть i - текущий номер элемента массива.
Алгоритм
{проверка массива b}
bver:=истина;
для i от 1 до n цикл
е сли b(i) >10 то
1.1, 3.1 вывод (i,b(i)) по обр4.2;
3.1 bver:=ложь;
кесли;
кц;
Структурные тесты
Отмечены в алгоритме рядом с тестируемыми конструкциями.
Текст алгоритма теперь может быть подставлен в основную программу вместо текста заглушки.
Назовем такой текст, непосредственно вставляемый в программу вместо раскрываемой им абстракции, сегментом-блоком.
Теперь следует отладить программу с вставленным сегментом, оставив остальные абстракции реализованными в виде заглушек. Тогда, продолжая отладку всей программы, фактически мы будем отлаживать только алгоритм этого сегмента - ведь остальная часть программы уже отлажена.
Затем то же следует проделать с остальными заглушками поочередно.
После освоения темы "Процедуры" алгоритмы отдельных сегментов могут быть оформлены в виде сегментов-процедур. Это можно проделать уже на этапе разработки заглушки.
При владении аппаратом процедур целесообразно сегменты сразу оформлять в виде процедур.
Оформление функций
Функция
Тип-тип возвращаемого значения
Вид - функция
Имя - provb (выберем то же имя)
Заголовок - функ provb(n,b)
Выходное данное подзадачи - bver станет локальной переменной и будет присвоено имени функции.
Обращение - указатель функции в виде provb(n,b) будет присутствовать в головном модуле в качестве операнда оператора присваивания. Обращение запишем в головной модуль рядом с соответствующей абстракцией.
Описание
{проверка массива b}
Лог функ provb(n,b);
арг цел n; цел масс b(n);
нач лог bver;{стало локальным}
цел i;{локальная переменная - параметр цикла}
{алгоритм тела процедуры}
bver:=истина;
для i от 1 до n цикл
если b(i) >10 то
1.1, 3.1 вывод (i,b(i)) по обр4.2;
3.1 bver:=ложь;
кесли;
кц;
{присваивание выходного значения имени функции}
provb:=bver;
кон;
кон provb;