Функции и обработка исключительных ситуаций - PascalABC.NET

Формулировка задачи:

Здравствуйте.Мне задали написать программу с использованием функции на языке Pascal. Мне задано вычислить функцию Но,главное то что нужно предвидеть возможные ошибки.Например если в знаменателе будет 0(ноль),то понятно что на него нельзя делить и нужно вывести сообщение типа "Ошибка!Введите другие данные". При написании программы,возникла проблема в том что нужно выводить ошибку и просить ввести еще раз данные,а моя программа выводит ошибку и дальше вычисляет функцию. Исправьте программу пожалуйста,при возможности указать какие ошибки еще можно обработать.Код ниже:
Program Mazur_10;
Uses CRT;
Var x,a,y: real;
   
                 function obrabotka_errors(x,a:real):real;
                 var k,q,r:real;
                 begin
                 q:=a+x;
                 r:=a*x;
                 k := a - exp((-1)*((r)/(sin(q))));
                 if (q=pi) or (q=0)
                 then
                 writeln('Ошибка!Пожайлуста введите другие данные')
                 else
                      if (r=0)
                      then
                      writeln('Ошибка!Пожайлуста введите другие данные')
                      else
                      obrabotka_errors:= k;
                 end;
Begin
Clrscr;
          write('Введите число x-> ');
          readln(x);
          write('Введите число a-> ');
          readln(a);
          y:=obrabotka_errors(x,a);
          writeln('Y= ',y);
End.

Код к задаче: «Функции и обработка исключительных ситуаций - PascalABC.NET»

textual
const
  eps = 1e-8;
 
function err(x, a : Real; var res : Real) : Boolean;
begin
  Result := False; // Предположим, что данные ошибочны
  res := sin(a + x);
  if abs(res) < eps then begin WriteLn('sin(a + x) = 0'); exit; end;
  res := a - exp(a*x / res);
  Result := True; // Отработали до конца = гуд!
end;
 
begin
  var x := ReadLnReal('x =');
  var a := ReadLnReal('a =');
  var res : Real;
 
  if err(x, a, res) then
    WriteLn('y = ', res:0:8)
  else
    WriteLn('Вычисление прервано. Введены данные не отвечающие ОДЗ.');
end.

10   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ