![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Кина |
![]()
Сообщение
#1
|
Гость ![]() |
Очень прошу помочь :o
Программа выводит сетку координат и метрическую сетку (разными цветами). Оси должны быть с графическими отметками и названиями. Рисует график y=x*x*x*Ln|x*x-4|. Если нажать мышкой на линию графика - отображаются координаты этой точки. Допускается использовать только вывод точки и получение координат. Возможность распечатки на матричном принтере. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Кина
Вот процедура... Она будет работать для всех граф. режимов на всех принтерах, воспринимающих систему команд Epson... Код Uses Graph, Printer, Crt; Procedure CopyToPRN( X1, Y1, X2, Y2 : Integer; Bk1, Bk2 : Word; Inverse : Boolean; Mode : Byte ); Var ScanLine : Integer; N1, N2 : Byte; Function ConstructByte( X, Y : Integer ) : Byte; Const Bits : Array[ 0 .. 7 ] Of Byte = ( 128, 64, 32, 16, 8, 4, 2, 1 ); Var P : Word; CByte : Byte; Bit : Byte; YY : Integer; Begin CByte := 0; For Bit := 0 To 7 Do Begin YY := Y + Bit; P := GetPixel( X, YY ); If ( YY <= Y2 ) AND ( P <> Bk1 ) AND ( P <> Bk2 ) Then Inc( CByte, Bits[ Bit ] ); End; ConstructByte := CByte; End; Procedure DoLine; Var XPixel : Integer; PrintByte : Byte; Begin If Mode = 1 Then Write( Lst, #27'L' ) Else Write( Lst, #27'*', Chr( Mode ) ); Write( Lst, Chr( N1 ), Chr( N2 ) ); For XPixel := X1 To X2 Do Begin PrintByte := ConstructByte( XPixel, ScanLine ); If( Inverse ) Then PrintByte := NOT PrintByte; Write( Lst, Chr( PrintByte ) ); End; Write( Lst, #10 ); End; Label Quit; Begin Mode := Mode MOD 7; If Mode In [ 0, 5 ] Then Mode := 4; Write( Lst, #27'3'#24 ); N1 := Lo( Succ( X2 - X1 ) ); N2 := Hi( Succ( X2 - X1 ) ); ScanLine := Y1; While ScanLine < Y2 Do Begin If KeyPressed AND ( ReadKey = #27 ) Then Goto Quit; DoLine; Inc( ScanLine, 8 ); End; Quit: Write( Lst, #27#2 ); End; Begin { Инициализация графики } { Построение изображения } CopyToPrn(0, 0, GetMaxX, GetMaxY, Black, Black, False, 1); { Закрываем графику } End. Сообщение отредактировано: volvo - 19.01.2005 15:43 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:25 |