program
laba3;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
const
MAX_X=
80
;
MAX_Y=
25
;
type
FuncToDraw =
function
(x:
real
):
real
;
Func=
function
(x:
real
):
real
;
Var
A,B:
real
;
N:
integer
;
per:
array
[
1..100
]
of
real
;
k:
integer
;
i:
integer
;
function
func1(x:
real
):
real
;
begin
func1:=Tan(
2
*x)/x;
end
;
function
func2(x:
real
):
real
;
begin
func2:=Sqrt(
abs
(
2
*x*x-
4
*x-
5
));
end
;
Function
Integral ( A,B:
Real
; N:
integer
; F:Func):
real
;
var
S,X,H:
real
;
Begin
H:= (B-A)/N;
S:=(F(A)+F(B))/
2
;
X:=A+H;
While
x <= B
do
Begin
S:= S + F(x);
x:=x+H;
End
;
Result:=S*H;
End
;
procedure
DrawUserFunc(x1,x2,y1,y2:
real
; Func1,func2: FuncToDraw);
var
x,y:
integer
;
f1,f2,xcur :
real
;
begin
for
y:=
1
to
MAX_Y
do
begin
for
x:=
1
to
MAX_X
do
begin
xcur:=x1+(x-
1
)*(x2-x1)/(MAX_X-
1
);
f1:= Func1(xcur); f2:= Func2(xcur);
if
(y = MAX_Y-round((MAX_Y-
1
)*(f1-y1)/(y2-y1)))
and
(y = MAX_Y-round((MAX_Y-
1
)*(f2-y1)/(y2-y1)))
then
begin
write
(
'*'
);
k:=k+
1
;
per[k]:=xcur;
end
else
if
(y = MAX_Y-round((MAX_Y-
1
)*(f1-y1)/(y2-y1)))
or
(y = MAX_Y-round((MAX_Y-
1
)*(f2-y1)/(y2-y1)))
then
write
(
'*'
)
else
if
x =
1
- round(x1 * (MAX_X-
1
) / (x2-x1))
then
write
(
'|'
)
else
if
y = MAX_Y + round(y1 * (MAX_Y-
1
)/(y2-y1))
then
write
(
'-'
)
else
write
(
' '
);
end
;
end
;
end
;
begin
Writeln
(
'vvedite A,B,N'
);
Readln(A,B,N);
Writeln
(
'integral F1 = '
, Integral(A,B,N, Func1):
7
:
7
);
Writeln
(
'integral F2 = '
, Integral(A,B,N, Func2):
7
:
7
);
writeln
;
writeln
;
k:=
0
;
DrawUserFunc(-
10
,
10
,-
10
,
30
,func1,func2);
writeln
;
if
k=
0
then
writeln
(
'tochek perese4eniya net'
)
else
begin
writeln
(
'f1=f2 esli x:'
);
for
i:=
1
to
k
do
writeln
(per[i]:
2
:
2
);
end
;
readln;
end
.