Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2009, 10:15   #1
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию Построение графика функции. TP

Помогите модифицировать программу под мои функции.

F1=exp(-(x+5))
F2=exp(5*ln(abs(x+10)))


Заранее спасибо
Вложения
Тип файла: txt график.txt (1.1 Кб, 139 просмотров)
sysfa1l вне форума Ответить с цитированием
Старый 15.11.2009, 10:24   #2
VilAm
Пользователь
 
Аватар для VilAm
 
Регистрация: 14.11.2009
Сообщений: 56
По умолчанию

Код:
Program UniversalGraph; 
Uses Graph; 

Type Fun = Function(X:Real):Real; 

Procedure Graphic(F:Fun; XBeg,XEnd:Real); 
Var 
Max, Min, {Экстремальные точки функции в пределах диапазона} 
I, {Переменная цикла} 
Step, {Расчитываемый шаг} 
GradX, {Приращение функции на один шаг по X} 
GradY: Real; {Приращение функции на один шаг по Y} 
GraphicX, {Координата по X} 
GraphicY: Integer; {Координата по Y} 
Flag: Boolean; {Флаг - перемещена первая точка} 

Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real); 
Var GradX, GradYX: Real; 
X, Y: Integer; 
Color: Word; 
Begin 
Color:=GetColor; 
SetColor (7); 
GradX :=GetMaxX/(CoordYEnd-CoordYBeg); 
GradYX:=GetMaxY/(CoordHMax-CoordHMin); 
If (CoordYEnd>0) And (CoordYBeg<0) Then 
Y:=Round(GradX*(0-CoordYBeg)); 
If CoordYEnd<0 Then Y:=GetMaxY; 
If CoordYBeg>0 Then Y:=1; 
If (CoordHMin<0) And (CoordHMax>0) Then 
X:=Round(GradYX*(CoordHMax)); 
If CoordHMin>0 Then X:=GetMaxY; 
If CoordHMax<0 Then X:=1 ; 
Line (1,X,GetMaxX,X); {Горизонтальная линия} 
Line (GetMaxX-4,X+5,GetMaxX,X); {Стрелочка} 
Line (GetMaxX-4,X-5,GetMaxX,X); {Стрелочка} 
Line (Y,1,Y,GetMaxY); {Вертикальная линия } 
Line (Y-5,5,Y,1); {Стрелочка} 
Line (Y+5,5,Y,1); {Стрелочка} 
SetColor (Color); 
End; 


Begin 
Step:=(XEnd-XBeg)/(GetMaxY-40); 
I:=XBeg; 
Max:=F(XBeg); 
Min:=F(XBeg); 
While I<=(XEnd+Step) Do 
Begin 
If Max<F(I) Then Max:=F(I); 
If Min>F(I) Then Min:=F(I); 
I:=I+Step; 
End; 
GradX:=GetMaxX/(XEnd-XBeg); 
GradY:=GetMaxY/(Max-Min); 
Coord (XBeg, XEnd, Min, Max); 

Flag:=True; 
I:=XBeg; 
While I<=(XEnd+Step) Do 
Begin 
GraphicX:=Round(GradX*(I-XBeg)); 
GraphicY:=Round(GradY*(Max-F(I))); 
If Flag Then 
MoveTo (GraphicX,GraphicY); 
{ PutPixel(GraphicX,GraphicY,15);} 
LineTo(GraphicX,GraphicY); 
I:=I+Step; 
Flag:=False; 
End; 

End; 

{$F+} {Ключи ассемблирования} 

Function F1(X:Real):Real; 
Begin 
F1:=Sin(x)+COS(x/2); (*сюда впиши свои функции в одной проге 1-ую в другой 2-ую*)
End; 

Procedure GraphicIni; 
Var 
Mode, DriverDet: Integer; 
Begin 
Mode:=0; 
DriverDet:=Detect; 
InitGraph(Mode,DriverDet,'c:\BP\BGI'); 
SetColor(15); 
End; 

{$F-} {Ключи ассемблирования} 

Begin 
GraphicIni; 
Graphic(F1,-10,10); 
ReadLn; 
CloseGraph; 
End.
Мы чужды себе, мы, познающие, мы сами чужды себе
VilAm вне форума Ответить с цитированием
Старый 15.11.2009, 10:43   #3
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию

Желательно что нибудь попроще, препод не поверит что я сам написал токую прогу..

Если в той проге(которую я предлогаю) просто поменять функции график не строится =\
sysfa1l вне форума Ответить с цитированием
Старый 15.11.2009, 10:45   #4
VilAm
Пользователь
 
Аватар для VilAm
 
Регистрация: 14.11.2009
Сообщений: 56
По умолчанию

так пойдет?
Код:
program graffunc;
uses Graph,dos,crt;
var
 x1,x2,y1,y2,x,y:real;
 dx,mx,my:real;
 l,b,w,h,x0,y0:integer;
 st:string;
 grdriver:integer;
 grmode:integer;
 errcode:integer;
function f(x:real):real;
begin
 f:=(ln(x))/x;(*сюда впиши свои функции в одной проге 1-ую в другой 2-ую*)
end;

begin
 writeln('grafik fynction1');
 grdriver:=vga;
 grmode:=vgahi;
 initgraph(grdriver,grmode,'e:\tp\bgi');
 errcode:=graphresult;
 if errcode<>grok then halt(1);
 l:=40;
 b:=400;
 h:=200;
 w:=200;
 x1:=0;
 x2:=25;
 dx:=0.01;
 y1:=f(x1);
 y2:=f(x2);
 x:=x1;
 repeat
  y:=f(x);
  if y<y1 then y1:=y;
  if y>y2 then y2:=y;
  x:=x+dx;
 until (x>=x2);
 my:=h/abs(y2-y1);
 mx:=w/abs(x2-x1);
 x0:=l;
 y0:=b-abs(round(y1*my));
 line(l,b,l,b-h);
 line(x0,y0,x0+w,y0);
 str(y2:5:1,st);
 outtextXY(l+5,b-h,st);
 str(y1:5:1,st);
 outtextXY(l+5,b,st);

 x:=x1;
 repeat
  y:=f(x);
  putpixel(x0+round(x*mx),y0-round(y*my),15);
  x:=x+dx;
 until (x>=x2);
 readln;
 closegraph;
 
end.
Мы чужды себе, мы, познающие, мы сами чужды себе
VilAm вне форума Ответить с цитированием
Старый 15.11.2009, 10:56   #5
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию

дос... можно без него что то ?
sysfa1l вне форума Ответить с цитированием
Старый 15.11.2009, 10:59   #6
VilAm
Пользователь
 
Аватар для VilAm
 
Регистрация: 14.11.2009
Сообщений: 56
По умолчанию

любой ваш каприз
Код:
program f; 
uses graph; 
var gd, gm: integer; 
x, y: real; 
begin 
gd:= detect; 
initgraph( gd, gm, ''); 
SetColor(5); 
Line(0, 240, 640, 240); 
Line(320, 0, 320, 480); 
x:= -20; 
While x<=20 do 
begin 
y:= -Sqr(x);(*сюда впиши свои функции в одной проге 1-ую в другой 2-ую*) 
PutPixel( x *5 + 320, y*5 +240, 15); 
x:=x + 0.01; 
end; 
end.
и вариант 2
Код:
program f; 
uses graph, crt; 
var gd, gm: integer; 
x, y, mx, my, m,x1, x2, y1, y2,h: real; 
function f(x:real): real; 
begin 
 f:= Sqr(x);(*сюда впиши свои функции в одной проге 1-ую в другой 2-ую*)  
 end; 
clrscr; 
Write(‘Введите границы отрезка’); 
Read(x1, x2); 
y1:=f(x1); y2:=f(x2); 
mx:=640 /(x2 –x1); 
my:=480 / (y2 – y1); 
If mx< my Then m:=mx 
else m:= my; 
h:= 1/m; x:=x1; 
gd:= detect; 
initgraph(gd, gm, ''); 
SetColor (5); 
Line(0, 240, 640, 240); 
Line(320, 0, 320, 480); 
While x<= x2 do 
begin 
y:= f(x); 
PutPixel(x *m +320, y*m +240, 15); 
x:= x+ h; 
end; 
end.
Мы чужды себе, мы, познающие, мы сами чужды себе

Последний раз редактировалось VilAm; 15.11.2009 в 11:06.
VilAm вне форума Ответить с цитированием
Старый 15.11.2009, 11:40   #7
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию

program g;
uses graph, crt;
var gd, gm: integer;
x, y, mx, my, m,x1, x2, y1, y2,h: real;
function f(x:real): real;
begin
f:=exp(-(x+5))
end;
begin
clrscr;
Writeln('vvedite granic');
Read(x1, x2);
y1:=f(x1); y2:=f(x2);
mx:=640 /(x2-x1);
my:=480 / (y2-y1);
If mx< my Then m:=mx
else m:= my;
h:= 1/m; x:=x1;
gd:= detect;
initgraph(gd, gm, 'c/bp');
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
While x<= x2 do
begin
y:= -f(x);
PutPixel(x*m+320,y*m+240,15);
x:= x+h;
end;
end.
sysfa1l вне форума Ответить с цитированием
Старый 15.11.2009, 11:41   #8
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию

прога не работает чтот (
sysfa1l вне форума Ответить с цитированием
Старый 15.11.2009, 13:01   #9
sysfa1l
Новичок
Джуниор
 
Регистрация: 14.11.2009
Сообщений: 6
По умолчанию

вроде разобрался но график не строится =\
program g;
uses graph, crt;
const x1=-12 ;x2=2;
var gd, gm: integer;
x, y, mx, my, m, y1, y2,h: real;
function f(x:real): real;
begin
f:=exp(-(x+5));
end;
begin
clrscr;
y1:=f(x1); y2:=f(x2);
mx:=640 /(x2-x1);
my:=480 /(y2-y1);
If mx< my Then m:=mx
else m:= my;
h:=1/m; x:=x1;
gd:=detect;
initgraph(gd, gm, 'D:\tp7\tp7\BIN');
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
While x<= x2 do
begin
y:= -f(x);
PutPixel(trunc(x*m+320),trunc(y*m+2 40),15);
x:=x+h;
end;
end.
sysfa1l вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика разрывнойй функции DAV88 Помощь студентам 5 08.05.2009 09:40
Построение графика функции на QBasic artemon999 Помощь студентам 2 30.03.2009 15:16
Построение графика функции (Паскаль) Scream of the soul Помощь студентам 4 16.03.2009 02:57
Построение графика функции Жека:) Общие вопросы C/C++ 5 11.11.2008 19:05
Графика. Построение функции AngelOfDeath Общие вопросы Delphi 2 14.10.2008 13:44