124
алг «у = тах(а, b,с)»
Результаты
нач
если а > b то
при а > b
у := а
у = а
инес b > с то
при b > с
у := b
у = b
инес с > а то
при с > а
у := с
у = с
кесли
при не (b > с)
кон
Справа от алгоритма приведены результаты вычислений с указанием условий, при которых они
получаются. На основании этих фактов можно заключить, что конечные результаты вычисления имеют
три варианта:
а, при а > b,
у =
b, при b > с и b
а,
с, при с > а и с
b.
В то же время значение максимума должно быть равно:
а, при а
b и а
с,
mах = b, при b
с и b
а,
с, при с
а и с
b.
Во всех трех случаях видны различия в условиях получения и определения максимальных значений.
Покажем, что эти различия существенны и утверждение о том, что алгоритм дает правильные
результаты для всех данных, неверно.
Для опровержения общего утверждения достаточно указать хотя бы один контрпример. В данном
случае утверждение о правильности алгоритма гласило бы: для любых значений переменных а, b, с
конечным было бы значение mах (а, b, с).
Контрпримером в данном случае будут значения: а = 2, b = 1, с = 3. Для этих данных по
определению mах = 3, а по результатам выполнения алгоритма у = 2. Следовательно, в алгоритме
содержится ошибка.
Однако оказывается, что это не единственная ошибка. Более тонкие ошибки вскрывает второй
контрпример: а = 1, b = 1, c = 1. Для этих данных в алгоритме вовсе не определен результат вычислений
у = ? и конечный результат выполнения программы будет непредсказуем!?
Правильное решение этой задачи можно получить применением систематических методов, составив
постановку и описание метода решения.
Постановка задачи Метод решения
Вычисление mах (а, b, с).
Дано: а, b, с - три числа. mх = mах(mах(а,b),с)
Треб.: mх максимум. mах(х,у) = х, при х
у
Где: mх = mах (а, b, с).
у, при у
х
Данный метод решения непосредственно состоит из формул определения максимумов из трех и двух
чисел. Реализация этого метода в форме алгоритма может быть такой:
алг «тх = тах(а,b,с)»
Результаты
нач
если а
b то
при а
b
тх := а
mx = a
иначе
при b > а
|