Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Элементы доказательного программирования

Rusa


- это составление программ с доказательством их правильнос 242c26c 090;и. Сложнос 242c26c 090;ь составления и доказательства правильнос 242c26c 090;и алгоритмов и программ состоит в следующем.



Для утверждений о правильнос 242c26c 090;и программ необходимо показать, что правильные результаты будут получаться для всех допустимых данных. Такие утверждения могут быть доказаны только путем исчерпывающего анализа результатов выполнения программ при любых допустимых данных.

- это проверка программ на ЭВМ с помощью некоторого набора тестов. Ясно, что тестирование не дает гарантий правильнос 242c26c 090;и выполнения программ на всех допустимых данных. Следовательно, тестирование в общем случае не может дать и не дает полных гарантий отсутствия ошибок в программах.

b

cls

ввод (а, b, с) input a, b,

если а > b то if а > b then

a max = a

инеc b > с то elseif b > с then

тах := b mах = b

инеc с > а то elseif с > a then

mах = с

end if

? «mах=»; mах

end

Tecт1 Тест2 Тест3

? 1 2 3 ? 3 2 1

max = 2   max = 3 max = 3

max

При доказательном подходе разработка алгоритмов и программ предполагает составление спецификаций и доказательство их правильнос 242c26c 090;и по отношению к этим спецификациям. Процесс разработки программ считается завершенным после проверки их на ЭВМ и предоставлении доказательств отсутствия ошибок.

Доказательства правильнос 242c26c 090;и

Конструктивно, доказательства правильнос 242c26c 090;и алгоритмов и про­грамм строятся на суждениях и утверждениях о результатах выпол­нения каждого из составляющих их действий и операций в соответ­ствии с порядком их выполнения.

Результаты Утверждения

v v1 = х v1 = x2

v := v v v2 v1 v1  v2 = x4

v x у = v2 x у = х5

v х будет значение v1 = х х переменной v. Результат следующего присваивания v := v v - второе значение переменной v, равное v2 = v1 v1 . Результатом треть­его присваивания у := v x v2 x .

Утверждения

при с < mх

mх то при с

mх := с mх' = с

правильнос 242c26c 090;и алгоритмов можно проводить двумя способами. Первый способ - анализ правильнос 242c26c 090;и при по­строении алгоритмов. Второй способ - анализ правильнос 242c26c 090;и после построения алгоритмов.

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

Для обоснования правильнос 242c26c 090;и алгоритма докажем вспомогатель­ное утверждение о результатах выполнения конструкции альтерна­тивного выбора.

> b то b

mx = a

b > a

:= b mx = b

mx = max(а, b) для любых значений а и b.

b

mx = 

b при а < b

что совпадает с определением max (а, b).

С помощью этой леммы легко доказать правильнос 242c26c 090;ь алгоритма в целом.

mx то mx

mx mx' = с

mx' = mx

при с < mx

Конечным результатом выполнения алгоритма вы­числения максимума будет значение mx' = max (а, b, с) для любых значений а, b и с.

mx = max(a,b).

mx

mx = = max(a,b,c).

mx, при с < mx

- основной прием доказательства правиль­нос 242c26c 090;и сложных алгоритмов и программ. Напомним, что лемма - это вспомогательное утверждение, предполагающее отдельное доказа­тельство.

Одним из важнейших применений аппарата лемм является анализ результатов выполнения и доказательство правильнос 242c26c 090;и алгоритмов с циклами. Используемые для анализа циклов леммы называются индуктивными утверждениями. Эти леммы выражают утверждения о промежуточных результатах выполнения циклов.

В качестве примера использования индуктивных рассуждений рассмотрим алгоритм вычисления среднего арифметического после­довательнос 242c26c 090;и чисел. В приводимом алгоритме предполагается, что последовательнос 242c26c 090;ь чисел размещена в массиве X[1:N].

X[1:N]

k = 1 до N цикл

S S (k-l)/k X[k]/k Sk Sk-1*(k-l)/k X[k]/k

[k (1...N)]

Xcp S  Xcp S

Этот алгоритм обычно считается ошибочным (?!). «Ошибкой» в этом алгоритме считается отсутствие присваивания S := 0 перед началом цикла.

S1 S0 (l S0

S2 S1 S1

S3 S2 S

Можно утверждать, что на первых трех шагах результатом является среднее арифметическое обрабатываемых чисел. На основе этих примеров можно сделать индуктивное утверждение - «на каждом очередном k-м шаге выполнения цикла результатом будет среднее арифметическое»

Sk = Sk-1 (k-l)/k X[k]/k X[l]/k X[2]/k X[k]/k.

Доказательство этого утверждения проводится с помощью мате­матической индукции. На первом шаге при k = 1 оно уже доказано. Допустим, что оно справедливо на (k

Sk-1 = X[l]/(k-l) X[2]/(k-l) X[k-l]/(k-l).

Подставим его в описание результатов цикла на k-м шаге

Sk= Sk-1 (k-l)/k +X[k]/k.

Тогда результат выполнения цикла на k-м шаге оказывается рав­ным

Sk = X[l]/k X[2]/k X k-l /k X[k]/k,

т. е. среднему арифметическому первых k чисел.

k = l, 2, ..., N.

SN SN-1 (N-1) X[N]/N X[1]/N X[N]/N.

Xcp = SN X[1]/N + X[N]/N.

Следовательно, приведенный алгоритм, несмотря на содержа­щуюся в нем «ошибку», является правильным. В целом анализ правильнос 242c26c 090;и алгоритмов с циклами во многом построен на исполь­зовании индукции.

- это вывод общих суждений из частных примеров. При анализе циклов она используется для подбора индуктивных утверждений о промежуточных результатах выполнения циклов. Однако для доказательства правильнос 242c26c 090;и индуктивных утверждений о результатах выполнения циклов используется полная математи­ческая индукция.

- это принцип доказательства после­довательнос 242c26c 090;ей утверждений Р(1), Р(2), Р(3), ..., P(N), .... когда известно, что верны первые утверждения для n = 1, 2, 3 и из истин­нос 242c26c 090;и (n - 1)-го утверждения следует истиннос 242c26c 090;ь n-го утверждения:

если первое утверждение Р(1) истинно и из утверждения Р(n - 1) следует утверждение Р(n), то истинны все утверждения Р(1), Р(2), Р(3), ..., Р(n), ... .

Приведем примеры индуктивного анализа циклов для алгоритма нахождения минимального значения в последовательнос 242c26c 090;и чисел, который в этот раз действительно будет ошибочным.

x[1:N]

от k = 1 до N цикл

x[k] < min

x[k] mnk x[k], x[k] < mnk-1

mnk-1,

[ k = (1 ... N)]

Min Min = mnN

Приведенный алгоритм определения минимального значения последовательнос 242c26c 090;и чисел неправильный.

k

х[1] при х[1] < mn0

mn1 =  = min (х[1], mn0).

mn0 при х[1] mn0 

mn1 = min (x[l], mn0).

Однако поскольку начальное значение mn0 неизвестно, то не­определено значение результата выполнения первого шага цикла. Аналогичное утверждение можно сделать о втором и всех последу­ющих шагах выполнения цикла:

mnk = min (x[k], Min(x[k-l], ..., х[1], mn0) = Min (x[k], x k-1], ..., х[1], mn0).

В силу математической индукции это утверждение справедливо при k = N:

mnN Min (x[N], x[N x[2], х[1], mn0).

Min = mnN Min (x[N], x[N x[2], х[1], mn0).

Из этой формулы видно, что конечный результат равно как и результат первого присваивания зависит от начального значения mn0 переменной mn. Однако эта величина не имеет определенного значения, соответственнно неопределен и конечный результат выполнения алгоритма в целом, что и является ошибкой.

В самом деле, если значение mn0 окажется меньше любого из значений последовательнос 242c26c 090;и х[1], .... x[N], то конечный результат вычислений будет неправильным. В частнос 242c26c 090;и, при реализации алгоритма на Бейсике неправильный результат будет получен, если последовательнос 242c26c 090;ь будет состоять только из положительных чисел. Например, для последовательнос 242c26c 090;и чисел: 1, 2, 3, ..., N.

тп := x[1]

от k = 1 до N цикл

если x[k] < тп то

тп = x[k]

все

кцикл

Min

mn0 = х[1]

[k = (1 ... N)]

Min = mnN

Для любой последовательнос 242c26c 090;и чисел x[l:N] конечным результатом вычислений будет значение Min = Min (х[1], ..., x[N]).

Воспользуемся результатами анализа выполнения алгоритма, рассмотренного ранее. Различие между ними состоит в добавлении перед началом цикла присваивания mn := х[1], которое задает начальное значение переменной mn, равное mn0 = х[1].

Min = mnN = Min(x[N], x[N-l], ..., х[2], х[1], mn0) =

= Min(x[N], x[N-l], x[2 , x[l], x[l]) Min(x[N],

Рассмотренные примеры являются образцами доказательств пра­вильнос 242c26c 090;и алгоритмов и программ, которые могут использоваться для анализа и доказательства правильнос 242c26c 090;и других новых алгоритмов и программ обработки данных.

4. Из чего состоит техника доказательств правильнос 242c26c 090;и?

1. Приведите постановку, алгоритм решения и разбор правильнос 242c26c 090;и для следующих задач:

2. Для последовательнос 242c26c 090;и чисел х1, х2,..., хN, приведите постановку, алгоритм решения и разбор правильнос 242c26c 090;и следующих задач:

3. Для данных о росте и весе учеников приведите постановку задачи, алгоритм решения и разбор правильнос 242c26c 090;и для следующих задач:

Anхm приведите постановку, алгоритм решения и разбор правильнос 242c26c 090;и следующих задач:

5. Для N точек на плоскости, заданных случайным образом, при­ведите постановку, метод решения, сценарий, алгоритм и программу решения следующих задач:


Document Info


Accesari: 1058
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )