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

Хід роботи

  1. Завантажити середовище Турбо Паскаль.

  2. Набрати текст програми по побудові ізоліній

program Izolines;

uses crt,graph,serv;

const Hiz: real=0.2;

Mi: integer=30000;

Nvr: integer=1;

var a: coef;

procedure HorComp(a: Coef; R,I: real; var Re,Im: real);

var R1: real;

n,s: integer;

begin

n:=round(a[-1]); Re:=a[n]; Im:=0;

For s:=n-1 downto 0 do

begin

R1:=Re*R-Im*I+a[s];

Im:=Re*I+Im*R;

Re:=R1;

end;

end;

Function Fxy(x,y: real):real;

var Re,Im: real;

begin

case Nvr of

1: Begin

HorComp(a,x,y,Re,Im);

Fxy:=sqrt(sqr(Re)+sqr(Im));

end;

2: Fxy:=sqr(sin(x))+sqr(cos(y));

3: Fxy:=1-cos(Pi*x)/2+sqr(y);

end;

end;

procedure Izo;

var Nr,s,z: integer;

Nrr: real;

Mnr: array[-1..800]of integer;

begin

for z:=-1 to H0 do

begin

Nrr:=Fxy(Xmin-Dx,Ymin+Z*Dy)/Hiz;

if abs(Nrr)>Mi then mNr[z]:=Mi

else mnr[z]:=trunc(Nrr);

end;

for s :=0 to L0 do

begin

x:=xmin+s*dx;

for z:=-1 to H0 do

begin

nrr:=fxy(x,ymin + z *dy)/hiz;

If abs(nrr)>Mi then Nr:=Mi

else Nr:=trunc(Nrr);

If z>-1 then

begin

if (Nr<>Mnr[z-1])or(Nr<>Mnr[z]) then

if abs(Nrr)<Mi then

PutPixel(Xu+s,Yu+H0-z,{round(abs(nrr))mod 16} 15);

if abs(Nrr)<1 then

if (Nrr*Mnr[z-1]<0)or(Nrr*Mnr[z]<0) then

PutPixel(xu+s,yu+h0-z,round(abs(Nrr)mod 16);

end;

Mnr[z]:=Nr;

end;

end;

end;

Function Radius(A: coef): real;

var s,n: integer;

b: real;

begin

n:=round(A[-1]);

b:=abs(a[0]);

for s:=1 to n-1 do

if abs(a[s])>b then b:=abs(a[s]);

radius:=1+b/(abs(a[n]));

end;

procedure Diap;

begin

repeat

PutA; Ou('0-exit,1-Xmin,2-xmax,3-Ymin,4-Ymax');

if Nvr=1 then

begin

x:=Radius(a);

str(x:1:3,t10);

Ts:='Radius='+t10+' ';

end

else Ts:=' ';

str(Xmin:1:3,T10); Ts:=Ts+',Xmin='+T10;

str(Xmax:1:3,T10); Ts:=Ts+', Xmax='+T10;

str(Ymin:1:3,T10); Ts:=Ts+', Ymin='+T10;

str(Ymax:1:3,T10); Ts:=Ts+', Ymax='+T10;

info; j:=readkey;

case j of

'1': Our('Xmin',Xmin);

'2': Our('Xmax',Xmax);

'3': Our('Ymin',Ymin);

'4': Our('Ymax',Ymax);

end;

until j='0';

end;

Procedure InpPol(Id: string; var A: Coef);

Var s, n: Integer;

Begin

Oui('n-step pol',n);

A[-1] := n;

For s := 0 to n do

Begin

Str(s, T10);

Our(Id+'['+T10+']',A[s])

end

End;

begin

Xmin:=-2; Xmax:=2; Ymin:=-2; Ymax:=2; c:=15;

A[-1]:=5; A[0]:=1; a[5]:=1;

for s:=1 to 4 do A[s]:=0;

repeat

PutA; Ou('Esc-exit,1-Nvr,2-InpPol,3-L,4-H,5-Diap,6-Hiz,7-Clear,8-SC,9-Izo');

Str(Nvr,t10); Ts:='Nvr='+t10;

Str(L,t10); Ts:=Ts+', L='+t10;

Str(H,t10); Ts:=Ts+', H='+t10;

Str(Hiz:1:2,t10); Ts:=Ts+', Hiz='+t10;

Info; J:=readkey;

case J of

'1': oui('Nvr',nvr);

'2': InpPol('A',A);

'3': oui('L', L);

'4': oui('H',h);

'5': Diap;

'6': Our('Hiz',Hiz);

'7': Cleardevice;

'8': begin

X0Y0(true);

systcoor;

end;

'9': Izo;

end;

until J=#27;

end.

  1. Перенести в протокол результати побудови 3-х варіантів (Nvr)

Звіт повинен містити назву роботи, мету, короткі теоретичні відомості, тексти виконуваної програми п.2, результати побудови ізоліній в залежності від значення параметра Nvr.

Контрольні запитання

1. Пояснити механізм роботи процедури HorComp.

2. Пояснити механізм роботи процедури InpPol.

3. Пояснити механізм роботи функції Radius.

4. Пояснити механізм роботи процедури Izo.

Лабораторна робота №6

Побудова рельєфа.

Мета роботи : Дослідити побудову зображення рельєфа функції, використовуючи графічний режим в Турбо Паскалі.

Теоретичні відомості

Уявлення про особливості рельєфу поверхні функції двох змінних Z=f(X,Y) можна одержати, сформувавши на екрані комп‘ютера зображення системи перетинів цієї поверхні площинами, перпендикулярними осям x та (чи) y. Для більшої зручності будемо розглядати варіант, коли користувачеві програми, що формує подібне зображення, надається можливість за своїм бажанням змінювати орієнтацію досліджуваної поверхні відносно спостерігача.

Розрахункова схема поворотів зображення об’єкта. U, v, w – кути повороту.

Cистема співвідношень

Екранні координати

Хід роботи

  1. Завантажити середовище Турбо Паскаль.

  2. Набрати текст програми по побудові рельєфа

Program Relief;

uses Crt,Graph,Serv;

const

Nvr:integer=1;

Nx:integer=20;

Ny:integer=20;

U:integer=20;

V:integer=30;

W:integer=0;

Rx:integer=100;

Ry:integer=120;

Rz:integer=100;

D:integer=500;

Nmax=40;

var Xs,Ys,Zs,Kx,Ky,Kz,Zmin,Zmax:real;

Mo:array[0..Nmax,0..Nmax] of real;

Mxe,Mye:array[0..Nmax,0..Nmax] of integer;

E:Coef;

function Fxy (x,y:real):real;

begin

case Nvr of

1:Fxy:=0.5*(1-cos(Pi*x)+2*sqr(y));

2:Fxy:=sin(x)*sqr(cos(y));

3:Fxy:=exp(y*ln(abs(x)+0.2));

end

end;

procedure FormMo;

var f,x,y,Dx,Dy:real;

z,s:integer;

begin

Dx:=(Xmax-Xmin)/Nx; Dy:=(Ymax-Ymin)/Ny;

Zmin:=Fxy(Xmin,Ymax); Zmax:=Zmin;

for z:=0 to Ny do

begin

y:=Ymin+z*Dy;

for s:=0 to Nx do

begin

x:=Xmin+s*Dx;

f:=Fxy(x,y); Mo[s,z]:=f;

if f<Zmin then Zmin:=f;

if f>Zmax then Zmax:=f;

end;

end;

Xs:=(Xmin+Xmax)/2; Kx:=(Xmax-Xmin)/Rx;

Ys:=(Ymin+Ymax)/2; Ky:=(Ymax-Ymin)/Ry;

Zs:=(Zmin+Zmax)/2; Kz:=(Zmax-Zmin)/Rz;

end;

procedure Coefs;

var x,sinu,cosu,sinv,cosv,sinw,cosw:real;

begin

x:=U*Pi/180; sinu:=sin(x); cosu:=cos(x);

x:=V*Pi/180; sinv:=sin(x); cosv:=cos(x);

x:=W*Pi/180; sinw:=sin(x); cosw:=cos(x);

E[1]:=cosu*cosv;

E[2]:=-sinu*cosv;

E[3]:=sinv;

E[4]:=sinu*cosw+cosu*sinv*sinw;

E[5]:=cosu*cosw-sinu*sinv*sinw;

E[6]:=-cosv*sinw;

E[7]:=sinu*sinw-cosu*sinv*cosw;

E[8]:=cosu*sinw+sinu*sinv*cosw;

E[9]:=cosv*cosw;

end;

procedure FormMe;

var Kp,f,x,y,x3,y3,z3,Dx,Dy:real;

s,z:integer;

begin

Dx:=(Xmax-Xmin)/Nx; Dy:=(Ymax-Ymin)/Ny;

for s:=0 to Nx do

begin

x:=(Xmin+s*Dx-Xs)/Kx;

for z:=0 to Ny do

begin

y:=(Ymin+z*Dy-Ys)/Ky;

f:=(Mo[s,z]-Zs)/Kz;

x3:=E[1]*x+E[2]*y+E[3]*f;

y3:=E[4]*x+E[5]*y+E[6]*f;

z3:=E[7]*x+E[8]*y+E[9]*f;

Kp:=D/(D-x3);

Mxe[s,z]:=x0+round(y3*Kp);

Mye[s,z]:=y0-round(z3*Kp);

end;

end;

end;

procedure FormRel;

var s,z:integer;

begin

SetColor(c);

for s:=0 to Nx do

begin

MoveTo(Mxe[s,0],Mye[s,0]);

for z:=1 to Ny do

LineTo(Mxe[s,z],Mye[s,z]);

end;

for z:=0 to Ny do

begin

MoveTo(Mxe[0,z],Mye[0,z]);

for s:=1 to Nx do

LineTo(Mxe[s,z],Mye[s,z])

end;

SetColor(15)

end;

procedure Geom;

var J1:char;

begin

repeat

PutA;Ou('0-exit, 1-Rx, 2-Ry, 3-Rz, 4-D, 5-X0, 6-Y0');

Str(Rx,T10); Ts:='Rx='+T10;

Str(Ry,T10); Ts:=Ts+', Ry='+T10;

Str(Rz,T10); Ts:=Ts+', Rz='+T10;

Str(D,T10); Ts:=Ts+', D='+T10;

Str(X0,T10); Ts:=Ts+', X0='+T10;

Str(Y0,T10); Ts:=Ts+', Y0='+T10;

Str(GetMaxX,T10); Ts:=Ts+'(X0='+T10+')';

Str(GetMaxY,T10); Ts:=Ts+'(Y0='+T10+')';

Info; J1:=ReadKey;

case J1 of

'1':Oui('Rx',Rx);

'2':Oui('Ry',Ry);

'3':Oui('Rz',Rz);

'4':Oui('D',D);

'5':Oui('X0',X0);

'6':Oui('Y0',Y0);

end

until J1='0'

end;

procedure Diap;

var J1:char;

begin

repeat

PutA;Ou('0-exit, 1-Xmin, 2-Xmax, 3-Ymin, 4-Ymax, 5-Nx, 6-Ny');

Str(Xmin:1:2,T10); Ts:='Xmin='+T10;

Str(Xmax:1:2,T10); Ts:=Ts+', Xmax='+T10;

Str(Ymin:1:2,T10); Ts:=Ts+', Ymin='+T10;

Str(Ymax:1:2,T10); Ts:=Ts+', Ymax='+T10;

Str(Nx,T10); Ts:=Ts+', Nx='+T10;

Str(Ny,T10); Ts:=Ts+', Ny='+T10;

Info; J1:=ReadKey;

case J1 of

'1':Our('Xmin',Xmin);

'2':Our('Xmax',Xmax);

'3':Our('Ymin',Ymin);

'4':Our('Ymax',Ymax);

'3':Oui('Nx',Nx);

'4':Oui('Ny',Ny);

end

until J1='0';

FormMo

end;

begin

Xmin:=-2; Xmax:=2; Ymin:=-1.5; Ymax:=1.5; X0:=320; Y0:=200;

repeat

PutA;

Ou('Esc-exit,1-Nvr,2-Geom,3-Diap,4-U,5-V,6-W,7-C,8-Rel,9-Clear');

Str(Nvr,T10); Ts:='Nvr='+T10;

Str(U,T10); Ts:=Ts+', U='+T10;

Str(V,T10); Ts:=Ts+', V='+T10;

Str(W,T10); Ts:=Ts+', W='+T10;

Str(C,T10); Ts:=Ts+', C='+T10;

Info; J:=ReadKey;

case J of

'1':Oui('Nvr',Nvr);

'2':Geom;

'3':Diap;

'4':Oui('U',U);

'5':Oui('V',V);

'6':Oui('W',W);

'7':Oui('C',C);

'8':begin

FormMo; Coefs; FormMe; FormRel

end;

'9': ClearDevice

end

until J=#27;

CloseGraph

end.

  1. Перенести в протокол зображення рельєфа.

Звіт повинен містити назву роботи, мету, короткі теоретичні відомості, тексти виконуваної програми п.2, результати побудови рельєфу.