Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Поломки при вводе





 

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

 

get_integer is

-- Получить целое от пользователя и сделать его доступным в

-- last_integer_read.

-- Если ввод некорректен, запросить повторения, столько раз,

-- сколько необходимо.

do

print ("Пожалуйста, введите целое: ")

read_one_integer

rescue

retry

end

 

 

Эта версия программы иллюстрирует стратегию повторения.

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

 

Maximum_attempts: INTEGER is 5

-- Число попыток, допустимых при вводе целого.

get_integer is

-- Попытка чтения целого, делая максимум Maximum_attempts попыток.

-- Установить значение integer_was_read в true или false

-- в зависимости от успеха чтения.

-- При успехе сделать целое доступным в last_integer_read.

local

attempts: INTEGER

do

if attempts < Maximum_attempts then

print ("Пожалуйста, введите целое: ")

read_one_integer

integer_was_read:= True

else

integer_was_read:= False

end

rescue

attempts:= attempts + 1

retry

end

 

 

Предполагается, что включающий класс имеет булев атрибут integer_was_read.

Вызывающая программа должна использовать эту программу следующим образом, пытаясь введенное целое присвоить сущности n:

 

get_integer

if integer_was_read then

n:= last_integer_read

else

"Иметь дело со случаем, в котором невозможно получить целое"

end

 







Date: 2015-12-13; view: 357; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию