Реферат: Методика создания программ
end
end {for};
{î[i]=v[t] Ù P1 [t]¹-1 Ù P2 }
v[t]:=-1; {Заменяем в исходном массиве наименьший
компонент на -1, чтобы больше его не выбирать}
i:=i+1 ; {Переход к очередному свободному компоненту
вектора-результата}
end {while}
Рис. 13.4. Фрагмент программы “Обработка исходных данных”.
На рис. 13.4 представлена основная часть нашей программы - обработка данных. Она состоит из двух вложенных циклов. В цикле while мы последовательно заполняем компоненты вектора о. В цикле for мы выбираем наименьший компонент в исходном массиве v, размещаемего в массиве о, а найденный наименьший в массиве v “забиваем” -1, чтобы исключить из рассмотрения при последующих итерациях цикла while.
В качестве комментария к этим циклам мы указали их инварианты. Инвариант цикла for утверждает, что на любой итерации компоненты массива v либо больше уже заполненных компонентов массива о, либо = -1.
Условие
{о[i]=v[t] Ùv[t] ¹ -1ÙP2 } ,
указанное после цикла for гарантирует нам что массив о в итоге будет содержать только компоненты массива v, т.е. будет его перестановкой. Инвариант цикла while утверждает, что на всех итерациях заполненная часть массива о упорядочена по возрастанию. Это гарантирует нам выполнение постусловия программы по окончании цикла while.
Детальное рассмотрение правильности мы пока отложим. Заметим лишь, что мы можем воспользоваться методом “компьютера с кнопкой”, который мы уже использовали в лекции 11-12.
Итак, подведём итог. Только что проделанный процесс можно разбить на следующие этапы:
Формирование и осознание проблемы. Назовём этот этап постановкой задачи.
Спецификация программы.
Разбиение проблемы на подпроблемы, до тех пор пока не подберём существующий алгоритм, либо не сможем “сходу” выписать свой.
Подбор существующего, т.е. попытаться использовать уже существующие программы или их фрагменты. Здесь очень полезны будут их спецификации, чтобы построить их контекст данной программы.
Запись на языке Pascal программы со спецификациями промежуточных состояний.
Проверка правильности.
Оформление программы.
*) Заметим, что Exmpl 10.X не удовлетворяет определению имени в языке Pascal, т.к. здесь используется пробел и точка, которые не являются ни буквой, ни цифрой. Однако, в целях наглядности мы будем использовать такой способ именования примеров.