Программирование на языке Turbo Pascal для решения геодезических задач

Выполнение типовых геодезических задач с помощью языка программирования Turbo Pascal с последующим тестом в среде математического пакета MathCAD. Вычисление координат теодолитного хода. Решение системы линейных алгебраических уравнений методом Гаусса.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.11.2013
Размер файла 377,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Аннотации

Пояснительная записка содержит примеры решения типовых геодезических задач с помощью языка программирования Turbo Pascal и математическом пакете MathCAD. Отчёт оформлен в текстовом процессоре Microsoft Word. Страниц 33, рисунков 5.

The explanatory note contains examples of typical survey applications using the programming language Turbo Pascal and mathematical package MathCAD. A report issued in the word processor Microsoft Word. Page 33, Figure 5.

Оглавление

  • Введение
  • 1. Обратная геодезическая задача
  • 2. Теодолитный ход
  • 3. Решение СЛАУ методом Гаусса
  • Заключение
  • Библиографический список

Введение

Работа маркшейдера подразумевает собой обработку большого количества геодезических данных и составление расчетно-графической документации. Процесс обработки материалов (камеральные работы) становится более быстрым и менее трудоемким с применением программного обеспечения для решения геодезических задач. В наше время для этих целей используют такие программные пакеты как: Credo DAT, Credo Topoplan, MicroMine, AutoCAD 2011, и прочие системы автоматического проектирования. Некоторые из данных программных средств хорошо известны по применению в других сферах (например, AutoCAD в машиностроении и дизайне), и являются необходимым инструментом в расчетах.

Использование любого из перечисленных пакетов и программ невозможно без четкого представления хода решения поставленной задачи и её предварительной алгоритмизации.

Алгоритм "разбивает" задачу на составные части, меньшие по объему, и превращает одну задачу в несколько, но более легких. Таким образом, алгоритмизация упрощает понимание задания и его дальнейшее решение его решение.

В данной курсовой работе рассматривается решение типовых геодезических задач с помощью языка программирования TurboPasсal с последующим тестом в среде MathCAD.

TurboPascal - высокоуровневый язык программирования общего назначения. Один из наиболее известных языков программирования, широко применяется в промышленном программировании, обучении программированию в высшей школе, является базой для большого числа других языков. TurboPascal был создан как язык для обучения процедурному программированию.

С помощью языка программирования TurboPascal можно составить программы для решения многих маркшейдерских задач.

MathCAD представляет собой мощнейший математический пакет с большим набором функций (в том числе и тригонометрических, необходимых при выполнении геодезических расчетов), возможностью построения двух- и трехмерных графиков; данная среда отличается также от остальных математических пакетов простым и понятным графическим интерфейсом ввода формул. Фактически среда MathCAD является тем же языком программирования, является тем же языком программирования, но с более современным интерфейсом и более широкими возможностями, нежели язык TurboPascal. Для учебных целей и типовых расчетов одинаково подходят и математический пакет MathCAD и язык программирования TurboPascal.

Основной целью курсовой работы является закрепление полученного опыта работы с системой TurboPascal и получение навыков алгоритмизации задач с помощью создания программ для обработки геодезических данных (камеральных работ). Проверка программ проводится в математическом пакете MathCAD 14.

Пояснительная записка была создана и оформлена в текстовом редакторе Microsoft Office Word 2010, также предоставляющем широкие возможности по форматированию текста и работе с изображениями.

Задание. Составить программы с помощью языка программирования Turbo Pascal для решения геодезических задач: решение обратной геодезической задачи, вычисление координат теодолитного хода, решение системы линейных уравнений методом Гаусса.

1. Обратная геодезическая задача

Теоретические сведения.

Обратная геодезическая задача заключается в вычислении дирекционного угла a--и расстояния R = | AB | по заданным на плоскости декартовым координатам x, y двух точек А и В. Дирекционный угол - это горизонтальный угол, измеряемый по ходу часовой стрелки между северным направлением вертикальной линии координатной сетки карты и направлением на контурную точку. Дирекционный угол, в конечном итоге, должен быть представлен в градусной мере, как это принято в геодезии. Расстояние между точками определяется через найденный дирекционный угол.

Рис. 1.1

Пусть даны две точки А и В (рис. 1.1), координаты которых соответственно . Согласно схеме, показанной на рис. 1.1., приращения координат определяются:

(1.1)

Затем находят величину румба.

(1.2)

Далее по знакам приращения координат находят название четверти, что, в свою очередь, позволяет определить значение дирекционного угла (см. табл. 1.1).

Таблица 1.1

Знаки приращения координат

Название четверти

Формула дирекционного угла

?x

?y

+

+

I

a--=--r

-

+

II

a--=--p-----r

-

-

III

a--=----p--+--r

+

-

IV

a--=--2p-----r

Горизонтальное расстояние между точками может быть определено по формуле:

. (1.3)

Постановка задачи.

Даны координаты 2-х точек A(х,y) и B(x,y). Определить дирекционный угол прямой AB.

Исходные данные.

А) X1=4608.35 Y1=4159.05.

X2=5267.01 Y2=2501.18.

В) X1=4299.05 Y1=10859.16.

X2=2727.40 Y2=10590.88.

Рис. 1.2

Текст программы.

Program Obratnaya_Geodezicheskaya_Zadacha;

uses crt;

var

x1,x2,y1,y2,a,l,d,m,s,temp,r:real;

procedure Radiani_v_gradusi(var d,m,s,temp:real);

begin

temp:=(temp*180)/pi;

d:=int(temp);

m:=int((temp-d)*60);

s:=round((((temp-d)*60)-m)*60);

end;

begin clrscr;

writeln('Vvedite koordinaty tochek');

write('x1=');

readln(x1);

write('y1=');

readln(y1);

write('x2=');

readln(x2);

write('y2=');

readln(y2);

r:=arctan(abs((y2-y1)/(x2-x1)));

if ((y2-y1)>0)and((x2-x1)>0) then a:=r;

if ((y2-y1)>0)and((x2-x1)<0) then a:=pi-r;

if ((y2-y1)<0)and((x2-x1)<0) then a:=pi+r;

if ((y2-y1)<0)and((x2-x1)>0) then a:=2*pi-r;

Radiani_v_gradusi(d,m,s,a);

writeln(d:3:0,m:3:0,'`',s:3:0,'"');

L:=sqrt(sqr(x2-x1)+sqr(y2-y1));

writeln('L= ',l:0:2);

readln;

end.

Результат программы.

A:

Vvedite koordinaty tochek

x1=4608.35.

y1=4159.05.

x2=5267.01.

y2=2501.18.

291 40` 03".

S= 1783.92.

B:

Vvedite koordinaty tochek

x1=4299.05.

y1=10859.16.

x2=2727.40.

y2=10590.88.

189 41` 13".

S= 1594.38.

Тестирование в среде MS Exsel.

Рис. 1.3

Рис. 1.4

Тестирование в среде MathCAD.

Анализ. Поставленная задача была успешно выполнена в среде Turbo Pascal. Тесты проводилися в MathCAD 14, MS Exsel и подтвердили правильность расчетов программы (результаты оказались идентичными).

2. Теодолитный ход

Теоретические сведения. Теодолитный ход это полигон, представляющий собой систему ломаных линий, в котором горизонтальные расстояния между всеми его смежными вершинами измеряются стальными мерными лентами и рулетками, либо оптическими дальномерами, а горизонтальные углы между смежными сторонами - техническими теодолитами. В зависимости от конструкции полигона, различают разомкнутый теодолитный ход, начало и конец которого опираются на пункты геодезического обоснования (рис. 4.1 а), замкнутый теодолитный ход (замкнутый многоугольник), примыкающий к пункту геодезического обоснования (рис. 4.1 б) и висячий (рис. 4.1 в). В данной работе рассматривается Разомкнутый теодолитный ход.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

а) б) в)

Рис. 2.1. Схемы теодолитных ходов

На рис. 2.1 точки опорной геодезической сети показаны квадратиками, а точки, координаты которых требуется определить - черными кружочками. Отрезок между опорными точками называется исходной (примычной) стороной, а угол между ней и стороной теодолитного хода - примычным углом. На рисунке исходные стороны показаны двойными линиями.

Заданы координаты опорных точек баз AB и CD, длины сторон теодолитного хода и углы при вершинах . Особо подчеркнем, что все углы должны быть левыми.

Размещено на http://www.allbest.ru/

Рис. 2.2. Схема разомкнутого теодолитного хода

В нашем случае, для решения задачи необходимо вначале вычислить дирекционные углы a1--...--an. Порядок вычисления дирекционного угла был описан выше.

Разность примычных углов должна быть равна разности дирекционных углов примычных сторон. Однако, в силу ошибок измерения, это равенство практически никогда не выполняется, и возникает невязка хода. В случае, когда она меньше допуска, в измеренные величины вводят поправки таким образом, чтобы свести невязку к нулю. Сумма поправок равна невязке по абсолютной величине и противоположна по знаку.

Формула для вычисления угловой невязки для правых по ходу углов записывается следующим образом:

(2.1)

где aн - дирекционный угол базы AB, ?k - дирекционный угол базы CD. Углы при вершинах теодолитного хода представлены в радианах.

Угловую невязку сравнивают с допустимой f доп, определяют по формуле:

, (2.2)

где n - число сторон.

Если угловая невязка в пределах допуска, то ее распределяют поровну во все измеренные углы. По исправленным углам вычисляют дирекционные углы сторон теодолитного хода. Для этого можно воспользоваться следующим соотношением:

, (2.3)

где - дирекционный угол последующей стороны хода, - дирекционный угол предыдущей стороны, - правый по ходу угол между этими сторонами.

Далее вычисляются приращения координат:

, (2.4)

Приращения координат суммируются и вычисляются абсолютные линейные невязки по соответствующим осям f x и f y.

, (2.5)

XH,YH и Xk, Yk - координаты начальной и конечной точек хода.

Общая абсолютная невязка и общая относительная невязка теодолитного хода, соответственно:

. (2.6)

Величина допустимой относительной невязки определяется в соответствии с инструкцией по топографической съемке. Если допуски выполняются, абсолютные невязки по осям распределяют пропорционально длинам сторон теодолитного хода и далее определяют искомые координаты новых точек по следующим формулам:

. (2.8)

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

Постановка задачи.

Теодолитный ход. По заданным координатам четырех точек опорной геодезической сети, длинам сторон теодолитного хода и измеренным углам, определить координаты точек теодолитного хода.

Исходные данные.

Алгоритм для Turbo Pascal:

1) Ввод координат известных точек (х 1, х 2, х 3, х 4, у 1, у 2, у 3, у 4.), длин сторон и измеренных горизонтальных углов;

2) Вычисление дирекционных углов (процедура dir_ugol);

3) Перевод измеренных горизонтальных углов в радианы (процедура Gradusi_v_radiani);

4) Вычисление углов хода и невязки хода;

5) Вычисление дирекционных углов;

6) Вычисление приращения координат;

7) Вычисление абсолютной линейной невязки и ее распределение;

8) Вывод х и у точек теодолитного хода.

Текст программы.

program Teodolitny_Hod;

uses crt;

var

fabs,fotn,sl,sx,sy,fx,fy,x1,x2,x3,x4,y1,y2,y3,y4,s1,s2,s3,s4,s5,AB,CD,dd,mm,ss,rad,fb:real;

i,j:integer;

dir:array [1..6,1..3]of real;

corners:array [1..7]of real;

points:array [0..5,1..2]of real;

s:array [1..5]of real;

{Procedura perevoda gradusov v radiany}

procedure Gradusi_v_radiani (var a,b,rad:real);

begin

rad:=(a+(b/60))*Pi/180;

end;

{Procedura vichisleniya dir. uglov tverdih storon po ih koordinatam}

procedure dir_ugol(var x1,x2,y1,y2,r:real);

begin

r:=arctan((y2-y1)/(x2-x1));

if ((y2-y1)>0)and((x2-x1)>0) then r:=r;

if ((y2-y1)>0)and((x2-x1)<0) then r:=pi-r;

if ((y2-y1)<0)and((x2-x1)<0) then r:=pi+r;

if ((y2-y1)<0)and((x2-x1)>0) then r:=2*pi-r;

end;

begin clrscr;

{Vvodim dannie s klaviatury}

Writeln('Koordinaty tochek');

Writeln(' koordinaty tochki 9505 ');

Readln(x1,y1);

Writeln(' koordinaty tochki 9506 ');

Readln(x2,y2);

Writeln(' koordinaty tochki 9507 ');

Readln(x4,y4);

Writeln(' koordinaty tochki 9508 ');

Readln(x3,y3);

Writeln('Vvedite dliny izvestnyh storon');

Writeln('9506-1');

Readln(s [1]);

Writeln('1-2');

Readln(s [2]);

Writeln('2-3');

Readln(s [3]);

Writeln('3-4');

Readln(s [4]);

Writeln('4-9508');

Readln(s [5]);

Writeln('Vvedite ugly');

Writeln('Stoim na tochke 9506');

writeln(' na 9505 =');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [1,1]:=rad;

writeln(' na 1=');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [1,2]:=rad;

Writeln(' Stoim na tochke 1');

writeln(' na 9506 =');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [2,1]:=rad;

writeln('na 2=');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [2,2]:=rad;

Writeln(' Stoim na tochke 2');

writeln(' na 1 =');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [3,1]:=rad;

writeln(' na 3=');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [3,2]:=rad;

Writeln('Stoim na tochke 3');

writeln(' na 2 =');

readln(dd,mm);

Gradusi_v_radiani(dd,mm,rad);

dir [4,1]:=rad;

writeln(' na 4=');

readln(dd,mm);

Gradusi_v_radiani(dd,mm,rad);

dir [4,2]:=rad;

Writeln('Stoim na tochke 4');

writeln(' na 3 =');

readln(dd,mm);

Gradusi_v_radiani(dd,mm,rad);

dir [5,1]:=rad;

writeln(' na 9508=');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [5,2]:=rad;

Writeln(' Stoim na tochke 9508');

writeln(' na 4 =');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [6,1]:=rad;

writeln('na 9507=');

readln(dd,mm);

Gradusi_v_radiani (dd,mm,rad);

dir [6,2]:=rad;

{konec vvoda dannih s klaviatury}

dir_ugol (x1,x2,y1,y2,AB);

dir_ugol (x3,x4,y3,y4,CD);

Corners [1]:=AB;

Corners [7]:=CD;

{vichisleniya uglov i nevyazki hoda}

for i:=1 to 6 do

dir [i,3]:=dir [i,2]-dir [i,1];

fb:=(dir [1,3]+dir [2,3]+dir [3,3]+dir [4,3]+dir [5,3]+dir [6,3])-(corners [7]-corners [1]);

if fb<((pi*sqrt(6))/(60*180)) then for i:=1 to 6 do dir [i,3]:=dir [i,3]-fb/6;

{vichisleniya dir. uglov storon teodolitnogo hoda}

for i:=1 to 5 do

corners [i+1]:=corners [i]+dir [i,3]-pi;

points [0,1]:=x2;

points [0,2]:=y2;

for i:=1 to 5 do {vichislenie priraweniya koordinat}

begin

points [i,1]:=s [i]*cos(corners [i+1]);

sx:=sx+points [i,1];

points [i,2]:=s [i]*sin(corners [i+1]);

sy:=sy+points [i,2];

end; {vichislenie absolytnoi lineinoi nevyazki}

fx:=sx-(x3-x2);

fy:=sy-(y3-y2);

for i:=1 to 5 do

sl:=sl+s [i];

fabs:=sqrt(sqr(fx)+sqr(fy));

fotn:=fabs/sl;

{raspredelenie nevyazki proporcionalno priraweniyam koordinat}

for i:=1 to 5 do

begin

points [i,1]:=points [i,1]-(points [i,1]*fx/sx);

points [i,2]:=points [i,2]-(points [i,2]*fy/sy);

end;

for i:=1 to 5 do {vichislenie koordinat iskomih tochek}

begin

points [i,1]:=points [i,1]+points [i-1,1];

points [i,2]:=points [i,2]+points [i-1,2];

end;

Writeln('Iskomye velichiny');

for i:=1 to 5 do

begin

writeln(i,'-aya tochka x=',(points [i,1]):0:2,' y=',(points [i,2]):0:2);

end;

end.

Результат программы.

Iskomye velichiny

1-aya tochka x=38554.48 y=28416.54.

2-aya tochka x=38579.11 y=28848.34.

3-aya tochka x=38862.15 y=28797.23.

4-aya tochka x=39150.54 y=28750.83.

5-aya tochka x=39207.67 y=29221.20.

Тестирование в MathCAD.

Анализ.

Данная задача была решена с помощью методов, предоставленных языком программирования Turbo Pascal, и проверена в программе MathCAD 14. Получились минимальные расхождения в результатах - относительная погрешность, говорящая о точности эксперимента составляет 2•10-4 %.

По сравнению с MathCAD, Turbo Pascal предлагает нам более сложные, архаичные методы вычислений, что объясняется в первую очередь возрастом среды. программирование pascal геодезическая теодолитный

Решение тонких задач, таких, как теодолитный ход, в среде Turbo Pascal возможно, но требует большей аккуратности и внимательности, нежели в математических пакетах.

3. Решение СЛАУ методом Гаусса

Теоретические сведения.

Чтобы проиллюстрировать этот метод решения СЛАУ, рассмотрим сначала систему из трех уравнений с тремя неизвестными:

(3.1)

В такой системе по крайней мере один из коэффициентов ,,должен быть отличен от нуля, иначе бы мы имели бы дело в этих трех уравнениях только с двумя неизвестными. Если , то можно переставить уравнения так, чтобы коэффициент при в первом уравнении был отличен от нуля. Очевидно, что перестановка уравнений оставляет систему неизменной: ее решение остается прежним.

Теперь введем множитель:

. (3.2)

Умножим первое уравнение системы на и вычтем его из второго уравнения системы. ("Первое" и "второе" уравнения берем уже после перестановки, если она была необходима). Результат вычитания равен:

. (3.3)

Так как:

. (3.4)

фактически исключается из второго уравнения (именно для достижения такого результата и было выбрано значение ). Определим теперь новые коэффициенты:

(3.5)

.

Тогда второе уравнение системы приобретает вид:

. (3.6)

Заменим второе из первоначальных уравнений вышестоящим уравнением и введем множитель для третьего уравнения:

. (3.7)

Умножим первое уравнение на этот множитель и вычтем его из третьего. Коэффициент при снова становится нулевым, и третье уравнение приобретает вид:

(3.8)

(3.9)

.

Если теперь в исходной системе уравнений заменить третье уравнение на (3.8), то новая система выглядит так:

(3.10)

Эти новые уравнения полностью эквивалентны исходным уравнениям с тем преимуществом, что входит только в первое уравнение и не входит ни во второе, ни в третье. Таким образом, два последних уравнения представляют собой систему из двух уравнений с двумя неизвестными; если теперь найти решение этой системы, т.е. определить и , то результат можно подставить в первое уравнение и найти . Иначе говоря, задача сведена к решению системы из двух уравнений с двумя неизвестными.

Попытаемся теперь исключить из двух последних уравнений. Если, то снова мы переставим уравнения так, чтобы было отлично от нуля (если и , то система вырождена и либо вовсе не имеет решения, либо имеет бесчисленное множество решений).

Введем новый множитель

. (3.11)

Умножим второе уравнение полученной системы на и вычтем его из третьего. Результат вычитания равен:

. (3.12)

В силу выбора :

. (3.13)

Полагая, что:

(3.14)

окончательно получим:

. (3.15)

Третье уравнение полученной системы можно заменить вышестоящим уравнением, после чего система уравнений приобретает следующий вид:

(3.16)

Такая система уравнений иногда называется треугольной из-за своего внешнего вида.

Для решения необходимо определить из третьего уравнения системы, подставить этот результат во второе уравнение и определить. Полученные значения и подставить в первое уравнение и определить. Этот процесс, который обычно называется обратной подстановкой (обратный ход), определяется формулами:

(3.17)

.

Необходимо отметить, если , то система уравнений вырождена.

Формулы для вычисления неизвестных (обратный ход) будут иметь вид:

(3.18)

Постановка задачи.

Решение системы линейных алгебраических уравнений методом Гаусса.

Исходные данные.

.

Размещено на http://www.allbest.ru/

Рис 4.1. Блок-схема для Turbo Pascal

Текст программы.

program SLAU;

uses crt;

const

n=4;

a:array [1..n,1..n+1]of real=((5,4,0,3,-1),(17,2,8,7,0),(0,3,10,7,8), (-2,0,3,2,3));

var k,i,j:integer;

s:real;

x:array [1..n]of real;

Begin

clrscr;

writeln('koefficienty uravnenii');

for i:=1 to n do

begin

for j:=1 to n+1 do

write(' ',a [i,j]:5:2);

writeln;

end;

for k:=1 to n do

begin

for j:=k+1 to n+1 do

a [k,j]:=a [k,j]/a [k,k];

for i:=1 to n do

begin

if i<>k then

begin

for j:=k+1 to n+1 do

a [i,j]:=a [i,j]-a [i,k]*a [k,j];

end;

end;

end;

writeln('rezultat');

for i:=1 to n do

writeln(x',i,'=',a [i,n+1]:1:4);

readln;

end.

Результат программы.

koefficienty uravnenii

1.00-1.00 1.00-3.00 15.00

2.00 18.00 0.00 5.00 83.00

1.00 5.00 2.00 6.00 18.00

0.00 1.00 1.00 2.00 8.00

rezultat

x1= -7.7

x2= 7.1

x3= 12.5

x4= -5.8

Тестирование в MS Exsel

Рис 4.2

Рис 4.3

Тестирование в среде MathCAD.

Анализ. Данная задача была решена в среде Turbo Paskal и протестирована в средах MathCAD 14 и MS Excel. Аналогичность результатов свидетельствует о правильности работы программы.

Заключение

В данной курсовой работе были рассмотрены две геодезические задачи и одна система линейных алгебраических уравнений. Решение задач и расчёты произведены в среде Turbo Pasсal. Проверка, произведенная в средах MathCAD и MS Excel, дала идентичные результаты, что подтверждает точность вычислений в среде Turbo Pascal.

Целью курсовой работы являлось углубление знаний по информатике и программированию, а также применение навыков пользования пакетами Turbo Pascal, MathCAD и Microsoft Office для решения различных геодезических и инженерных задач.

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

Библиографический список

1. Информатика: Программа и методические указания по выполнению курсовой работы для студентов специальности "Маркшейдерское дело" дневной формы обучения / Санкт-Петербургский горный ин-т. Сост.: А.П. Кондрашов, Т.Р. Косовцева, В.В. Петров, - СПб, 2004. 51 с.

2. Геодезия топографические съёмки. Сост.: Ю.Н. Корнилов, - СПб, 2009. 116 с.

3. Образовательный информатический сайт http://borlpasc.narod.ru, раздел "Иллюстрированный самоучитель".

4. http://borlpasc.narod.ru/docym/Faronov/.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.