Пример нисходящей разработки
Для примера выбрана абстрактная задача обработки матрицы, предполагающая решение нескольких функционально самостоятельных подзадач. Это позволяет проиллюстрировать процесс разработки алгоритма, используя типовые структуры данных и не перегружая пример содержательной трактовкой данных и описанием каких-либо специальных методов решения.
Параллельно с проектированием алгоритма проводится подготовка его к отладке нисходящим способом и тестированию согласно требованиям технологии. Поэтому каждый шаг проектирования сопровождается разработкой заглушек (для проведения нисходящей отладки) и тестов (сначала функциональных - для алгоритма в целом, а затем - структурных, для отдельных сегментов).
Уровень 0
1. Задача top_down. Абстракция А0
Если в одномерном целочисленном массиве b есть хотя бы два одинаковых элемента, то заменить первую строку матрицы a , все элементы которой больше нуля, на этот массив, иначе найти максимальное значение минимальных элементов строк матрицы.
Примеры возможных значений данных. Далее на основе этих примеров будут построены функциональные тесты.
1) b=(1,2,3,1) - есть два одинаковых элемента;
-1 0 2 -3 меняем -1 0 2 -3
а= 2 -1 0 2 матрицу: а= 2 -1 0 2
1 1 3 2 1 2 3 1
b=(1,2,3,4) - нет двух одинаковых элементов
-1 0 2 -3 -3
а = 2 -1 0 2 -1 1
1 1 3 2 1
минимальные максимальный
элементы из них
строк
2. Входные данные. Ограничения на диапазоны данных там, где они не очевидны, взяты произвольно.
цел n - число элементов массива b; оно же - число столбцов матрицы а;
простая переменная; 0<n<=50; XX;
цел b - исходный одномерный массив; ¦b(i)¦<=10; +XX;
цел m - число строк матрицы a;простая переменная;¦m¦<=50;XX;
цел a - исходная матрица; двумерный массив; ¦a(i,j)¦<=10; +XX.
Типы элементов a и b в общем случае должны совпадать, так как
м
<n>
<b(1)>
<b(2)> . . . <b(5)>
<b(6)>
<b(7)> . . . <b(10)>
. . . . . . . .
<b(n)>
<m>
<a(1,1)>
<a(1,2)> . . . <a(1,5)>
<a(1,6)>
<a(1,7)> . . . <a(1,10)>
. . . . . . . .
<a(1,n)>
.
. . . . . . . . . . . . . . . .
<a(m,1)>
<a(m,2)> . . . <a(m,5)>
<a(m,6)>
<a(m,7)> . . . <a(m,10)>
. . . . . . . .
<a(m,n)>
Входная форма:
Элементы массивов
размещены по 5
в каждой строке
носителя (экрана
или файла)