IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> График функции, мышь, печать
Кина
сообщение 10.01.2005 15:12
Сообщение #1


Гость






Очень прошу помочь :o
Программа выводит сетку координат и метрическую сетку (разными цветами). Оси должны быть с графическими отметками и названиями. Рисует график y=x*x*x*Ln|x*x-4|. Если нажать мышкой на линию графика - отображаются координаты этой точки. Допускается использовать только вывод точки и получение координат. Возможность распечатки на матричном принтере.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 19.01.2005 15:38
Сообщение #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
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"