Консультация № 179855
05.09.2010, 19:01
0.00 руб.
08.09.2010, 19:20
0 1 1
Здравствуйте.помогите пож.Нужно написать программу построения графика функции и чтобы этот график находился в сетке.чтобы можно было записывать координаты и график изменялся,Поример:

Обсуждение

Неизвестный
05.09.2010, 19:18
общий
11.09.2010, 09:01
это ответ
Здравствуйте, sannek2. Здесь представлен текст программы построения графика функции в Turbo Pascal. Промежуток изменения аргумента Вы вводите с клавиатуры, запустив программу, а функцию, график которой Вам нужно построить, пишите в функции F, вложенной в процедуре TablFunc.
Код:
PROGRAM Graphic_of_Function;
USES CRT, Graph;

CONST
N = 50; {число точек на графике}
xwmin:integer=0;
ywmin:integer=0;
xwmax:integer=639;
ywmax:integer=479;

VAR
X, Y : array[1..N] of real;
xmin, xmax, ymin, ymax : real; { Мировая система координат }

PROCEDURE SetWorldCoords( x1, y1, x2, y2 : real );
{ Процедура назначения мировых координат }

BEGIN
xmin := x1;
xmax := x2;
ymin := y1;
ymax := y2
END;

PROCEDURE SetWindow( x1, y1, x2, y2 : integer );
{ Процедура установки параметров окна вывода }

BEGIN
XWmin := x1;
XWmax := x2;
YWmin := y1;
YWmax := y2
END;

{ Функции преобразования мировых координат к координатам устройства }
FUNCTION Xs( x : real ) : integer;
BEGIN
Xs := XWmin + round( (XWmax-XWmin)* (x-xmin)/(xmax-xmin) )
END;

FUNCTION Ys( y : real ) : integer;
BEGIN
Ys := YWmax - round( (YWmax-YWmin)* (y-ymin)/(ymax-ymin) )
END;

PROCEDURE TablFunc( a, b : real );
VAR
i : integer;

function F( x : real ) : real;
begin
F := cos(x);
end;

BEGIN
for i:=1 to N do
begin
X[i] := a + (b-a)/(N-1)*(i-1);
Y[i] := F( X[i] );
end;
END;

FUNCTION MinY : real;
VAR
i : integer;
m : real;
BEGIN
m := Y[1];
for i:=2 to N do
if Y[i]<m then
m := Y[i];
MinY := m
END;

FUNCTION MaxY : real;
VAR
i : integer;
m : real;
BEGIN
m := Y[1];
for i:=2 to N do
if Y[i]>m then
m := Y[i];
MaxY := m
END;

PROCEDURE BuildCoords( nx, ny : Byte );
VAR
i : Byte;
v : real;
s : string;
BEGIN
SetColor( White );
Rectangle( XWmin, YWmin, XWmax, YWmax ); { область графика }
Line( Xs(xmin), Ys(0), Xs(xmax), Ys(0) ); { ось ОХ }
Line( Xs(0), Ys(ymax), Xs(0), Ys(ymin) ); { ось OY }
SetTextStyle(SmallFont,0,5); { выбор шрифта Small }
SetTextJustify(CenterText,CenterText); { выравнивание текста }

{ Разметка оси Х }
for i:=0 to nx-1 do
begin
v := xmin + (xmax-xmin)/(nx-1)*i; { координата i-го штриха }
Str(v:5:2,s); { преобразование числа в строку }
Line(Xs(v), YWmax, Xs(v), YWmax+5); { черчение i-го штриха }
OutTextXY(Xs(v), YWmax+15, s); { вывод числа }
end;

{ Разметка оси Y }
for i:=0 to ny-1 do
begin
v := ymin + (ymax-ymin)/(ny-1)*i;
Str(v:5:2,s);
Line(XWmin, Ys(v), XWmin-5, Ys(v));
OutTextXY(XWmin-30, Ys(v), s);
end;
END;

PROCEDURE Graphic( Color : word );
VAR
i : integer;
BEGIN
SetColor( Color );
MoveTo( Xs(X[1]), Ys(Y[1]) );
Circle( Xs(X[1]), Ys(Y[1]), 2);
FOR i:=2 TO N DO
begin
LineTo( Xs(X[i]), Ys(Y[i]) );
Circle( Xs(X[i]), Ys(Y[i]), 2);
end;
END;

VAR
a, b : real;
GrDr, GrMd : integer;
BEGIN
ClrScr;
Write('Введите пределы изменения аргумента [a, b]: '); {Здесь была ошибка представления строковых данных}
ReadLn(a, b);
TablFunc( a, b );
GrDr := detect;
InitGraph( GrDr, GrMd, '' );
SetWindow( 100, 50, 500, 400 );
SetWorldCoords( a, MinY, b, MaxY );
BuildCoords( 5, 5 );
Graphic( Yellow );
ReadKey;
CloseGraph;
END.
5
Спс
Форма ответа