Вот первая прога:Код
program KKR1;
uses crt;
var
E,a,b,s,h,R,x,d,c,integ,integlast:real;
i:integer;
p:Char;
n:longint;
function func(x:real):real; {определение функции в точке x}
begin
if x<=-2*R then func:=d
else
if x<=0 then func:=sqrt(x*(-x-2*R))
else
if x>2*R then func:=c
else
func:=-sqrt(x*(-x+2*R))
end;
begin {ввод исходных данных}
ClrScr;
integ:=0;
n:=2;
repeat
repeat
write('Введите границы интервала вычислений a и b (a<b): ');readln(a,B);
until a<b;
repeat
write('Введите радиус R (R>0): ');readln®;
until r>0;
repeat
write('Введите d (d<0): ');readln(d);
until d<0;
repeat
write('Введите c (c>0): ');readln(c);
until c>0;
repeat
write('Введите точность вычисления интеграла E (E>0): ');readln(E);
until E>0;
ClrScr;
writeln(' a=',a:5:2,' b=',b:5:2,' d=',d:5:2,' c=',c:5:2,' R=',r:5:2, ' E=',E:2:4);
write('Все верно ? (y/n): ');
readln(p);
until ((p='y') or (p='Y')); {повторять ввод данных пока нет подтверждения о его правильности}
ClrScr;
writeln('Идет подсчет!');
repeat
begin
ClrScr;
writeln('n=',n);
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0;
for i:=1 to n do
begin
x:=a+i*h; {приращение аргумента}
s:=s+func(x); {сумма значений функции на отрезке [a,b]}
end;
Integlast:=Integ; {сохранение предыдущего значения интеграла}
n:=n*2;
Integ:=h*s; {расчет интеграла}
end until (abs(Integ-Integlast)<E);
ClrScr;
writeln('Значение интеграла на интервале [',a:0:2,',',b:0:2,'] для функции,');
writeln('заданной графически равно: ',Integ:0:4);
readkey;
end.
Конец