Программа иллюстрирует механизм выхода из процедуры [
завершения в нужную точку программы. В программе \ осуществляется ввод произвольного целого числа, затем ¦
вычисляется корень квадратный из него и находится \ обратная ему величина. Для завершения работы программы \
следует ввести единицу. \ +————————————————————————-—————————+^
Uses F Jump;
var
OldExit: Pointer; {Старое значение переменной ExitProc} Jump : JumpRec; {Сохранение точки выхода} г : Real; {Вспомогательная переменная} label Loop;
Procedure MyExit; Far;
{Эта процедура обрабатывает исключительную ситуацию} begin
Long Jump(Jump) end; {MyExit} begin
OldExit := ExitProc;
repeat
Loop: {Точка повторения ввода} if ErrorAddr <> NIL then begin
Write('Повторите ввод числа: ');
ErrorAddr := NIL;
ExitCode := 0 end else
Write('Введите число: ');
ExitProc := @MyExit; /'Адрес процедуры выхода} SetJump(Jump); {Контролируем ввод данных} if ErrorAddr <> NIL then begin
WriteLn('Ошибка при вводе вещественного числа');
Goto Loop end else
ReadLn(r);
Set Jump(Jump); {Контролируем извлечение корня} if ErrorAddr <> NIL then begin
WriteLn('Ошибка при извлечении корня');
Goto Loop end else
r := sqrt(r);