Покрокова деталізація (програмування зверху вниз або спадна розробка)

доцент
Чернів Дмитро Олексійович

Покрокова деталізація (програмування зверху вниз або спадна розробка)

Покрокова деталізація є простий процес, предпола-гаю-щий первісне вираження логіки модуля в термінах гіпотеті-чес-кого (умовного) мови дуже високого рівня з подальшою деталізацією кожної пропозиції в термінах мови більш низького рівня, до тих пір, поки, нарешті, не буде досягнутий рівень використовуваної мови программи-вання. Тут доречно нагадати: чим менше мову містить деталей, тим більше він високого рівня. Можна вважати мовою найвищого рівня звичайну людську мову, а мовою низького рівня - машинний мову.

Протягом всього процесу покрокової деталізації логіка процесу виражається основними конструкціями структурного програмування.

Гідність покрокової деталізації полягає в тому, що вона дозволяє проектувальнику впорядкувати свої міркування. На кожному кроці ми маємо справу з елементарним завданням.

Розглянемо цей метод на конкретному прикладі.

ЗАВДАННЯ. Дана матриця розміром 10 * 10 елементів. Для каждо-го стовпця серед елементів, що лежать вище першого нульового, і значення яких лежать в інтервалі [с, d], знайти найменший і найбільший елементи і їх номери в рядку. Якщо нульового елемента в стовпці немає, то обробляється весь стовпець.

План виконання завдання

2. Основний алгоритм (цикл по стовпцях).

3. Обробка шпальти (внутрішній цикл).

4. Обробка елементів матриці.

5. Пошук найбільшого і найменшого елементів в стовпці.

6. Обробка початкових і кінцевих операторів циклів.

7. Оптимізація і шліфування програми.

А (10, 10) - вихідна матриця.

С і D - межі інтервалу.

m ах (10) і min (10) - масиви, що містять найбільші і найменші значення кожного стовпчика вихідної матриці.

Imax (l 0) і Imin (l 0) - масиви номерів рядків, в яких зустрічаються знайдені, відповідно, найбільші і най-менші значення в стовпці.

а) Перший крок Деталізація введення-виведення.

Покрокова деталізація (програмування зверху вниз або спадна розробка)

A: ARRAY [1..10,1..10] OF REAL; (* Вихідна матриця *)

C. D. REAL; (* Межі інтервалу *)

I. J. INTEGER; (* Номери рядків і стовпців *)

MAX. MIN. ARRAY [1..10] OF REAL; (* Значення найбільших і *)

IMAX. IMIN. ARRAY [1..10] OF INTEGER; (* І їх номери рядків *)

Пошук найбільшого і найменшого елементів в стовпці матриці А і їх номери в рядку.

Покрокова деталізація (програмування зверху вниз або спадна розробка)

IF A [I, J]> = MAXT THEN BEGIN MAXT: = A [I, J]; IMAXT: = I; END;

IF A [I, J]<= MINT THEN BEGIN MINT:= A[I, J]; IMINT:= I; END;

З'явилися нові змінні: Махт і MINT, IMAXT і IMINT. які необхідно включити в опису змінних з присвоєнням типу REAL і INTEGER відповідно.

е) Шостий крок. Початкові і кінцеві оператори.

Рухаємося зсередини циклів назовні і дивимося, що необхідно для роботи циклів.

Для спрацьовування внутрішнього циклу треба, щоб на першому етапі Махт і MINT мали якісь значення і що робити в разі відсутності в стовпці елементів з інтервалу (с, d)?

Приймемо, що індекси в цьому випадку дорівнюють нулю, а значення найбільших і найменших елементів, що потрапляють у вихідні масиви, несуттєві.

Махт: = С; MINT: = D;

M Ахт: = 0; IMINT. = 0;

Результати цього циклу треба заслати в J - e елементи результи-ючий масивів, тому кінцеві оператори будуть такими:

MAX [J]: = Махт; IMAX [J]: = M Ахт;

MIN [J]: = MINT; IMIN [J]: = IMINT;

Для циклу за стовпцями ніяких початкових і кінцевих опера-торів не потрібно.

Отримавши програму, можна зайнятися її поліпшенням, щоб вона стала коротше або виконувалася швидше.

використовувати MAX (J), MIN (J), IMAX (J), IMIN (J)

замість Махт. MINT, IMAXT, IMINT,

то рядок кінцевих операторів не буде потрібно, але програма буде довше виконуватися (хоча її текст скоротиться), тому що учас-тится виконання операції «Звернення до елементу масиву» - досить довга, з точки зору ЕОМ, операція.

Можна виконати інші оптимізують дії.

Покрокова деталізація (програмування зверху вниз або спадна розробка)

A: ARRAY [1..10, 1..10] OF REAL; (* Вихідна матриця *)

C. D. REAL; (* Межі інтервалу *)

I. J. INTEGER; (* Номери рядків і стовпців матриці А *)

MAX. MIN. ARRAY [1..10] OF REAL; (* Значення найбільших і *)

IMAX. IMIN. ARRAY [1..10] OF INTEGER; (* І їх номери рядків *)

MAXT. MINT. REAL; (* Тимчасові змінні, найбільше і *)

(* Найменше значення елементів *)

IMAXT. IMINT. INTEGER; (* І їх номери в стовпці *)

WRITELN ( 'Введіть елементи матриці:');

FOR I: = l ТО 10 DO

FOR J: = 1 TO 10 DO READ (A [I, J]); WRITELN;

WRITE ( 'Введіть кордону інтервалу'); READLN (С, D);

FOR J: = l TO 10 DO (* Обробка стовпців матриці А *)

IMAXT: = 0; IMINT: = 0; MINT: = C; MINT: = D;

(* Обробка елементів стовпця матриці А *)

FOR I: = l TO 10 DO WHILE A [I, J] # 0 DO

IF (C<=A[I, J]) AND (A[I, J]<= D) THEN

(* Елемент матриці належить відрізку CD. *)

IF A [I, J]> = MAXT (* Елемент матриці найбільший. *)

THEN BEGIN MAXT: = A [I, J]; IMAXT: = I; END;

IF [I. J]<= MINT (* Элемент матрицы наименьший? *)

THEN BEGIN MINT: = A [I, J]; IMINT: = I; END;

MAX [J]: = MAXT; MIN [J]: = MINT;

IMAX [J]: = IMAXT; IMIN [J]: = IMINT;

FOR I: = l TO 10 DO WRITELN ( 'MIN =', MIN [I], ', його номер', IMIN [I],

'; MAX =', MAX [I], ', його номер', I МАХ | I]);

Покрокова деталізація (програмування зверху вниз або спадна розробка)
Покрокова деталізація (програмування зверху вниз або спадна розробка)
Покрокова деталізація (програмування зверху вниз або спадна розробка)
Покрокова деталізація (програмування зверху вниз або спадна розробка)

Матеріал сайту є електронним посібником
з дисципліни "Технологія програмування"
в допомогу студентам ТУІТ.