- •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. Вопросы для самоконтроля
Алгоритм
SortAll
Входные данные:
a[1..n]
:
вещ {массив}
n
:
цел {число
элементов в массиве}
Выходные данные:
a[1..n]
:
вещ {массив}
Внутренние
переменные:
k
: цел {номер
текущего элемента}
kmin
: цел
{номер минимального элемента}
j
: цел {номер
проверяемого элемента}
Temp
: вещ {буфер
обмена} Начало
цикл-от
k:=1
до
(n-1)
{Найти-минимальный-элемент}
kmin
:= k
цикл-от
j:=k+1
до
n
если
a[j] < a[kmin] то
kmin]
:= j
все
кцикл
Temp
:= a[k]
a[k] := a[kmin]
a[kmin] := Temp
кцикл Конец
{Переместить-мин.-элемент-на-позицию-k}
И, наконец, можно закодировать полученный текст на языке программирования. Текст подпрограммы сортировки на языке Турбо-Паскаль в форме процедуры (procedure), приведен на следующей странице.
Отметим, что ее испытания на компьютере можно начать только после того, как будет установлено, что вызывающая программа (в нашем случае программа Sorting , разработанная выше) работает правильно. А для испытаний процедуры SortAll достаточно одного приведенного выше теста.
И еще одно замечание. Для того чтобы транслировать и выполнить подпрограмму, по правилам языка Паскаль ее надо либо вставить в текст программы в область деклараций, либо поместить в отдельный файл, оформив его как файл типа Unitи включить ссылку на него в текст главной программы. Как это сделать, будет показано в одной из следующих глав.
procedure
SortAll(var a : Arr1; n : integer); var
k
: integer; {номер текущего элемента}
kmin
: integer; {номер
минимального элемента}
j
: integer; {номер
проверяемого элемента}
Temp
: real; {буфер
обмена} begin
for
k:=1 to (n-1) do begin
{Найти-минимальный-элемент}
kmin
:= k;
for
j:=k+1 to n do
if a[j] < a[kmin] then
kmin]
:= j;
{все}
{кцикл}
{Переместить-мин.-элемент-на-позицию-k}
Temp
:= a[k];
a[k]
:= a[kmin];
a[kmin]
:= Temp;
end;
{кцикл} end;
4.5. Вопросы для самоконтроля
Какова структура главного и вспомогательного алгоритма?
В чем отличие внутренних переменных и входных или выходных переменных?
Какие переменные называются глобальными?
Когда отдельные действия алгоритма целесообразно оформлять в виде вспомогательных алгоритмов?
В какой форме будет представлена часть алгоритма, которая при разработке оформляется как план алгоритма?
Что означает термин «трассировка»?
Как выполнить обратную подстановку?
В какой форме в алгоритме можно записать ссылку на вспомогательный алгоритм?
На каком этапе правильно разрабатывать тесты?
