Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Создать программу для построения любых графиков функций в Turbo Pascal.

Некруз Козихонов Знаток (454), закрыт 3 года назад
Создать универсальную программу, которая с помощью уравнения построить график любых графиков функций в Turbo Pascal. У меня есть код, но не разбираюсь никак. Помогите пожалуйста!

Практически универсальная программа для рисования графиков функций от одной переменной, график растянут по обеим осям.

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 MaxF(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);
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.
Лучший ответ
Максим Ссорин Ученик (185) 9 лет назад
К чему эти сложности? Естестно нифига не поймёшь. Вся суть задачи сводится к тому:
1. Нарисовать оси и задать шаг.
2. назначить некую переменную в которую ты будешь забивать функцию например y
3. Загнать в цикл и подставлять поочерёдно значения x

Допустим функция:
y=2x+x+3
загоняем в цикл:
x = [-100..-2,-2.. 0 ..1,2..100]
и отмечаем точки с соответствующими координатами
x=0
y=2*0+0+3 =3
;
x=1
y=2*1+1+3 = 6
;
и так далее...
---
чем меньше шаг в цикле тем плавнее будут линии графика.
Остальные ответы
Jurii Высший разум (176032) 9 лет назад
Установи себе
Mathematica
или
Mathcad
Похожие вопросы