Берілген деңгей үшбұрыш торабында квадрат түйін нүктелер торабының деңгей биіктігін есептеу алгоритмімен программасы

Студенттермен оқушыларды қолданбалы есептерді бағдарламалауға үйрету мақсатында төмендегі есептің бағдарламасын және нәтижесін бердік. Бұл есеп геодезия және жер жұмыстарын жоспарлау есептерінде кездеседі.

Есептің қойылуы: Жазықтықта деңгей үшбұрыштар торабы координаталарымен берілген, мүнда i — үшбұрыш нөмері, j – төбелерінің нөмері және әрбір координаталы түйін нүктесі торап үшбұрыш торының біреуіне тиісті болған квадрат торабы берілген. Осы квадрат торабының әрбір түйін нүктесіне сәйкесдеңгей биіктігі zs[i,j] – табылсын, мүнда i – жол индексі j — баған индексі.

Есепті шешу алгоритімі:

1 – қадам. Үшбұрыш саны ushs, торап үшбұрыштарының төбелерінің координаталары — , квадрат торабының xos, yos – бастапқы нүкте координатасын, квадрат торабының jols, bags – жол және баған санын setk – квадрат торабының қадамын енгізу.

2 – қадам. Кезектегі нүкте тисті болған i –ші үшбұрышты табу.

3 – қадам. Табылған үшбұрышта xt=xs[i,j], yt=ys[i,j] және x1=x[i,1], y1=y[i,1], z1=z[i,1], x2=x[i,2], y2=y[i,2], z2=z[i,2],x3=x[i,3], y3=y[i,3], z3=z[i,3], деп алып

zs[i,j]:=

формуламен түйін нүктесінің zs[i,j] деңгейінің мәнін табамыз. Мұнда

Егер табылған деңгей мәні соңғы түйін нүкте деңгей мәні болса онда есптеу тоқтатылады, әйтпесе басқару 2-қадамға беріледі.

program kvtor; uses crt;

label 1,2,3;

var xt,yt,x1,y1,x2,y2,x3,y3:real;

zt1,zt2,zt3,z1,z2,z3:real;

xs,ys,zs:array [1..20,1..20] of real;

x,y,z:array [1..30,1..3] of real;

xos,yos,setk:real; ushs,jols,bags,i,j,k:integer;

a,b,c,d,zt:real;

begin clrscr;

write(‘ushs=’); readln(ushs);

for i:=1 to ushs do

for j:=1 to 3 do

begin

write( ‘x[‘,i,j,’]’,’y[‘,i,j,’]’,’z[‘,i,j,’]=’);

readln(x[i,j],y[i,j],z[i,j]);

end;

write(‘xos,yos=’); readln(xos,yos);

write(‘jols,bags=’); readln(jols,bags);

write(‘setk=’); readln(setk);

for i:=1 to jols do

for j:=1 to bags do

begin

xs[i,j]:=xos+setk*(j-1);

ys[i,j]:=yos+setk*(i-1);

end;

for i:=1 to jols do

begin writeln;

for j:=1 to bags do

write(xs[i,j]:9:2,ys[i,j]:8:2);

end;readkey;writeln;

for i:=1 to jols do

for j:=1 to bags do

begin xt:=xs[i,j]; yt:=ys[i,j];

for k:=1 to ushs do

begin

x1:=x[k,1]; y1:=y[k,1];z1:=z[k,1];

x2:=x[k,2]; y2:=y[k,2]; z2:=z[k,2];

x3:=x[k,3]; y3:=y[k,3]; z3:=z[k,3];

zt1:=(yt-y1)*(x2-x1)-(xt-x1)*(y2-y1);

zt2:=(yt-y2)*(x3-x2)-(xt-x2)*(y3-y2);

zt3:=(yt-y3)*(x1-x3)-(xt-x3)*(y1-y3);

if (zt1>0)and(zt2>0)and(zt3>0) then goto 1;

if (zt1<0)and(zt2<0)and(zt3<0) then goto 1;

if (zt1=0) or (zt2=0) or (zt3=0) then goto 1;

goto 3;

1: a:=y1*(z2-z3)-z1*(y2-y3)+y2*z3-y3*z2;

b:=z1*(x2-x3)-x1*(z2-z3)+z2*x3-z3*x2;

c:=x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2;

d:=x1*(y2*z3-y3*z2)+y1*(z2*x3-z3*x2)+z1*(x2*y3-x3*y2);

zt:=-(a*xt+b*yt-d)/c;

zs[i,j]:=zt;

3:end;end; write(»);

for j:=1 to bags do write(xs[1,j]:8:2);writeln;

for i:=1 to jols do begin writeln; write(ys[i,1]:8:2);

for j:=1 to bags do

write(zs[i,j]:8:2);

end;

readkey;

end.

Құрылған бағдарламамен 1-ші суретте берілген есеп шешілді. Алынған нәтижелер бағдарламаның қойылған бас есепті дұрыс шешетіндігін көрсетті.

Бағдарламаны қосқанда 1 – суреттегі есепті шешу үшінтөмендегі мәліметтерді енгіземіз.

  1. Үшбұрыш санын енгізу ushs=8.
  2. Бірінші үшбұрыш координаталарын енгізу.

Осылайша кезектегі 1-суреттегі қалған жеті үшбұрыш координаталарын енгіземіз.

  1. Экранда xos, yos = 1 1 мәнін енгіземіз. Бұл квадрат деңгей торабы құрудың бастапқы нүктесінің координатасы.
  2. jols, bags=8 9 мәнін енгіземіз, яғни жол саны 8 ал баған саны 9 екендігі көрсетеді.
  3. setk=1 мәнін енгізу, қадам 1-ге теңдігін білдіреді. Осы мәліметтерден кейін бағдарлама 1-суреттегі квадрат торабының әрбір түйін нүктесі үшін биктік деңгейі z[i,j] мәнін есептеп береді. Алынған нәтиже 1-кестеде берілген.

1-кесте

y

x

1 2 3 4 5 6 7 8 9
1 25,43 26,29 27,14 28,00 28,40 28,80 29,20 26,60 30,00
2 26,10 26,95 27,74 28,19 28,60 29,00 29,40 29,92 30,67
3 26,76 27,48 27,93 28,37 28,80 29,20 29,83 30,58 31,33
4 27,22 27,67 28,11 28,56 29,00 29,75 30,50 31,25 32,00
5 28,04 28,53 28,97 29,42 29,85 30,25 31,00 31,75 32,50
6 28,79 29,36 29,83 30,28 30,70 31,10 31,50 32,25 33,00
7 29,54 30,11 30,68 31,14 31,50 31,95 31,35 32,75 33,50
8 30,29 30,86 31,43 32,00 32,40 32,80 33,20 33,60 34,00