![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
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. Метрическую сетку и обозначения в нужном месте будут, когда я хоть увижу, как этот график выглядит... Да, график пытается отображаться почему-то только когда максимум меньше минимума... |
![]() ![]() |
![]() |
Текстовая версия | 13.09.2025 3:14 |