Функции и обработка исключительных ситуаций - 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»
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
СОХРАНИТЬ ССЫЛКУ