Студенттермен оқушыларды қолданбалы есептерді бағдарламалауға үйрету мақсатында төмендегі есептің бағдарламасын және нәтижесін бердік. Бұл есеп геодезия және жер жұмыстарын жоспарлау есептерінде кездеседі.
Есептің қойылуы: Жазықтықта деңгей үшбұрыштар торабы координаталарымен берілген, мүнда 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 – суреттегі есепті шешу үшінтөмендегі мәліметтерді енгіземіз.
- Үшбұрыш санын енгізу ushs=8.
- Бірінші үшбұрыш координаталарын енгізу.
Осылайша кезектегі 1-суреттегі қалған жеті үшбұрыш координаталарын енгіземіз.
- Экранда xos, yos = 1 1 мәнін енгіземіз. Бұл квадрат деңгей торабы құрудың бастапқы нүктесінің координатасы.
- jols, bags=8 9 мәнін енгіземіз, яғни жол саны 8 ал баған саны 9 екендігі көрсетеді.
- 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 |