Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по информатике.DOC
Скачиваний:
29
Добавлен:
02.05.2014
Размер:
1.68 Mб
Скачать

Interface

Var right, left, down, up: integer; k_xy, kx, ky, x_max, x_min, y_max, y_min: double; { описание глобальных переменных }

procedure mash( c, c1, pr:word); { c - номер цвета линий}

procedure oci; { c1 - номер цвета фона }

procedure Lineto_G(x1, y1:double); { аналог графической процедуры Lineto}

113

Implementation

Uses Graph;

PROCEDURE mash;

Var XX, yy: word; xg_m, yg_m:integer;

Begin xg_M:=GetMaxX; yg_M:=GetMaxY;

{----- ввести операторы контроля заданных значений глобальных переменных ----}

{ X_min < X_max; 0 <left< right <xg_M; Y_min < Y_max; 0 <down <up <yg_M }

GetAspectRatio(xx, yy); k_xy:=xx/yy;

ky:=(down-up)/(Y_max-Y_min); kx:=(right-left)/(X_Max-X_min);

case pr of { pr - признак построения графиков }

1: begin kx:=ky/k_xy; {pr=1 - без искажения формы, меняя Right}

right:= left + Round(kx*(X_max- X_min));

if right>GetMaxX then begin right:=GetMaxX;

kx:=(right-left)/(X_Max-X_min); ky:=kx*k_xy;

up:=down - Round(ky*(Y_max - Y_min)); end; end;

2: begin ky:=kx*k_xy; {pr=2 - без искажения формы, меняя Up}

up:= down - Round(ky*(Y_max- Y_min));

if up<0 then begin up:=0;

ky:=(down-up)/(Y_max-Y_min); kx:=ky/k_xy;

right:=left+Round(kx*(X_max-X_min)); end; end;

end; {pr=0 - в заданной области}

Setcolor(c); SetFillStyle(1,c1); bar(left, up, right, down);

End;

PROCEDURE oci; { оси координат строятся только в пределах заданной области}

Var xg0, yg0:integer;

Begin XG0:=left - round( kx*X_min);

YG0:=down + round( ky*Y_min);

if X_MIN*X_MAX <=0 then line(XG0, up, XG0, down);

if Y_MIN*Y_MAX <=0 then line(LEFT, YG0, RIGHT, YG0);

End;

PROCEDURE Lineto_G; {рисование линии из текущей позиции курсора}

Var xg1, yg1:integer; {т. 1 - конец линии}

Begin

xg1:= left + Round(kx*(x1- X_min));

yg1:= down - Round(ky*(y1- Y_min)); lineto(xg1, yg1);

End;

BEGIN

END.

Приведенное описание размещения графика в прямоугольной области экрана позволяет: выводить кривые по точкам с отрицательными значениями координат, масштабировать график (сжимать/растягивать), изменять цвет фона внутри прямоугольника, задаваемого процедурой Bar(left, up, right, down).

Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты y[i] и найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Наибольшим значениям присвоить Y_MAX и X_MAX, а наименьшим - Y_MIN и X_MIN. Затем определить область для построения графика и координаты точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.

114

Практическое задание N 2. 2

1. Построить графики функций Y1(x) и Y2(x) в двух областях экрана.

2. Построить графики Y1(x) и Y2(x) в одной области экрана.

Примечание: использовать библиотеку GR_F для построения графиков с автоматическим масштабированием, сохраняющим естественную форму кривой.

Необходимо также вывести надпись вида функции и диапазона изменения "х". Вид функций Y1(x) и Y2(x) приведен в таблице:

N Функция Y1(x) Диапазон изменения "х" Функция Y2(x)

1 Sin(x) -5 ...5 Sin(x2)

2 Sin(x) + x -15 ...15 Sin(x) + x2/10

3 Cos(x)*x -15 ...15 Sin(x)*x

4 Cos(x2-4*x-1) -1 ...10 Sin(x2-4*x-1)

-10 ...10

5 (x2-1)/(x4+1) -2 ...2 -x5+2*x3-1

6 x*(x-3)*(x+1) -3 ...3 x*(x-3)*(x-1)

7 x2*(x-2)*(x+1) -3 ...3 x2*(x+2)*(x+1)

8 Exp(x) + Exp(-x) -1 ...1 Exp(x)+Exp(-2*x)

-3 ...3

9 x2*Sin(1/x) 0.1 ...3 x3*Sin(1/x2)

0.01 ...0.1

10 x*Sin2(1/x) 0.1 ...5 (x+1)*Sin2(1/x)

0.01 ...0.1

11 Sqrt(x2+2)*Sin(x) -10 ...10 (x+1)*Sin(x)

-1 ...1

Практическое задание N 2. 3

1. Построить графики функций Y(x) и Yi(x) в одной области экрана с автоматическим масштабированием по осям координат.

Примечание: График функции Yi(x) строится для трех и четырех членов разложения функции Y(х) в бесконечный ряд Тейлора. Например, для функции Y(x)=exp(x) нужно построить графики Y(x) = exp(x), Y3(x) = 1+x+x2/2!, Y4(x) = 1+x+x2/2+x3/3!. Показатель степени функции Y(x) = (1+x)m "m" - вещественное число. Необходимо вывести надпись вида функции и диапазона изменения "х". Вид функций Y(x) и Yi(x) приведен в таблице:

N Функция Y(x) Разложение в ряд Тейлора Yi(x) Интервал "x"

1 Exp(x) 1 + x + x2/2! + x3/3! + .. -3 . . . 2

2 Sin(x) x - x3/3! + x5/5! - x7/7! + .. -3 . . . 3

3 Cos(x) 1 - x2/2! + x4/4! - x6/6! + .. -3 . . . 3

4 (1+x)m 1+m*x+m*(m-1)*x2/2!+m*(m-1)*(m-2)*x3/3!+.. -0, 9 . . 0, 9

5 Ln(1+x) x - x2/2 + x3/3 - x4/4 + .. -0, 95 . . 3

6 Arctan(x) x - x3/3 + x5/5 - x7/7 + .. -1 . . . 1

115

Построение графика функции Y = FY(t), X = FX(t).

Y

r

*

fi

X

Движение одной точки вокруг другой (полюса) удобно описывать в виде зависимости расстояния "r" между точками от угла "fi" между неподвижной линией (горизонталью) и линией, соединяющей точку с полюсом: r = F(fi). Такая система координат называется полярной. Проекции точки на оси декартовой системы координат находятся по формулам: x= r*cos(fi), y= r*sin(fi).

Таким образом получаем неявное задание функции Y от X. Здесь параметром является угол fi. Сформулируем задачу в общем виде.

Пусть заданы непрерывные функции FX(t) и FY(t) в диапазоне изменения параметра t = [A. . B]. Требуется построить по N точкам в прямоугольной области экрана left, up, right, down график функции, заданной в параметрической форме Y = FY(t), X = FX(t).

Алгоритм построения графика функции Y = FY(t), X = FX(t).

1. Определяем массивы значений параметра и функций: t[i], X[i]=FX(t[i]), Y[i]=FY(t[i]), где i= 1. . . N. При равномерном разбиении интервала [A. . B] массивы можно задавать операторами:

Dt:= (B-A)/(N-1); { шаг разбиения по "х" }

for i:= 1 to N do begin

t[i]:=A+round(Dt*(i-1)); X[i]:=FX(t[i]); Y[i]:=FY(t[i]) end;

2. Согласно п. 2 алгоритма построения графика функции Y = F(x) определяем наибольшее (Y_MAX) и наименьшее (Y_MIN) значения функции Y = FY(t) в заданном интервале изменения параметра t и аналогично X_MAX, X_MIN для функции X=FX(t).

Далее следуем п. п. 3. . 5 алгоритма построения графика функции Y = F(x)

Параметрическая форма задания функций позволяет значительно разнообразить виды графических кривых.

Практическое задание N 2. 4

1. Построить графики функции, заданной в параметрической форме Y = FY(t), X = FX(t), в четырех областях экрана для различных значений коэффициента "A".

Примечание: Необходимо вывести надпись вида функции, значения коэффициента "A" и диапазон изменения параметра "t". Вид функции приведен в таблице:

N X(t) Y(t) интервал по "t" коэффициент "А"

1 A*t2 t*(3-t2) -3 ... 3 1 2 3 5

2 2*t-t2 A*t-t3 -2 ... 2 -1 0 1 3

3 A*t4 t2-A*t5 -1 ... 1,5 1 2 3 4

4 A*t2 t3+t4 -2 ... 1,5 1 2 3 4

5 Sin(A*t) Sin(3*t) -2 ... 2 -1 2 4 5

6 Sin(t-A) Sin(t) 0 ... 4 -1 1 2 3

7 A*Cos3(t) Sin3(t) -2 ... 2 -1 1 2 3

8 Cos(t)+A*Cos(t) Sin(t)-A*Sin(t) 0 ... 4 -2 -1 1 4

9 Cos(t)+t*Sin(t) Sin(t)-A*t*Cos(t) 0 ... 4 -1 0 1 2

116

Практическое задание N 2. 5

1. Построить графики функции, заданной в полярных координатах r= F(fi) переводом в Декартовые X= r*cos(fi), Y = r*sin(fi) для различных значений коэффициентов "A" и "В", меняя экран. Здесь r - радиус, fi - угол в радианах.

Примечание: Необходимо вывести надпись вида функции, значения коэффициентов "A" и "В", диапазон изменения "fi". Вид функции приведен в таблице:

N Кривая Функция r(fi) Диапазон fi A B