Хелпикс

Главная

Контакты

Случайная статья





UsesCrt;begin. usesCrt; begin. Как доказать правильность программы?



UsesCrt;begin

TextBackGround(Black); ClrScr;

TextColor(Red);write('Каждый ');

TextColor(LightRed);{оранжевыйзаменимсветло-красным}write('охотник '); TextColor(Yellow);write('желает '); TextColor(Green);write('знать '); TextColor(LightBlue);write('где '); TextColor(Blue);write('сидит '); TextColor(Magenta);write('фазан.');

readln;{ чтобы фраза не исчезала с экрана }

end.

Задание 2: (выполняются либо в паскаль-онлайн, либо скачать программу PascalABC.NET )

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

 

usesCrt; begin

TextBackGround(Blue); { цвет фона } TextColor(LightGray); { цвет символов } ClrScr; { очистить экран }

writeln('Буря мглою небо кроет');

writeln('Вихри снежные крутя.');

writeln('То как зверь она завоет,');

writeln('То заплачет, как дитя.');

writeln;

writeln(' А.С.Пушкин');

readln; { чтобы стихотворение не исчезло с экрана }

end.

 

Пример задачи анализа алгоритмов: определение результата алгоритма

Задание 3:(выполняются либо в паскаль-онлайн, либо скачать программу PascalABC.NET )

Выполните программу, напишите текстовую формулировку задачи

programrty;

usescrt;

varx,y:real;

begin

clrscr;

write('x = ');

readln(x);

ifx>25 theny:=3*sqr(x)+5

elsey:=2*x-(x*x*x);

write('y = ',y:4:2);

readln;

end.

Как доказать правильность программы?

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

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

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

Однако, как писал нидерландский учёный, один из создателей современного программирования, «отладка может показать лишь наличие ошибок и никогда — их отсутствие». В результате можно гарантировать верную работу программы только при тех данных, которые использовались в контрольных тестах.

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

Пример. Рассмотрим следующую программу для выбора максимального из трёх значений, записанных в переменных а, b и с:

если а > b то М:=а иначе М:=b все

если b > с то М:=b иначе М:=с все

Проверяя её на тестах

(а,b,с) = (1,2,3), (1,3,2), (2,1,3) и (2,3,1),

мы во всех этих случаях получаем в переменной М верный ответ 3. Однако это не означает, что программа правильная, так как существует контрпример (3,2,1): для этого набора входных данных в переменной М в результате оказывается число 2.

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

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

На практике редко доказывают правильность всей программы в целом. В то же время очень полезно доказывать правильность отдельных блоков (циклов, процедур и функций) для уменьшения количества «необъяснимых» ошибок и сокращения времени отладки.

Задание:

  1. Составить конспект по теме, в том числе по видеоматериалу
  2. Выполнить задачи в Паскаль

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.