Помощь - Поиск - Пользователи - Календарь
Полная версия: Построение любого графика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Altair
Мне нужно было иногда рисовать графики (для матана). Я довольно ленивый, а потому написал прогу для их постоения. Онадалекаот совершенства, но может кому надо...
изменяя выражение {***} и опции можно строить любые графики.
Код
{$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.
Таги
Здорова...куда тут нужно свою функцию ставить скажи плиз...
GoodWind
место, куда подставляется фунция выделено так:
Код
{****}замени эту функцию на свою{****}
Таги
Почему када компилируешь ничего не происходит...тока экран моргает...и все...
GoodWind
код покажи..
Таги
Код
{$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
Таги, у тебя при X = 0 происходит Division By Zero... Неужели это не видно по функции? Надо было делать так:
{***} if x<>0 then begin y:=3/x; {***}
Таги
ok...спасибо..работает...
madpanda
Вот воспользовался этой программой для построения графика функции.

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
Ументш диапазон например
-10 ... 10
Altair
На Free Pascal у меня отработало без ошибок.
Нажмите для просмотра прикрепленного файла
Только область конечно надо ограничить справа.
Гость
было бы здорово, если бы автор добавил описания к константам :-)

з.ы. Altair, Спасибо :-)
volvo
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
У меня почему то не получилось построить график
запускаю всё это дло а оно выдаёт мне с верху вниз пол экрана серым,вторая половина чёрным и красненькая полоска посередине всё...

Код
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
Странно, у меня все хорошо отрисовало в FreePascal:
volvo
NadBlack, в Турбо Паскале тоже прекрасно отрисовывается...
Гость
Хм,у меня возможно из-за неполной версии паскаля такой глюк
А как мне нужно изменить эту строчку
{***} if x<>1 then begin y:=abs(x-1); {***}
если у меня формула y:=abs(x)-1
Bokul
Цитата
А как мне нужно изменить эту строчку
{***} if x<>1 then begin y:=abs(x-1); {***}
если у меня формула y:=abs(x)-1


Гость, ты что смеешься? blink.gif Вот так:
 if true then begin y:=abs(x)-1;
.
Reflex
как построить график функции X^X
Atos
http://forum.pascal.net.ru/index.php?showt...&st=0&p=38226&# возведение в степень
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.