Вот... нарисовал. Громоздко, правда, несколько получилось. Но попробуйте так:
Код:
Program pr1;
Var
a,b,x,b1:real;
Function Z(y:real):real;
begin
If x<a then
Z:=exp(a*x)+sqr(cos(a+x))
else
If x=a then
Z:=sqrt(sin(a*b))
else
Z:=(3*exp((2+b)*ln(x)))+((x+b)/(a+x));
end;
Function Max(m1,m2:real):real;
begin
If m1>m2 then Max:=m1 else Max:=m2;
end;
Function Min(m1,m2:real):real;
begin
If m1<m2 then Min:=m1 else Min:=m2;
end;
Begin
Repeat
repeat
Write('Enter a ((a>=0 and a<=Pi) or (a<0 and a>-Pi); a=100 to quit): ');
ReadLn(a);
until ((a>=0) and (a<=Pi)) or ((a<0) and (a>-Pi)) or (a=100);
If a<>100 then
begin
If a=0 then
repeat
Write('Enter b (b>=-12 and b<=8): ');
Readln(b);
until ((b>=-12) and (b<=8))
else
If a>0 then
begin
b1:=Min(Pi/a,8.0);
repeat
Write('Enter b (b>0 and b<=',b1:0:3,'): ');
Readln(b);
until ((b>=0) and (b<=b1));
end
else
begin
b1:=Max(Pi/a,-12.0);
repeat
Write('Enter b (b<0 and b>=',b1:0:3,'): ');
Readln(b);
until ((b<0) and (b>=b1));
end;
Writeln('a= ',a:0:5);
Writeln('b= ',b:0:5);
Repeat
Write('Next x (x>0; x<=0 to quit): ');
Readln(x);
If x=-a then
Writeln('Thes value is forbidden! Try other.');
If (x>0) and (x<>-a) then
Writeln('Z= ',Z(x):0:5);
Until x<=0;
end;
Until a=100;
End.
Извините за английские надписи - с кириллицей мне большая морока возиться.