Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VT_PAS1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
202.24 Кб
Скачать

Практический пример. Построение графика функции

Мы уже достаточно подробно рассматривали алгоритм построения графика функции на экране ЭВМ. У нас имеется и текст соответствующей программы на языке Quick Basic. Далее приводится почти дословный перевод этой программы на Турбо-Паскаль. Единственное отличие - отсчет вертикальной координаты от верхнего левого угла экрана. Поэтому для того, чтобы на экране получился график SIN(X), строится график функции Y=-SIN(X),

Program No15;

uses graph;

Const

Tx=200.;Ty=200.;Sx=200./(2*Pi);Sy=100.;

dx=1/Sx; Delta=0;

Type

massiv=array [1..3,1..3] of real;

Var

gd, gm,Xd, Yd : integer;

x, y, Td : real;

TT, R, S, T, Tr: massiv;

{***********************************************************}

Procedure Tran2(tx,ty: real; var t:massiv);

Var i,j: integer;

Begin

For i:=1 to 3 DO

begin For j:=1 to 3 DO t[i,j]:=0; end;

For i:=1 to 3 DO t[i,i]:=1;

t[1,3]:=tx; t[2,3]:=ty;

End;

{-----------------------------------------------------------}

Procedure Rot2(Delta: real; var R: massiv);

Var i,j: integer;

Begin

For i:=1 to 2 DO

begin

R[i,3]:=0; R[3,i]:=0 ;

end;

R[3,3]:=1;

R[1,1]:=Cos(Delta); R[2,2]:=Cos(Delta);

R[1,2]:=Sin(Delta); R[2,1]:=-Sin(Delta);

End;

{-----------------------------------------------------------}

Procedure Scale2(Sx,Sy: real; var S:massiv);

Var i,j:integer;

Begin

For i:=1 to 3 DO

For j:=1 to 3 DO S[i,j]:=0;

IF Sx=0 Then S[1,1]:=1 Else S[1,1]:=Sx;

IF Sy=0 Then S[2,2]:=1 Else S[2,2]:=Sy;

S[3,3]:=1

End;

{-----------------------------------------------------------}

Procedure Mult2(m1, m2:massiv ; var M:massiv);

Var i,j, k : integer; a: real;

Begin

For i:=1 to 3 DO

begin

For j:=1 to 3 DO

begin

a:=0;

For k:=1 to 3 DO a:=a+m1[i,k]*m2[k,j];

M[i,j]:=a;

end;

end;

End;

{***********************************************************}

BEGIN

gd:=detect;

initgraph(gd,gm,'');

x:=0;

Tran2(Tx,Ty,T);

Rot2(Delta,R);

Scale2(Sx,Sy,S);

Mult2(T,R,Tr);

Mult2(Tr,S,TT);

Repeat

y:=-Sin(x);

Xd:=round(TT[1,1]*x+TT[1,2]*y+TT[1,3]);

Yd:=round(TT[2,1]*x+TT[2,2]*y+TT[2,3]);

x:=x+dx;

putpixel(Xd,Yd,15);

Until x>(2*pi);

readln;

closegraph;

END.

Работа с текстом

Мы уже рассмотрели один пример, в котором для вывода сообщения на экран использована стандартная процедура Write. Однако Турбо-Паскаль располагает гораздо более эффективными средствами манипулирования текстом: можно использовать различные шрифты, менять размеры символов, точку их вывода и т.п.

Особенностью Турбо-Паскаля, установленного на наших компьютерах является использование нестандарного способа вывода на экран русских букв. Именно поэтому при необходимости вывода русских букв необходимо сначала дать специальные команды:

n1:=InstallUserFont('Lcom');

SetTextStyle(n1,0,0);

Здесь n1 - вспомогательная переменная целого типа (конечно, ее имя может быть любым). Теперь, когда возникнет необходимость напечатать какой-либо текст в программу нужно включить следующую процедуру:

OutTextXY(x,y,Text);

Она выводит строковую величину Text в точке с координатами x, y. Координаты задают положение верхнего левого угла выводимого текста в пикселях.

Для изменения размеров шрифта следует использовать процедуру

SetUserCharSize(Mx,Dx,My,Dy)

где Mx, Dx, My, Dy - целые величины, задающие коэффициенты пропорциональности для изменения размеров по горизонтали и вертикали. Коэффициенты задаются в виде обыкновенных дробей. При этом Mx, My - их числители, а Dx, Dy - знаменатели. Например, если Вы хотите, чтобы новый шрифт был в полтора раза уже и в два раза ниже стандартного, то нужно подать следующую команду:

SetUserCharSize(2 ,3 ,1 ,2 );

1

2/3

1 My=1, Dy=2

Mx=2, Dx=3

1/2

Процедура OutTextXY позволет выводить на экран только текстовые константы и переменные. Если же необходимо выводить численные данные, то их сначала необходимо преобразовать к строковому представлению. Это осуществляется процедурой

STR(X:w:d, St);

где X - число, преобразуемое в строку St длиной w. После десятичной точки в строке St будет отображено d знаков. Например:

Var a: string;

...

STR(pi:6:2,a);

OutTextXY(20,100,a);

В результате работы этого фрагмента в точке экрана с координатами (20,100) будет напечатано

3.14

при этом перед числом будет два пробела, т.к. длина строки а - 6 символов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]