Мітки та переходи
writeln('Задайте дійсне число : '); readln(second);
if signop=1 then first:=first+second else
if signop=2 then first:=first-second else
if signop=3 then first:=first*second else
first:=first/second; {Увага 2! }
writeln('результат : ', first);
writeln('Задайте знак операції (1, 2, 3, 4) : ');
end
end.
Недоліком цієї програми є те, що в ній не вказано обробку можливих помилкових дій того, хто нею користується (користувача). Наприклад, якщо задати сталу 5, 6 тощо як знак операції, то буде виконуватися ділення. Навряд чи таке рішення має сенс. Крім того, якщо після знака ділення задати другий операнд 0, то при виконанні first/second відбувається ділення на 0, результат якого комп'ютеру "невідомий", і програма аварійно завершиться.
Доповнимо програму, щоб її осмислене виконання продовжувалося й після описаних помилок користувача. Такі доповнення називаються "захистом від дурня", а програма з ними – "дурнестійкою".
По-перше, якщо вказано недопустимий знак операції, повернемо користувача до задання нового знака операції, не примушуючи задавати другий операнд. Для цього скористаємося оператором continue (продовжувати виконання циклу з обчислення умови продовження).
По-друге, перед діленням варто перевірити, чи не рівний дільник нулю.
Така перевірка не завадить у будь-який програмі та в будь-якому її місці, де вказано ділення. У даному випадку ділення на 0 можна запобігти, також повернувши користувача до повторного задання знака операції і нового операнда (зрозуміло, можливі й інші рішення).
Отже, замість рядка з коментарем {Увага 1! } напишемо:
if (signop>4) or (signop<1) then
begin
writeln('-----Недопустимий знак операції-----');
writeln('Задайте знак операції (1, 2, 3, 4) : ');
continue
end;
Замість рядка з коментарем {Увага 2!}, що задає ділення, помістимо оператор: