PDA

Просмотр полной версии : TP графопостроитель


Serious
08.05.2012, 17:36
Извините что не по теме, но мне кажется толковые люди мне здесь очень помогут... Вообщем в 2х словах, в курсаче код нужно написать построение графика заданной функции. Измучался уже, код нашел,но когда запускал поначалу писал о ошибке GRAPH.TPU я так понял не находил, когда путь прописал (у меня в частности c:\tp\UNITS) то ничего вообще не выдавал...

собственно сам код:

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);
End;

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

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

Begin
GraphicIni;
Graphic(F1,-10,10);
ReadLn;
CloseGraph;
End.

kolr
08.05.2012, 22:48
на чом ты пишеш?(среда програмирования)

mikser
08.05.2012, 22:59
Похоже на Борланд паскаль.

Serious
08.05.2012, 23:31
Я этот код слизал отсюда http://tpxexe.narod.ru/graphdrawer.html [TURBO PASCAL] :eek:

Yegor
10.05.2012, 01:56
Serious, что конкретно не работает? Что на экране отображается?

Программа должна вывести на дисплей графику и ожидать нажатия любой кнопки.

Существует ли папка c:\tp\BGI ?

Когда запускаешь эту программу что происходит из перечисленного?

1. выдает ошибку, какую?

2. пустой экран, если да то мигает ли текстовый курсор ввода?

3. программа запускается и тут же останавливается?

Serious
10.05.2012, 05:58
Yegor, выдает ошибку, я так понимаю это из за ОС W7 ...
http://s1.ipicture.ru/uploads/20120510/OjAHh3Wt.png
Папка c:\tp\BGI существует.
сам код исправно работает?
что мне нужно сделать?

kolr
10.05.2012, 10:26
код походу ок. турбо паскаль стар для 7 винды. попробуй free pascal или pascalABC

Yegor
10.05.2012, 12:02
В процедуре GraphicIni TP пытается переключиться в графический режим для вывода графики. Попробуй запустить TP в режиме совместимости.

qwm
10.05.2012, 15:23
Досовский VGA режим у тебя пойдёт только в VM, DosBox и других dos-эмуляторах. Vista/7 его ни в каком режиме совместимоcти не эмулируют.

Yegor
10.05.2012, 16:37
Да DosBox самое простое решение проблемы в таком случае.

Serious
10.05.2012, 17:10
Спасибо что подсказали, но далее возникла такая проблема, когда я через dosBox запустил он графический модуль не нашел, кинул его в корневую, после этого модуль не просил, но после запуска отказывался вообще что либо делать, просто run run и тишина...
Я решил попробовать в ABC (скачал его отсюда http://www.cyberforum.ru/pascal/thread89342.html) но там меня тоже попросил графический модуль... в ABC он встроены? или его нужно скачать? или же изменить уже сам код?