Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie.doc
Скачиваний:
27
Добавлен:
31.03.2015
Размер:
1.43 Mб
Скачать

6.5. Примеры разработки процедур

Пример 1. Цель – продемонстрировать процесс оформления процедуры и показать, что при наличии проекта этот процесс – дело техники и не привносит ничего врешениезадачи.

Рассматривается пример решения задачи m.0(§ 5.3, с. 72) с оформлением алгоритма подзадачи в виде процедуры.

Чтобы обеспечить самостоятельность нижеприведенной разработки, в ней воспроизведены все основные элементы задачи, возможно, в более формализованном виде. Опущены элементы, которые должны присутствовать в полной разработке, но не имеют отношения к проектированию процедур, и пояснения.

Уровень 0

1. Задача m.0.Найти в матрице первую строку, все элементы которой больше 1.

2. Входные данные. Ограничения на диапазоны данных там, где они не очевидны, взять произвольно.

цел m- число строк матрицы a; простая переменная; ……..

цел n- число столбцов матрицы а; простая переменная; ……..

вещ a- исходная матрица; двумерный массив; ……….

Входную форму взять из § 5.2.

3. Выходные данные

цел k- номер искомой строки; .........

Сообщения о наличии или отсутствии искомой строки предусмотрим в выходной форме.

Выходную форму взять из § 5.3

4. Аномалиине рассматриваем

5. Функциональные тесты – см. пример после условия задачи в § 5.3. Забегая вперед, отметим, что эти тесты покроют структурные.

6. Метод

Пусть

л

истина, если все элементы строки удовлетворяют условию,

ложь, в противном случае.

огy1– результат проверки совокупности строк;

y1=

л

истина, если искомая строка есть,

ложь, в противном случае.

огy2– результат проверки совокупности элементов отдельной строки;

y2=

Пусть i- текущий номер строки.

i:=1;y1:=ложь; {сначала искомая строка не найдена}

Пока (y1=ложь) и (i<=m) {строка не найдена и строки не исчерпаны} цикл

Вх.: m, n, a, i вых.: y2

provstr(m,n,i,a,y2);

{анализ y2и формированиеy1иk}

если y2= истина, то

y1:= истина;

k:=i;

кесли;

конец цикла

Раскроем подзадачу А1 на следующем уровне в виде процедуры. Абстракция будет заменена вызовом процедуры. Это можно сделать сразу после того, как сформирован заголовок процедуры.

Уровень 1

1. Задача А0.1.Проверить, все ли элементыi-й строки матрицыam×nбольше 1.

2. Входные данные(формальные параметры)

Выберем для формальных параметров те же имена, что для обрабатываемых переменных головного модуля (фактических параметров).

цел m,n,i – ....

вещ a[m,n] – ....

3 Истина, если все элементы строки больше 1, ложь, в противном случае . Выходные данные

y2=

Оформление заголовка и вызова процедуры

Вид- общего вида

Имя-provstr

Заголовок- процprovstr(m,n,i,a,y2);

Вызов -provstr(m,n,i,a,y2); запишем в головной модуль вместо А0.1.

4. Аномалиипока не рассматриваем

5. Функциональные тестыте же, что для задачи в целом

6. Метод– известен

7. Описание процедуры

{А01. Проверка строки}

проц provstr(m,n,i,a,y2);

арг цел m,n,i; вещ a(m,n);

рез лог y2;

нач цел j; { номер столбца - локальная переменная }

y2:=истина; j:=1;

пока y2 & j<=n цикл

если a[i,j]<=1 то

y 2:=ложь;

кесли;

j:=j+1;

кц;

кон;

кон provstr;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]