![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Кина |
![]()
Сообщение
#1
|
Гость ![]() |
Очень прошу помочь :o
Программа выводит сетку координат и метрическую сетку (разными цветами). Оси должны быть с графическими отметками и названиями. Рисует график y=x*x*x*Ln|x*x-4|. Если нажать мышкой на линию графика - отображаются координаты этой точки. Допускается использовать только вывод точки и получение координат. Возможность распечатки на матричном принтере. |
![]() ![]() |
Кина |
![]()
Сообщение
#2
|
Гость ![]() |
Спасибо
Можно пару вопросов? 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. Метрическую сетку и обозначения в нужном месте будут, когда я хоть увижу, как этот график выглядит... Да, график пытается отображаться почему-то только когда максимум меньше минимума... |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:21 |