Мегаобучалка Главная | О нас | Обратная связь


Пример метода пошаговой детализации



2016-01-26 523 Обсуждений (0)
Пример метода пошаговой детализации 0.00 из 5.00 0 оценок




ЗАДАЧА. Дана матрица размером 10*10 элементов. Для каждого столбца среди элементов, лежащих выше первого нулевого, и значе­ния которых лежат в интервале [c,d], найти наименьший и наи­больший элементы и их номера в строке. Если нулевого элемента в столбце нет, то обрабатывается весь столбец.

 

План решения задачи

1. Входные / выходные переменные.

2. Основной алгоритм – перебор столбцов исходной матрицы (цикл по столбцам)

3. Перебор элементов столбца матрицы (внутренний цикл по строкам)

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

5. Поиск наибольшего и наименьшего элементов в столбце.

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

7. Оптимизация и шлифовка программы

Входные / выходные переменные.

А(10,10) - исходная матрица

С и D - границы интервала

 

max(10) - массивы, содержащие наибольшие и наименьшие значения

min(10) каждого столбца исходной матрицы.

 

Imax(10) - массивы, содержащие номера, строк в которых встречаются

Imin(10) найденные наибольшие и наименьшие значения в столбце.

 

а) Первый шаг.

Детализация ввода-вывода.

PROGRAMM PRIMER;

VAR

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; (* и их номера строк *)

Другие переменные

BEGIN

WRITELN ('Введите элементы матрицы');

FOR I:=1 TO 10 DO BEGIN

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

END;

WRITE('Введите границы интервала'); READ (C,D);

Основной алгоритм

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

'; MAX=', MAX[I], ', его номер', IMAX[I]);

END.

 

б) Второй шаг.

Детализация основного алгоритма.

Необходимо выполнить одно и тоже для каждого столбца.

Начальные операторы

FOR J:=1 TO 10 DO

BEGIN

Обработка столбца

END;

Конечные операторы

 

в) Третий шаг.

Обработка столбца исходной матрицы.

В этом столбце необходимо обработать элементы, лежащие выше первого нулевого элемента матрицы А.

Начальные операторы

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

BEGIN

Обработка элементов матрицы

END;

Конечные операторы

 

г) Четвертый шаг.

Определение принадлежности элемента матрицы А заданному отрезку СD.

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

BEGIN

Поиск наибольшего элемента в столбце
 
Поиск наименьшего элемента в столбце

END;

 

д) Пятый шаг.

Вычисление наибольшего и наименьшего элемента в столбце матрицы А и их номера в строке.

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;

Появились новые переменные: MAXT и MINT, IMAXT и IMINT, которые необходимо включить в описания переменных с присвоением типа REAL и INTEGER соответственно.

 

е) Шестой шаг.

Детализация начальных и конечных операторов циклов.

Движемся по программе изнутри циклов наружу и смотрим, что необходимо для работы циклов.

Чтобы сработал внутренний цикл, надо чтобы на первом шаге MAXT и MINT имели какие-то значения и что делать в случае отсутствия в столбце элементов из интервала (c,d)?

Примем, что индексы в этом случае равны нулю, а значения наи­больших и наименьших элементов, попадающие в выходные массивы, несущественны.

Итак, вначале MAXT=С, MINТ=D, IMAXT=0, IMINТ=0.

Результаты этого цикла надо заслать в J-е элементы результи­рующих массивов, поэтому конечные операторы будут такими:

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

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

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

 

ж) Последний шаг.

Шлифование и оптимизация программы.

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

Например, если использовать MAX(J), MIN(J), IMAX(J), IMIN(J) вместо MAXТ, MINT, IMAXТ, IMINT, то строка конечных операторов не потребуется, но программа будет дольше выполняться (хотя ее текст сократится), т.к. участится выполнение операции "Обращение к эле­менту массива" (довольно длинная, с точки зрения ЭВМ, операция).

Можно выполнить другие оптимизационные действия.

Результирующая программа

PROGRAMM PRIMER;

VAR

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

I, J: INTEGER (* Их номера строк и столбцов *)

C,D: REAL; (* Границы интервала *)

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

(* наименьших элементов *)

IMAX,IMIN: ARRAY[1..10] OF INTEGER; (* и их номера строк *)

MAXT,MINT: REAL; (* Временные переменные, наибольший и *)

(* наименьший значения элементов *)

IMAXT,IMINT: INTEGER; (* и их номера в столбце *)

BEGIN

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

FOR I:=1 TO 10 DO

BEGIN

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

END;

WRITE('Введите границы интервала'); READLN (C,D);

FOR J:=1 TO 10 DO (* обработка столбцов матрицы А *)

BEGIN

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

(* обработка элементов столбца матрицы А *)

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

BEGIN

IF (C<=A[I,J]) AND (A[I,J]<=D) THEN (* элемент матрицы *)

BEGIN (* принадлежит отрезку 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;

END;

END;

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

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

END;

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

'; MAX=',MAX[I],',его номер',IMAX[I]);

END.

 

Раздел №7

Запись текстов программ на алгоритмическом языке

Высокого уровня

 

Цель работы:

- запись текстов программ на алгоритмическом языке высокого уров­ня, используя правила стиля программирования.

 



2016-01-26 523 Обсуждений (0)
Пример метода пошаговой детализации 0.00 из 5.00 0 оценок









Обсуждение в статье: Пример метода пошаговой детализации

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (523)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)