11.07.2015 Views

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ПРОФИЛЬ20январь 2012 / ИНФорматикаСпецификация — точная и полная формулировказадачи, содержащая информацию, необходимуюдля построения алгоритма ее решения.На практике спецификации программ обычноформулируют на естественном языке, в которомслова могут иметь несколько разных значений. Длястрогого доказательства желательно, чтобы спецификациябыла задана в формальном виде, с помощьюформул или соотношений между величинами.По предложению английского ученого Ч.Хоара,спецификация записывается в форме {Q}S{R}, гдеQ — начальное условие (предусловие), S — программаи R — утверждения, описывающие конечныйрезультат (постусловие). Запись {Q}S{R} означаетследующее: “если выполнение программы S началосьв состоянии, удовлетворяющем Q, то гарантируется,что оно завершится через конечное время всостоянии, удовлетворяющем R”.Корректная программа — это программа, соответствующаяспецификации.Если для исходных данных не удовлетворяетсяпредусловие Q, программа должна сообщать обэтом пользователю и закончить работу. В этом случаепрограмму называют надежной.Надежная программа — это программа, котораякорректна и, кроме того, не завершаетсяаварийно при недопустимых входных данных.Например, для алгоритма Евклида условия Q и Rмогут выглядеть так:Q: m > n > 0, R: a = НОД(m, n)— а для программы суммирования элементов массиваA[1:n] так:Q: n > 0,R:n∑s = A[ i] = A[1] + A[2] + ... + A[ n]i=1Спецификации могут (и должны) быть составленыне только для программы в целом, но и дляее отдельных блоков (процедур, функций, циклови т.д.). Полезно вносить утверждения Q и R прямов текст программы. Построенная таким образоманнотированная программа — это еще один шаг кдоказательному программированию.Ч.Хоар разработал специальный аппарат, позволяющийдоказывать правильность программы наоснове спецификаций отдельных блоков. Приведемпростейшие правила преобразования:• если {Q}S{P} и P ⇒ R (из истинности P следуетистинность R), то {Q}S{R};• если {Q}S{P} и R ⇒ Q, то {R}S{P};• если программа S — это последовательное выполнениеблоков S 1и S 2, для которых выполняютсяспецификации {Q}S 1{P} и {P}S 2{R}, то выполняетсяспецификация {Q}S{R}.Доказательство правильности программ используютв двух ситуациях:• доказывают правильность готовых программ(верификация программ);• строят программы одновременно с доказательствомих правильности (синтез программ).Как правило, верификация — это очень трудоемкийи сложный процесс, и оказывается значительнопроще использовать доказательства правильностиво время разработки программы. При этомпрограммы получаются проще, эффективнее и значительнонадежнее.Контрольные вопросы1. Зачем нужно доказывать правильность программ?2. Расскажите о двух подходах к проверке правильностипрограмм.3. Почему с помощью тестирования сложно доказатьправильность программы? В каких случаяхэто все же можно сделать?4. Что изменится в доказательстве алгоритма Евклида,если m и n — это произвольные натуральныечисла (неравенство m > n может не выполняться)?5. Что такое инвариант цикла?6. Зачем нужно определять инвариант цикла?7. Что такое спецификация? Почему желательноформулировать ее в виде формальных утверждений,а не на естественном языке?8. Что такое предусловие и постусловие?9. Объясните запись {Q}S{R}.10. Какая программа называется корректной?11. В чем различие между надежной и корректнойпрограммами?12. Как вы думаете, можно ли назвать корректнойпрограмму, которая зависает при неверных исходныхданных? Обсудите этот вопрос в классе.13. Что такое верификация программы?14. Как вы думаете, что сложнее — доказыватьправильность готовой программы или сразу писатьпрограмму, доказывая правильность отдельныхблоков? Почему? Обсудите этот вопрос в классе.Задачи1. Докажите, что следующие операторы даютодинаковый результат при любых значениях L и R(рассмотрите четные и нечетные значения обеихпеременных):c:= div(L+R,2)c:= L + div(R-L,2)Какие достоинства и недостатки есть у каждогометода вычисления этой величины?2. Докажите, что в результате выполнения следующегофрагмента программы в переменной M не всегдабудет записано максимальное из трех чисел (a, b и c):

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!