Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ОТ-1.doc
Скачиваний:
0
Добавлен:
25.12.2019
Размер:
1.17 Mб
Скачать

OutText (’Текст для виводу’);

та

OutTextXy (200,100,’Текст для виводу’);

Перша команда виводить інформацію відносно поточної позиції вказівника екрана, а друга – відносно заданої позиції вказівника, в наведеному прикладі – це координати (х=200, у=100).

Недоліком представлених команд виводу є те, що вони дозволяють виводити інформацію тільки рядкового типу string, проте часто необхідно виводити на екран числові значення змінних. Для виходу із ситуації числові дані попередньо перетворюються у рядкові за допомогою процедури

Str (<число>,<рядковий еквівалент>);

наприклад, числове значення змінної Min дійсного типу real передається змінній Smin рядкового типу string, а потім виводиться

Min:=10.3;

Str (Min,SMin);

OutText (Smin);

Текст може виводитися різними шрифтами та заданою величиною (розміром), які вказуються у команді

SetTextStyle (<шрифт, орієнтація тексту, розмір:word>);

Кожен шрифт зберігається в окремому файлі з розширенням .CHR найчастіше у підкаталозі BGI, що входить до каталогу програмних засобів. Параметри команди задаються словами чи еквівалентними цифрами. Позначення стандартних шрифтів мови "Паскаль" представлено в табл.1.3.

Табл.1.3.

Тип шрифту

Примітка

DefaultFont (або цифра 0)

Растровий шрифт, матриця 8х8

TriplexFont (або цифра 1)

Штриховий напівжирний шрифт

SmallFont (або цифра 2)

Штриховий тонкий шрифт

SansSerifFont (або цифра 3)

Штриховий рублений шрифт

GothicFont (або цифра 5)

Штриховий готичний шрифт

Текст може виводитися горизонтально – зліва направо чи вертикально – знизу догори. Орієнтація задається командами згідно табл. 1.4.

Табл.1.4.

Орієнтація тексту

Примітка

HorizDir (або цифра 0)

Горизонтально

VertDir (або цифра 1)

Вертикально

Розмір шрифту встановлюється цифрами в межах від нуля до 10, причому нульове значення відповідає стандартному розміру шрифту.

За згодою встановлено растровий шрифт стандартного розміру, направлений горизонтально, тобто

SetTextStyle (0,0,0);

Вирівнювання тексту на екрані відносно позиції вказівника СР (точки виводу) здійснюється процедурою

SetTextJustify (<по горизонталі, по вертикалі:word>);

Вирівнювання задається командами у вигляді слів чи еквівалентних цифр відповідно до табл.1.5.

Табл.1.5.

Вирівнювання

Примітка

По горизонталі

LeftText (або цифра 0)

Вказівник ліворуч тексту

CenterText (або цифра 1)

Вказівник по центру тексту

RightText (або цифра 2)

Вказівник праворуч тексту

По вертикалі

BottomText (або цифра 0)

Вказівник вище тексту

CenterText (або цифра 1)

Вказівник по центру тексту

TopText (або цифра 2)

Вказівник нище тексту

За згодою встановлено вирівнювання по центру, тобто

SetTextJustify (1,1);

1.11. Для ефективної роботи програми з будь-яким драйвером та роздільністю екрана необхідно обчислювати координати точок на екрані відносно поточної роздільності. Для цього використовуються функції

GetMaxX та GetMaxY

цілочисленого типу word, які повертають роздільність екрана по координаті X та Y відповідно.

1.12. На екран можна виводити точку заданого кольору в задану позицію, що інколи використовується для побудови графіка. Наприклад, вивід зеленої точки в позицію з координатами (х=150, у=50) виконується командою

PutPixel (150,50,green);

1.13. Очистка екрана у графічному режимі здійснюється командою

ClearDevice;

1.14. При побудові графіків потрібно враховувати протилежний до математичного напрямок осі Y на екрані, рис. 1.1. Позиція точки по осі Y визначається різницею між максимальним розмахом координатної сітки графіка та обчисленою координатою точки Y0. Наприклад, якщо координатна сітка займає весь екран по осі Y, то координата дорівнює

Y:= GetMaxY – Y0;

Обчислення координат точок для виводу графіків на основі реальних координат Xd та Yd здійснюється з урахуванням їх цілочисленого типу й масштабів по осях X та Y

X0:= Round(Xd*Mx);

Y0:= Round(Yd*My);

Масштаби визначаються максимальним реальним значенням функції Ymax й аргументу Xmax, а також максимальним розмахом координатної сітки графіка по осях. Наприклад, якщо координатна сітка займає весь екран, то масштаби дорівнюють

Mx:= GetMaxX/Xmax;

My:= GetMaxY/Ymax;

1.15. Приклад 1. Розрахувати значення та побудувати графік функції при зміні аргументу t від нуля до 2 з кроком 0,01 для наступних значень параметрів: А=5; =-1,5; =30; =1,8. Програма складається з двох підпрограм-процедур: Function_W та Graphic. Підпрограма Function_W обчислює значення заданої функції й визначає її максимальне та мінімальне значення, які потім використовуються для визначення масштабу по осі Y при побудові графіка функції. Обчислені значення функції та аргументу виводяться на екран та записуються до файлу. Друга підпрограма Graphic будує на екрані координатну сітку та графік на основі значень функції записаних у файл. На екран виводяться також екстремальні значення функції та аргументу для чого використовується підпрограма-функція RealToStr, що перетворює дані дійсного типу в рядкові.

Program Graphica;

Uses Graph, Crt;

Const

Tend=2; t:real=0;

Var

W, Wmax, Wmin :real;

f :text;

grDriver, grMode, errCode :integer;

Procedure Function_W;

Const

A=5;

alpha=-1.5;

omega=30;

ksi=1.8;

dt=0.01;

Begin

TextBackGround (lightgray);

ClrScr;

TextColor (red);

Writeln ('РОЗРАХУНОК ЗНАЧЕНЬ ФУНКЦІЇ');

Writeln;

TextColor (black);

Writeln (' ':2,'Аргумент',' ':6,'Функція');

Window (1,4,80,25);

TextColor (white);

Assign (f,'F:\TP\Data.Out');

Rewrite (f);

Wmax:=-10E10;

Wmin:=10E10;

Repeat

W:=A*Exp(alpha*t)*Sin(omega*t+ksi);

Writeln (' ':3, t:5:2,' ':7,W:7:2);

Writeln (f, t:5:2,W:7:2);

If W>Wmax then Wmax:=W;

If W<Wmin then Wmin:=W;

t:=t+dt;

Delay (5);

Until t>Tend+dt;

Readln;

Window (1,1,80,25);

Close (f);

End;

Procedure Graphic (x1,y1,x2,y2:word);

Const

N=4;

M=4;

Var

X, Yw, X0, Yw0, J :integer;

Mt, Mw, Wmod :real;

Function RealToStr (R :real) :string;

Var

S :string;

Begin

Str (R:7:2, S);

RealToStr:= S;

End;

Begin

SetBkColor(red);

SetFillStyle (1, lightgray);

Bar (x1, y1, x2, y2);

For J:=0 to N do Line (((x2-x1) div N+1)*J+x1, y1,

((x2-x1) div N+1)*J+x1, y2);

For J:=0 to M do Line (x1, ((y2-y1) div M+1)*J+y1,

x2, ((y2-y1) div M+1)*J+y1);

SetTextJustify (CenterText, CenterText);

SetTextStyle (SmallFont, HorizDir, 5);

OutTextXY (x1-5, ((y2-y1) div 2)+y1, '0');

OutTextXY (x2+7, ((y2-y1) div 2)+y1, 'T');

OutTextXY (x1-5, y1, 'W');

SetColor (yellow);

SetLineStyle (0,0,3);

If (Wmax>=0) and (Wmin<0) then Wmod:=Wmax+Abs(Wmin);

If (Wmax>=0) and (Wmin>0) then Wmod:=Wmax;

If (Wmax<0) and (Wmin<=0) then Wmod:=Abs(Wmin);

Mt:=(x2-x1)/Tend;

Mw:=(y2-y1)/Wmod;

Assign (f, 'F:\TP\Data.out');

Reset (f);

Readln (f, t,W);

X0:=x1+Round (t*Mt);

Yw0:=y2-((y2-y1) div 2)-Round (W*Mw);

While Not Eof (f) do

begin

Readln (f, t,W);

X:=x1+Round (t*Mt);

Yw:=Y2-((Y2-Y1) div 2)-Round (W*Mw);

Line (X0,Yw0,X,Yw);

X0:=X;

Yw0:=Yw;

end;

Close (f);

SetColor (red);

OutTextXY (x2-210, y2-80, 'Tend='+RealToStr(t));

SetColor (green);

OutTextXY (x2-210, y2-60, 'Wmax='+RealToStr (Wmax));

SetColor (magenta);

OutTextXY (x2-210, y2-40, 'Wmin='+RealToStr (Wmin));

Repeat until KeyPressed;

end;

BEGIN

Function_W;

grDriver:= Detect;

InitGraph (grDriver, grMode,'F:\TP\BGI');

errCode:= GraphResult;

if errCode <> grOk then

begin

Writeln (GraphErrorMsg(ErrCode));

Halt;

end;

Graphic (30, 30, GetMaxX-30, GetMaxY-30);

CloseGraph;

END.