Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы на экзаменационные билеты_2 / Надежность программы. Организация надежного ввода

.txt
Скачиваний:
16
Добавлен:
28.06.2014
Размер:
2.28 Кб
Скачать
Надежный ввод обеспечивает ввод допустимых значений данных, диапазон которых определен в спецификации.
Пример.
Задача: вычислить сумму ряда S для заданного х с точностью eps.
Организация надежного ввода:
Способ 1. Анализ аномалий.
Аномалии: abs(x)>=1, eps<=0, eps>=1.
Входная форма описывает однократный последовательный ввод переменных х и eps.
Выполняется проверка условия в программе: если исходные данные верны, то происходит вычисление и печать результата, иначе выдается сообщение о неправильных входных данных.
Чтобы выполнить программу при исправленных данных, требуется повторно ее запустить.
Способ 2. Надежный ввод.
Правильность данных проверяется при вводе. Данные повторяются до тех пор, пока не введутся правильные данные.
Реализация повторения с использованием цикла:
а) Метод объединения условий.
Этот метод структурирования состоит в объединении нескольких условий выхода из цикла в одно сложное логическое выражение:

repeat
writeln('Введите правильно х, eps');
readln (x,eps)
until (abs(x)<1) and (eps>0) and (eps<1);

Повторяется ввод данных до тех пор, пока не выполнятся одновременно три условия: abs(х)<1 и 0<eps и eps<1.

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

flag:=true;
repeat
writeln ('Введите правильно x,eps);
readln (x,eps);
if(abs(x)<=1)then
begin
writeln ('Ошибка в x'); flag:=false
end
else
if ((eps<=0) or (eps>=1)) then
begin
writeln ('Ошибка в eps'); flag:=false
end
until flag;

Повторяется ввод данных с детальным анализом правильности х и eps и выводом сообщений об ошибке.
Для завершения цикла используется переменная-флажок flag, которая принимает значения:
flag = true, если данные правильные и flag = false, если данные неправильные.
При flag = true цикл завершается.