.


:




:

































 

 

 

 





, , . , , , , . , , , . . , . . . .

{ Consts }

uses

Crt,

Graph, { }

Consts, { }

Types, { }

Mathem1, { }

Draw1, { }

{ }

Mathem2, { }

Draw2; { }

{ }

function F1(x:real):real; far; { }

begin

F1:=9*x*x-11;

end;

{ }

function F2(x:real):real; far; { }

begin

F2:=x*x*x+5;

end;

{ **************** **************** }

var

M1,M2:TMatMas; { }

Y1min,Y2min, { ... }

Y1max,Y2max, {... }

Ymin,Ymax:real; { }

Kx,Ky:real; { }

Ms1,Ms2:TScrMas; { "" }

Xo,Yo:word; { "" }

RootMas:TRoot; { }

K:word; { }

Rect:TRect; { }

begin

{ ********* *********** }

with Rect do

begin

Origin.X:=OriginX;

Origin.Y:=OriginY;

Size.X:=Nx;

Size.Y:=Ny;

end;

{ }

EnterMatMas (M1,Nx,@F1,Xmin,Xmax);

EnterMatMas (M2,Nx,@F2,Xmin,Xmax);

{ }

Y1min:=Min(M1,Nx); Y1max:=Max(M1,Nx);

Y2min:=Min(M2,Nx); Y2max:=Max(M2,Nx);

Ymin:=Minimum(Y1min,Y2min);

Ymax:=Maximum(Y1max,Y2max);

{ }

Kx:=Nx/(Xmax-Xmin);

Ky:=Ny/(Ymax-Ymin);

{ "" }

EnterScrMas(Ms1,M1,Ymin,Ky,Rect);

EnterScrMas(Ms2,M2,Ymin,Ky,Rect);

{ "" }

Zero(Xmin,Xmax,Ymin,Ymax,Rect,Kx,Ky,Xo,Yo);

{ }

K:=Solution(Xmin,Xmax,@F1,@F2,RootMas);

{ ********************** ********************* }

GraphInit;

{ }

Ramka(Rect,Width,Cyan);

{ }

DrawBounds(Xmin,Xmax,Ymin,Ymax,Rect,Red);

{ }

DrawGridLines(NgrX,NgrY,Rect,DarkGray);

{ }

DrawAxis(Rect,Xo,Yo,Red);

{ }

DrawFunction(Ms1,Nx,LightGreen);

DrawFunction(Ms2,Nx,Yellow);

{ }

WriteCoord(RootMas,K,Rect,LightGreen);

ReadKey;

CloseGraph;

end.

. .

unit Consts;

interface

const

Nx=440; { X }

Ny=480; { Y }

OriginX=180; OriginY=40; { }

Xmin=-2; Xmax=2; { }

NgrX=6; NgrY=23; { }

Epsilon=0.001; { }

R=10; { }

const

Width=3; { }

implementation

end.

.

unit Types;

interface

uses Consts;

type

TMatMas=array[1..Nx] of real; { }

TScrMas=array[1..Nx] of word; { "" }

TRealCoord=record x,y:real; end; { . }

TRoot=array[1..Nx div 10] of TRealCoord; { }

TIntCoord=record x,y:word; end; { }

TRect=record { }

Origin:TIntCoord; { }

Size:TIntCoord; { }

end;

implementation

end.

, .

Mathem1 , . . , .

unit Mathem1;

interface

uses Types, Consts;

procedure EnterMatMas (

var M: array of real; { }

Nx: word; { }

Func: Pointer; { }

Xmin,Xmax: real { }

);

{ }

function Solution(

Xmin,Xmax:real; { }

F1,F2:pointer; { }

var RootMas:TRoot): { }

byte; { }

implementation

procedure EnterMatMas(

var M: array of real; { }

Nx: word; { }

Func: Pointer; { }

Xmin,Xmax: real { }

);

type

TFunc = function (x:real):real; { }

var

F: TFunc; { }

x: real; { }

dx: real; { }

i: word; { }

begin

F:=TFunc(Func); { }

dx:=(Xmax-Xmin)/(Nx-1); { }

x:=Xmin; { }

for i:=0 to Nx-1 do { }

begin

M[i]:=F(x); { }

x:=x+dx; { }

end;

end;

{ }

function Solution(

Xmin,Xmax:real; { }

F1,F2:pointer; { }

var RootMas:TRoot): { }

byte; { }

type

TFunc = function (x:real):real; { }

var

Fu1,Fu2: TFunc; { }

{ ,

}

function Fu(x:real):real;

begin

Fu:=Fu1(x)-Fu2(x);

end;

{ , }

function SubRange (var FirstX, LastX, Step: real): boolean;

begin

{ , .

, X }

while (Fu(FirstX)*Fu(FirstX+Step)>0)and((FirstX+Step)<=Xmax) do

FirstX:= FirstX+Step;

if ((FirstX+Step)<=Xmax)

then

begin

LastX:= FirstX+Step;

SubRange:= True;

end

else SubRange:= False;

end;

{ }

function Root (FirstX, LastX, NewStep: real): real;

begin

repeat

{ }

NewStep:= NewStep/R;

{ () }

SubRange (FirstX,LastX,NewStep);

{ }

LastX:= FirstX + NewStep;

until abs(NewStep)<=Epsilon/R; { }

Root:= FirstX; { }

end;

var

Step: real; { }

CurLeft,CurRight:real; { , }

k:word; { }

begin

k:=0;

{ }

Fu1:=TFunc(F1); Fu2:=TFunc(F2);

{ }

Step:=(Xmax-Xmin)/R;

{ }

CurLeft:= Xmin;

{ }

while SubRange(CurLeft,CurRight,Step) do

begin

inc(k);

RootMas[k].X:=Root(CurLeft,CurRight,Step);

RootMas[k].Y:=Fu1(RootMas[k].X);

CurLeft:= CurRight;

end;

Solution:=K;

end;

end.

: (implementation) Mathem2. :

unit Mathem2;

interface

{ () }

function Min(

M: array of real; { }

N: word { }

):real;

{ () }

function Max(

M: array of real; { }

N: word { }

):real;

{ }

function Minimum(x,y:real):real;

{ }

function Maximum(x,y:real):real;

{ "" }

procedure EnterScrMas(

var Ms: array of word; { "" }

Mm: array of real; { }

Ymin: real; { }

K: real; { }

var Rect { }

);

{ "" }

procedure Zero (

Xmin,Xmax,Ymin,Ymax:real; { }

var Rect; { "" }

Kx,Ky:real; { }

var Xo,Yo:word); { "" }

implementation

end.

 

. - . , . .

{*********** *************}

unit Draw1;

interface

uses Types;

{ }

procedure GraphInit;

{ }

procedure DrawFunction(M:array of word;N:word;Color:byte);

{ }

procedure Ramka(Rect:TRect;Width,Color:word);

implementation

uses Graph,Consts;

{ }

procedure GraphInit;

var

Driver,Mode:integer;

Res:integer;

begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

Res:=GraphResult;

if Res<>0 then

begin

WriteLn(GraphErrorMsg(Res));

WriteLn('Press <Enter> for exit');

ReadLn;

Halt(1);

end;

end;

{ }

procedure DrawFunction(M:array of word;N:word;Color:byte);

var

i:word;

begin

SetColor(Color);

MoveTo(OriginX,M[0]);

for i:=1 to N-1 do

begin

LineTo(OriginX+i,M[i]);

{ PutPixel(OriginX+i,M[i],Color);}

end;

end;

{ }

procedure Ramka(Rect:TRect;Width,Color:word);

var

i,OldColor:byte;

begin

OldColor:=GetColor;

SetColor(Color);

with Rect do

for i:=1 to Width do

Rectangle(Origin.X-i, Origin.Y-i,

Origin.X+Size.X+i, Origin.Y+Size.Y+i);

SetColor(OldColor);

end;

end.

: (implementation) Draw2. :

{*********** *************}

unit Draw2;

interface

{ }

procedure DrawAxis(var Rect;Xo,Yo,Color:word);

{ }

procedure DrawBounds(Xmin,Xmax,Ymin,Ymax:real;var Rect;Color:word);

{ }

procedure DrawGridLines(NgrX,NgrY:word;var Rect;Color:word);

{ }

procedure WriteCoord(var RootMas;K:word;var Rect;Color:word);

implementation

end.

 

8

1. Turbo Pascal.

2. .

3. . .

4. ( , , ).





:


: 2016-12-06; !; : 279 |


:

:

,
==> ...

1725 - | 1590 -


© 2015-2024 lektsii.org - -

: 0.074 .