- •Министерство общего и профессионального образования Российской Федерации Уральский государственный технический университет Основы программирования на языке Паскаль
- •Структура программы на паскале
- •Типы данных
- •Правила программирования арифметических операций
- •Арифметические функции
- •Операции отношения (сравнения)
- •Логические операции
- •Приоритет операций
- •Операторы турбо-паскаля ввод и вывод данных
- •Составной оператор
- •Условный оператор
- •Оператор выбора
- •Операторы повторений (циклов) счетный цикл
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Использование массивов
- •Процедуры и функции
- •Описание и использование функций
- •Описание и использование процедур
- •Взаимодействие подпрограмм
- •Стандартные модули
- •Использование модуля crt
- •Практический пример. Программа "меню"
- •Использование модуля graph
- •Установка цветов
- •Изображение точек и линий
- •Практический пример. Построение графика функции
- •Работа с текстом
- •Практический пример. Построение спирали
- •Программирование с использованием нестандандартных типов данных перечисляемый тип
- •Множества
- •Основы программирования на языке Паскаль
Практический пример. Построение графика функции
Мы уже достаточно подробно рассматривали алгоритм построения графика функции на экране ЭВМ. У нас имеется и текст соответствующей программы на языке 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
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 символов.
