Смекни!
smekni.com

Лекции по информатики 2 (стр. 23 из 43)

= (-b +

)2/(4×а) + b× (-b +
)/(2×a) + с = (b +
)× (-b +
)/(4×а) + с =

= (-b2 + D)/(4×a) + с = (-b2 + b2 - 4×а×с)/(4×а) + с = -4×а×с/(4×а) + с = 0.

Аналогичные результаты получаются и при подстановке формулы второго корня

х2 = (-b -

)/(2×a). После выполнения анало­гичных преобразований будет получено такое же тождество. И на основании этих проверок можно сделать заключение, что рассмот­ренный метод дает правильные результаты для любык допустимых данных.

Однако саму постановку задачи необходимо дополнить условием: b2 - 4×а×с ³ 0. При нарушении этого условия не только уравнение не имеет решений, но и метод решения также не дает результатов из-за необходимости вычисления корней от отрицательного дискриминан­та: D < 0.

В силу выбранного метода решения и принятой постановки алго­ритм решения квадратных уравнений приобретает следующий вид:

алг «квадратное уравнение»Результаты вычислений

нач

если а ¹ О топри а ¹ 0

D:= b*b - 4*а*с D = b2 - 4×а×с

если D > = 0 топри D >= 0

х1: = (-b+

)/(2*a)х1 = (-b +

)/(2×a)

х2: = (-b -

)/(2*a)х2 = (-b -

)/(2×a)

все

инеc а = 0 топри а = 0

если b¹ 0при b ¹ 0

х 1: = -c/b xl = -c/b

все

кон

Результаты выполнения алгоритма приведены справа. Можно заметить, что результаты выполнения совпадают с описанием вы­бранного метода решения с помощью дискриминанта. Это позволяет утверждать, что алгоритм - правильный.

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

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

Первый способ - проверка основных этапов построения алго­ритма:

задача ® постановка ® метод ® алгоритм

Второй способ - анализ результатов выполнения алгоритмов и их сравнение с выбранными методами решения и постановкой задачи:

задача ¬ постановка ¬ метод ¬ алгоритм

Приведем пример построения алгоритма с одновременным ана­лизом его правильности.

Задача: Определить периметр треугольника, заданного на плос­кости координатами вершин.

XСС


XААXв,Ув

Постановка задачи

Определение периметра треугольника, заданного на плоскости.

Дано: А =А, УА)

В= (ХВ, УВ) - координаты вершин треугольника

С = (XСС)

Треб.: Р - периметр

Метод решения

Р = LАВ +LВС+LСА

LАВ =

LВС=

LСА=

Где: Р = L(A,B) + L(B,C) + L(C,A);

здесь L[(x,y),(u,v)] =

.

Приведем алгоритм, полученный из описания метода упорядоче­нием операций вычисления длин сторон треугольника с заверша­ющим вычислением периметра. Результаты выполнения алгоритма приведены справа.

алг «периметр треугольника»

нач

LAB: =

LBC : =

LCA : =

Р := LAB + LBC + LCA

кон

Результаты

Р = LAB + LBC + LCA

Сравнение результатов выполнения алгоритма с описанием метода решения показывает, что это одна и та же система формул, что подтверждает правильность алгоритма.

Систематические методы анализа правильности алгоритмов и программ опираются на сопоставление тех же самых описаний, которые используются при их систематическом составлении.

Анализ правильности:

задача ¬ способ

¯¯

постановка ¬ методы

¯¯

сценарий ¬ алгоритмы

¯¯

ЭВМ ® программа

Основные типы алгоритмических ошибок в программах:

· ошибки в выбранных методах решения;

· ошибки в постановке решаемых задач;

· дефекты в сценариях диалога с ЭВМ;

· ошибки организации ввода данных;

· неправильная реализация методов решения.

Исчерпывающий анализ правильности алгоритмов и устранение из программ ошибок всех перечисленных типов возможны только при наличии соответствующих спецификаций: постановок задач, описаний методов решения и спецификаций ввода-вывода данных.

Будем считать, что программа правильная, если она дает правильные результаты для любых допустимых исходных данных. Такого рода программы вполне можно использовать для решения прикладных задач.

Программа считается надежной, если она не дает сбоев и отказов ни при каких исходных данных. Надежность - обязательное условие для всех программ, которые используются людьми для решения практических задач на ЭВМ.

В качестве иллюстрации приведем пример систематического со­ставления алгоритма и программы задачи определения суммарного веса учеников по данным из таблицы:

фамилия рост вес

Иванов 185 85
Петрова 165 65
Сидоров 170 80

Рассмотрим постановку задачи и метод вычисления суммарного веса.

Постановка задачи

Определение суммарного веса.

Дано:Метод вычисления

(D1,.., DN) - данные об учениках, S0= 0

где D = [Fam,R,V] - состав данных, Sk = Sk-1 + vk

Fam - фамилия, R - рост, V - вес. [k = (1 ... N)]

Треб.: Vsum - суммарный вес. Vsum = SN

Vsum = v1 + v2 + ... + vN

При: N > 0.

Правильность метода вычислений можно доказать по индукции. Рассмотрим результаты вычислений на 1-м, 2-м и k-м шагах. Отме­тим, что начальное значение S0 = 0.

На первом шаге при k = 1 результат вычисления

S1 = S0+v1 = v1

На следующем втором шаге при k = 2 результат

S2= S1 + v2= v1+ v2.

На третьем шаге при k = 3 результат

S3= S2 + v3= v1 + v2+ v3.

В общем случае можно предположить, что к k-му шагу результат вычисления

Sk-1=v1+...+vk-1.

Тогда результат вычислений после k-го шага (исходя из описания метода)

Sk = Sk-1 +vk= v1 + … + vk-1 + vk.

В силу принципа математической индукции утверждение верно для всех k = 1, 2,.... N. Следовательно, на последнем шаге при k = N конечный результат:

SN= v1 + ... + vN.

Что и требовалось. Следовательно, метод правильный.

Приведем сценарий диалога решения поставленной задачи на ЭВМ. Для представления данных в программе примем последова­тельность операторов data.

Сценарий Представление данных

Данные об учениках

фамилия вес рост

dano:'данные учеников