
- •4. Разработка алгоритмов методом пошаговой детализации
- •4.1. Структура алгоритма
- •4.2. Описание действий
- •4.3. Обратная подстановка
- •4.4. Пример
- •4.4.1. Разработка внешней спецификации
- •Внешняя спецификация
- •Вывести сообщение “Ошибка” и завершить работу программы
- •4.4.2. Разработка главного алгоритма
- •Сортировка
- •План“ Вывод-представления ”
- •Алгоритм “Полный перебор”’) Конец
- •4.4.3. Подстановка
- •Алгоритм “Полный перебор”’)
- •{Сортировка}
- •4.4.4. Кодирование на языке Паскаль
- •Writeln(’Алгоритм ”Полный перебор”’);
- •{Сортировка}
- •4.4.5. Разработка алгоритма подпрограммы сортировки
- •Переместить-мин.-элемент-на-позицию-k
- •{Переместить-мин.-элемент-на-позицию-k}
- •4.5. Вопросы для самоконтроля
4.4.3. Подстановка
Теперь, наконец, можно построить полный и детальный алгоритм.
Получившийся после подстановки итоговый алгоритм приведен на следующей странице.
Алгоритм
“Сортировка
чисел”
Внутренние
переменные:
a[1..nmax]
:
массив, вещ
n
:
цел
ошибка
: лог
{флаг ошибки во входных данных}
j
: цел {рабочая
переменная – счетчик цикла} Начало
{Вывод-представления}
Вывод(‘Сортировка
чисел.
{Ввод-и-печать-входных-данных}
Вывод
(‘Всего
чисел = ‘)
Ввод
(n)
Если
(n
< 0) то
Вывод(‘Ошибка’)
Ошибка
:= true
Иначе
Если
(n
> nmax)
то
n
:= nmax
все
Ошибка
:= false
{Ввод-массива}
цикл-от
j:=1
до
n
вывод
(j
, ’-е число =’)
ввод
(a[j])
кцикл
Вывод
(‘Исходный
массив’)
{Вывод-массива}
цикл-от
j:=1
до
n
вывод
(a[j])
если
(j
mod
5)=0 то
сменить-строку
все
кцикл
Все
Если
(нет ошибки) то
SortAll
(n,
a)
{ Выполнить процедуру }
{Вывод-результата}
Вывод
(“Упорядоченный массив:”)
{Вывод-массива}
цикл-от
j:=1
до
n
вывод
(a[j])
если
(j
mod
5)=0 то
сменить-строку
все
кцикл
Все Конец
Алгоритм “Полный перебор”’)
{Сортировка}
4.4.4. Кодирование на языке Паскаль
В заключении приведем запись полученного алгоритма на языке Турбо-Паскаль.
Program
Sorting; { Сортировка чисел
} Uses Module1;
{Mодуль
содержит объявление константы nmax
и
типа
Arr1=array[1..nmax] of real } var a:
Arr1; n:
integer;
Err:
boolean;
{флаг ошибки во входных данных}
j:
integer;
{рабочая переменная – счетчик цикла} begin
{Вывод-представления}
writeln(’Сортировка
чисел.’);
{Ввод-и-печать-входных-данных}
writeln(’Всего
чисел
= ');
readln(n);
if
(n < 0) then begin
writeln(’Ошибка’);
Err
:= true;
end else
begin
if
(n > nmax) then
n
:= nmax;
{все}
Err
:= false;
{Ввод-массива}
for
j:=1 to n do begin
write
(<j>’-е
число
= ’);
readln
(a[j]);
end;
{кцикл}
writeln
(’Исходный массив :’);
{Вывод-массива}
for
j:=1 to n do begin
write
(a[j]);
if
(j mod 5)=0 then
writeln;
{все}
end;
{кцикл} end;
{Все} if
(not Err) then begin
SortAll
(n,
a);
{Вывод-результата}
writeln(’Упорядоченный
массив:
’);
for
j:=1 to n do begin
write(a[j]);
if
(j mod 5)=0 then
writeln;
{все}
end;
{кцикл}
end;
{Все}
end.
Writeln(’Алгоритм ”Полный перебор”’);
{Сортировка}
Для проверки разработанной программы можно даже не разрабатывать алгоритм сортировки, а подготовить «пустую» подпрограмму, то есть такую, которая между строками “начало” и “конец” не содержит ни одного оператора. Она не будет сортировать элементы входного массива, а сохранит их первоначальное расположение. Тем не менее, для проверки разработанного (главного) алгоритма этого достаточно.