Спасибо
Можно пару вопросов?
1. Я никак не могу понять как пересчитывать координаты из нормальных в графические (кстати, надо будет и обратно пересчитывать, координаты, полученные мышкой - хотя совершенно не представляю, как их передать в программу).
2. Функция getnum не компилируется, а остальные, связанные с мышью не работают
Вообщем, я явно чего-то не понимаю...
Программа пока выглядит так:
Код
{$N+}
{$E+}
{$X+}
uses graph,crt;
const
x0=500; {начало координат}
y0=400;
mtrx=10;
mtry=10;
shag=0.0001;
var
gm,gd:integer;
x1,y1,i, j:integer;
xmin, xmax, ax :real;
x,y:real;
sx, sy: integer;
Coord: String;
Procedure ShowMouse; assembler; {показать мышь}
Asm
Mov AX,$01
Int $33
end;
{procedure get_mouse_status(var button: Byte: var x, y: Word);
begin
regs.AX:=$03;
intr($33, regs);
with regs do
button:=BL;
x:=CX;
y:=DX;
end;
end;
{Function getnum(num, {var x,y: real):word; {получить координаты при нажатии кнопки мыши}
{var
kn:word;
begin
asm
mov ax,$05
mov bx,num
int $33
mov x,cx
mov y,dx
mov kn,bx
end;
leftnum:=kn
end; }
Function InitMouse:boolean; {Инициализация мыши}
var
ResultRegAX:word;
begin
asm
mov ax,$00
int $33
mov ResultRegAX,ax
end;
If ResultRegAX=$FFFF then InitMouse:=true else InitMouse:=false
End;
{function gx(x:real; sx:Integer):integer;
begin
gx:=trunc(sx*x)+Getmaxx div 2;
end;
function gy(y:real; sy:Integer):integer;
begin
gy:=trunc(sy*y)+Getmaxy div 2;
end; }
begin
writeln ('Vvedite predely izmeneniya X.');
write ('ot: ');
readln (xmin);
write ('do: ');
readln (xmax);
gd:=InstallUserDriver('vesa256',nil);
gm:=3;
initgraph (gd,gm,'');
{------------------}
setcolor(8);
{Оси}
for i:=0 to 768 do putpixel(x0,i,8);
for i:=0 to 1024 do putpixel(i,y0,8);
OutTextXY(497,0,'^'); OutTextXY(999,397,'>'); {стрелки осей OX, OY}
SetColor(LightGreen);
OutTextXY(480,0,'y'); OutTextXY(999,410,'x');
OutTextXY(505,405,'0');
SetColor(Green); {установка зеленого цвета}
For i:=1 to 20 do {нанесение делений и числовых отметок на ось OY}
begin Str(20*(21-i), Coord); j:=i*20+10;
OutTextXY(2, j-5, Coord);
Line(28, j, 30, j)
end;
For i:=1 to 29 do {нанесение делений и числовых отметок на ось OX}
begin Str(20*i,Coord); j:=i*20+30;
If Odd(i) then OutTextXY(j-8, 436,Coord); Line(j,430, j,432)
end;
SetViewPort(31,4,630,429,FALSE); {установка текущего графического окна}
{sx:=getmaxx div 3 - 10;
sy:=getmaxy div 3 - 10; }
x:=xmin;
repeat
begin
y:=x*x*x*ln(abs(x*x-4));
{putpixel (x0+trunc(x*mtrX),y0-trunc(y*mtrY),yellow);}
{putpixel (gx(x, sx), gy(y,sy), yellow);}
x:=x+shag;
end;
until x<=xmax;
if initMouse then
Begin
ShowMouse;
{getnum (0,x,y); }
end;
readkey;
closegraph;
end.
Метрическую сетку и обозначения в нужном месте будут, когда я хоть увижу, как этот график выглядит...
Да, график пытается отображаться почему-то только когда максимум меньше минимума...