Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Построение любого графика

Автор: Altair 9.10.2004 0:22

Мне нужно было иногда рисовать графики (для матана). Я довольно ленивый, а потому написал прогу для их постоения. Онадалекаот совершенства, но может кому надо...
изменяя выражение {***} и опции можно строить любые графики.

Код
{$N+}
{$E+}
Uses Graph,crt;
const
{ OPTIONS }
shag=0.0001;
lgr = -50;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;

Var grDriver : Integer;
     grMode : Integer;

   x,y:real;{extended;}
       i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

x:=lgr;
while x<=pgr do
begin
{ readln(x);}
{***} if x<>2 then begin y:=abs(x/(x-2))-1; {***}
{ writeln(y:1:8);}
 putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
 x:=x+shag;
end;
readkey;
closegraph;
end.

Автор: Таги 30.12.2005 0:21

Здорова...куда тут нужно свою функцию ставить скажи плиз...

Автор: GoodWind 30.12.2005 0:30

место, куда подставляется фунция выделено так:

Код
{****}замени эту функцию на свою{****}

Автор: Таги 30.12.2005 0:42

Почему када компилируешь ничего не происходит...тока экран моргает...и все...

Автор: GoodWind 30.12.2005 0:57

код покажи..

Автор: Таги 30.12.2005 1:08

Код
{$N+}
{$E+}
Uses Graph,crt;
const
{ OPTIONS }
shag=0.0001;
lgr = -50;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;

Var grDriver : Integer;
grMode : Integer;

x,y:real;{extended;}
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

x:=lgr;
while x<=pgr do
begin
{ readln(x);}
{***} if x<>2 then begin y:=3/x; {***}
{ writeln(y:1:8);}
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
x:=x+shag;
end;
readkey;
closegraph;
end.

Автор: volvo 30.12.2005 1:23

Таги, у тебя при X = 0 происходит Division By Zero... Неужели это не видно по функции? Надо было делать так:

{***} if x<>0 then begin y:=3/x; {***}

Автор: Таги 30.12.2005 1:26

ok...спасибо..работает...

Автор: madpanda 14.04.2006 5:54

Вот воспользовался этой программой для построения графика функции.

Uses Graph,crt;
const

{ OPTIONS }
shag=0.0001;
lgr = -25;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-100;
OXYmaxX=100;
OXYminY=-100;
oxymaxY=100;

Var grDriver : Integer;
grMode : Integer;

x,y:real;{extended;}
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

x:=lgr;
while x<=pgr do
begin
{ readln(x);}
{***} if x<>2 then begin y:=(exp(ln(2)*x))-5*cos(x)-3; {***}
{ writeln(y:1:8);}
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
x:=x+shag;
end;
readkey;
closegraph;
end.

Выдает ошибку "207 - Invalid Floating poin operation "
При простмотре сначала рисуется график, а потом он резко уходит вверх и появляется линия после нее рисуется какие-то точки...

Помогите разобраться!!!

Автор: klem4 14.04.2006 10:52

Ументш диапазон например
-10 ... 10

Автор: Altair 14.04.2006 11:46

На Free Pascal у меня отработало без ошибок.
Прикрепленное изображение
Только область конечно надо ограничить справа.

Автор: Гость 11.10.2006 18:14

было бы здорово, если бы автор добавил описания к константам :-)

з.ы. Altair, Спасибо :-)

Автор: volvo 11.10.2006 18:27

const
{ OPTIONS }
shag = 0.0001; { <-- Шаг изменения X }
lgr = -50; { <-- Начальное значение X}
pgr = 50; { <-- Конечное значение X }
zcrtX = 320; { <-- Координата X центра экрана }
zcrty = 240; { <-- Координата Y центра экрана }
mtrX = 10; { <-- Коэффициент масштабирования по оси X }
mtrY = 10; { <-- Коэффициент масштабирования по оси Y }
colorG = 15; { <-- Цвет графика }
colorOXY = 4; { <-- Цвет координатных осей }
OXYminX = -200; { <-- Минимальное отображаемое значение оси X }
OXYmaxX = 200; { <-- Максимальное отображаемое значение оси X }
OXYminY = -200; { <-- Минимальное отображаемое значение оси Y }
oxymaxY = 200; { <-- Максимальное отображаемое значение оси Y }

Все вроде прозрачно... unsure.gif

Автор: NadBlack 15.10.2006 2:02

У меня почему то не получилось построить график
запускаю всё это дло а оно выдаёт мне с верху вниз пол экрана серым,вторая половина чёрным и красненькая полоска посередине всё...

Код
Uses Graph,crt;
const
{ OPTIONS }
shag=0.0001;
lgr = -50;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;

Var grDriver : Integer;
     grMode : Integer;

   x,y:real;{extended;}
       i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

x:=lgr;
while x<=pgr do
begin
{ readln(x);}
{***} if x<>1 then begin y:=abs(x-1); {***}
{ writeln(y:1:8);}
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
x:=x+shag;
end;
readkey;
closegraph;
end.

Автор: Bokul 15.10.2006 2:38

Странно, у меня все хорошо отрисовало в FreePascal:


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 15.10.2006 2:45

NadBlack, в Турбо Паскале тоже прекрасно отрисовывается...

Автор: Гость 15.10.2006 3:27

Хм,у меня возможно из-за неполной версии паскаля такой глюк
А как мне нужно изменить эту строчку
{***} if x<>1 then begin y:=abs(x-1); {***}
если у меня формула y:=abs(x)-1

Автор: Bokul 15.10.2006 5:10

Цитата
А как мне нужно изменить эту строчку
{***} if x<>1 then begin y:=abs(x-1); {***}
если у меня формула y:=abs(x)-1


Гость, ты что смеешься? blink.gif Вот так:
 if true then begin y:=abs(x)-1;
.

Автор: Reflex 16.10.2006 1:05

как построить график функции X^X

Автор: Atos 16.10.2006 17:16

http://forum.pascal.net.ru/index.php?showtopic=4535&st=0&p=38226&# возведение в степень