Przykłady prostych programów geodezyjnych w Pascalu
Obliczenie azymutu i dlugosci ze wspolrzednych
program azdlug;
{Obliczenie azymutu i dlugosci ze wspolrzednych - wersja szkolna - Turbo Pascal}
uses
CRT, dos; {deklaracja modułu CRT i DOS przy pomocy USES}
var {deklaracja zmiennych}
koniec, iw: integer; {zmienne typu integer - calkowite}
rok,mc,dz,dzt: word; {rok,m_c,dzien,dzien_tyg}
{--------- Procedury i funkcje -----------------}
procedure czekaj; {Czeka na bacisniecie Enter i czysci ekran}
var i: integer; {Deklaracja zmiennej i typu integer}
begin {Poczatek procedury}
writeln;
write('Nacisnij <Enter> '); {Pisze na ekranie }
readln; {Czeka na nacisniecie klawisza}
clrscr; {Czysci ekran}
end; {Koniec procedury}
{Funkcja }
FUNCTION dlug (dx: real; dy:real): real; {Funkcja o 2 parametrach: dx, dy typu real i zwraca wynik real}
var d: real; {Zmienna dodatkowa w funkcji typu real}
begin
d := dx * dx + dy * dy; {Kwadrat dlugosci}
d :=
SQRT(d);
{Pierwiastek z kwadratu dlugosci czyli dlugosc}
dlug :=
d;
{ W funkcji musi byc podstawienie pod nazwe funkcji}
end;
{Procedury Dlfun}
Procedure DlFun; {Dlugosc z funkcji}
var x1,y1, x2, y2, dx, dy, d1: real;
Begin
clrscr;
writeln;
writeln( 'Obliczenie dlugosci ze wspolrzednych (z funkcji)');
writeln;
write('x1 = ');
readln(x1); {Czytanie wspolrzednej x1 punktu pierwszego}
write('y1 = '); {Czytanie wspolrzednej y1 punktu pierwszego}
readln(y1);
write('x2 = '); {Czytanie wspolrzednej x2 punktu drugiego}
readln(x2);
write('y2 = '); {Czytanie wspolrzednej y2 punktu drugiego}
readln(y2);
dx := x2 - x1; {Obliczenie dx}
dy := y2 - y1; {Obliczenie dy}
writeln('dx = ',dx:10:3,' dy = ',dy:10:3);
d1 := dlug(dx, dy); {Dlugosc z funkcji dlug(dx,dy)}
writeln;
writeln('D = ', d1:10:3); {Wydruk dlug z dokl
10 przed kropka (ew spacje z przodu) i 3 miejsca po kropce}
czekaj; {Wywolanie procedury czekaj}
end;
{Procedura Dlugosci}
Procedure Dlugosci;
var x1,y1, x2, y2, dx, dy, d1: real;
i: integer;
Begin
clrscr;
for i:=1 to 3 do writeln; {3 puste linie}
writeln( 'Obliczenie dlugosci ze wspolrzednych ');
write ('x1: ');
readln(x1);
write('y1: ');
readln(y1);
write('x2: ');
readln(x2);
write('y2: ');
readln(y2);
dx := x2 - x1;
dy := y2 - y1;
d1 := SQRT(dx * dx + dy * dy);
writeln;
writeln( 'D = ', d1:10:3);
czekaj;
end;
{Procedura Azymut}
procedure azymut;
var
rg, rs, x1, y1, x2, y2, dx, dy, d, a, azg, azs, pi1: real;
i: integer;
begin
pi1 := 4.0 * arctan(1.0); {Pi obliczone, Pi jest w systemi}
rg := 200.0 / pi; {Ro gradowe}
rs := 180.0 / pi; {Ro stopniowe}
clrscr; {Kasowanie ekranu}
for i:=1 to 3 do writeln; {3 razy pusta linia na ekranie}
writeln('Program oblicza dlugosc i azymut ');
writeln; {pusta linia}
writeln('Pi = ', pi, ' Pi_obl = ', pi1);
writeln;
writeln('Podaj x1 y1 x2 y2 (oddzielone spacja): ');
readln(x1, y1, x2, y2); {Czytanie wspołrzednych 2 punktów}
dx := x2-x1; { dx }
dy := y2-y1; { dy}
d :=dlug(dx, dy); {dlugosc}
writeln;
writeln('Wyniki: ');
writeln;
writeln('dx= ', dx:10:3, ' dy= ', dy:10:3, ' d=',d:10:3);
if dx = 0 then {Badanie czy dx =0}
begin
if (dy>0) then {Jesli dx=0 i dy>0 to }
a := pi / 2
else
{Jesli dx=0 i dy<=0 to }
a := 1.5 * pi;
end
else
{Jesli dx <> 0}
begin
a := arctan(dy / dx); { obliczenie azymutu w radianach}
if (dx < 0) then { Jesli dx<0 }
a := a + pi
else
{ Jesli dx >0}
begin
if
(dy < 0) then {Jesli dx>0 i dy<0}
a := a + 2 * pi;
end
end;
azg := a * rg; { obliczenie azymutu w gradach}
azs := a * rs; { obliczenie azymutu w stopniach}
writeln('dx = ', dx:10:3);
writeln( 'dy = ', dy:10:3);
writeln('azg [grad] =', azg:10:5); {Wydruk azymutu w grad z dokl: 10 poz. na czesc calk. i 5 po kropce dzies}
writeln('azs [stopn]=', azs:10:5);
writeln('Odleg z funkcji =', dlug(dx, dy):10:4); {Odleglosc obliczona z funckcji dlug(dx,dy)}
writeln;
czekaj;
end; {Koniec procedury}
{------------------------- Program glowny ------}
Begin {Program glowny}
koniec := 0;
clrscr;
GetDate(rok,mc,dz,dzt); {Sciagniecie ddaty z systemu - rok, miesciac, dzien, dzien tygodnia}
writeln('Data: ',dz,' ',mc,' ',rok); {Wydruk daty}
writeln;
writeln( ' Program DlugAz.pas');
writeln;
writeln;
while koniec <> 1 do {Dopoki zmienna koniec rozna od 1}
begin {Poczatek while }
repeat {Powtarzaj}
writeln(' Obliczenie dlugosci lub azymutu ze wspolrzednych');
writeln;
writeln(' 0 Koniec obliczen ');
writeln(' 1 Dlugosci ze wspolrzednych');
writeln(' 2 Dlugosc z funkcji');
writeln(' 3 Azymut ze wspolrzednych');
writeln;
write('Wybierz wariant: 0..2 ==> ');
readln(iw);
until (iw >= 0) and (iw <= 3); {Konie powtarzaj az wprowadzone iw >=0 i <= 3}
CASE iw of {Przypadek iw}
0: koniec := 1; {przypadek 0 - koniec =1 czyli wyjscie z programu}
1: Dlugosci; {Wywolanie procedury Dlugosci}
2: Dlfun; {Wywolanie procedury Dlfun}
3: Azymut; {Wywolanie procedury Azymut}
END
end; {Koniec while - jesli koniec
=1 to przejscie do nastepniej linii ponizej, wyczysczenie ekranu i
wyjscie}
clrscr;
End. {Koniec programu głównego}
Obliczenie azymutu i długości ze współrzędnych
Delphi - wersja konsolowa
program dlugazpas;
{Aymut dlugosc ze wspolrzednych - wersja Delphi - konsolowa}
{$APPTYPE CONSOLE}
uses
SysUtils;
var
koniec, iw: integer;
//-------------------------------------------------------
// Procedury i funkcje
procedure czekaj;
var i: integer;
begin
writeln;
write('Nacisnij <Enter> ');
readln;
for i:=1 to 100 do writeln;
end;
// Funkcja dlug(dx, dy) - obliczenie dlugosci na podstawie DX, DY
FUNCTION dlug (dx: real; dy:real): real;
var d: real;
begin
d := dx * dx + dy * dy;
d := SQRT(d);
dlug := d;
end;
// Procedura DLFun - obliczenie dlugosci z wykorzystaniem funkcji dlug(dx, dy)
Procedure DlFun;
var x1,y1, x2, y2, dx, dy, d1: real;
Begin
writeln;
writeln( 'Oblicenie dlugosci ze wspolrzednych (z funkcji)');
writeln;
write('x1 = ');
readln(x1);
write('y1 = ');
readln(y1);
write('x2 = ');
readln(x2);
write('y2 = ');
readln(y2);
dx := x2 - x1;
dy := y2 - y1;
writeln('dx = ',dx:10:3,' dy = ',dy:10:3);
d1 := dlug(dx, dy);
writeln;
writeln('D = ', d1:10:3);
czekaj;
end;
// procedure Dlugosci - obliczenie dlugosci na podstawie danych z klawiatury, w ramach tej procedury
Procedure Dlugosci;
var x1,y1, x2, y2, dx, dy, d1: real;
i: integer;
Begin
for i:=1 to 3 do writeln;
writeln( 'Obliczenie dlugosci ze wspolrzednych ');
write ('x1: ');
readln(x1);
write('y1: ');
readln(y1);
write('x2: ');
readln(x2);
write('y2: ');
readln(y2);
dx := x2 - x1;
dy := y2 - y1;
d1 := SQRT(dx * dx + dy * dy);
writeln;
writeln( 'D = ', d1:10:3);
czekaj;
end;
// Procedure azymut
procedure azymut;
var
rg, rs, x1, y1, x2, y2, dx, dy, d, a, azg, azs, pi1: real;
i: integer;
begin
pi1 := 4.0 * arctan(1.0);
rg := 200.0 / pi;
rs := 180.0 / pi;
for i:=1 to 3 do writeln;
writeln('Program oblicza dlugosc i azymut ');
writeln;
writeln('Pi = ', pi, ' Pi_obl = ', pi1);
writeln;
writeln('Podaj x1 y1 x2 y2 (oddzielone spacja): ');
readln(x1, y1, x2, y2);
dx := x2-x1;
dy := y2-y1;
d :=dlug(dx, dy);
writeln('dx= ', dx:10:3, ' dy= ', dy:10:3, ' d=',d:10:3);
if dx = 0 then
begin
if (dy>0) then
a := pi / 2
else
a := 1.5 * pi;
end
else // if (dx != 0)
begin
a := arctan(dy / dx);
if (dx < 0) then // dx <0
a := a + pi
else
begin
if (dy < 0) then
a := a + 2 * pi;
end
end;
azg := a * rg; // obliczenie azymutu w gradach
azs := a * rs; // obliczenie azymutu w stopniach
writeln('dx = ', dx:10:3);
writeln( 'dy = ', dy:10:3);
writeln('azg [grad] =', azg:10:5);
writeln('azs [stopn]=', azs:10:5);
writeln('Odleg z funkcji =', dlug(dx, dy):10:4);
writeln;
czekaj;
end;
{----------------- Program glowny -----------------------}
Begin {Program glowny}
koniec := 0;
writeln('Dzis jest ',DateToStr(Date));
writeln;
writeln( ' Program DlugAz.pas');
writeln;
writeln;
while koniec <> 1 do
begin // while
repeat
writeln(' Obliczenie dlugosci lub azymutu ze wspolrzednych');
writeln;
writeln(' 0 Koniec obliczen ');
writeln(' 1 Dlugosci ze wspolrzednych');
writeln(' 2 Dlugosc z funkcji');
writeln(' 3 Azymut ze wspolrzednych');
writeln;
write('Wybierz wariant: 0..2 ==> ');
readln(iw);
until (iw >= 0) and (iw <= 3);
CASE iw of
0: koniec := 1;
1: Dlugosci;
2: Dlfun;
3: Azymut;
END // case
end; // while
End. // Koniec programu glownego
Obliczenie azymutu i dlugości przy pomocy czwartaków, z kontrolą jak tradycyjnie
program AZDczw;
{Obliczenie azymutu i dlugosci przy pomocy czwartakow, z kontrola jak tradycyjnie}
uses crt;
const
rg=200.0/pi;
wyn= 'WydrAz.txt';
MALA=0.000000001;
NIESK=9.9E20;
var
nra, nrb: word;
x1, y1, x2, y2, dx, dy : real;
koniec: char;
f: text;
function tg(x:real): real;
var s, c, t: extended;
begin
x:=x/rg;
s:=sin(x);
c:=cos(x);
if abs(c) > MALA then t:=s/c else t:= NIESK;
tg:=t;
end;
function azymut(dx,dy: real): real;
var
c: byte;
tgf, cz, az: real;
Begin
c:=0;
cz:=0;
az:=0;
if dy=0 then
begin
if dx>0 then c:=14 { az=0}
else c:=23 {az=200}
end
else
if dx=0 then
begin
if dy>0 then c:=12 {az=100}
else c:=34; {az=300}
end
else
begin
if (dx > 0) and (dy > 0) then c:=1;
if (dx < 0) and (dy > 0) then c:=2;
if (dx < 0) and (dy < 0) then c:=3;
if (dx > 0) and (dy < 0) then c:=4;
tgf:=abs(dy/dx);
cz:=arctan(tgf);
cz:=cz*rg;
end;
case c of
14 : az:=0;
12: az:=100;
23 : az:= 200;
34: az:=300;
1: az:=cz;
2: az:=200-cz;
3: az:=200+cz;
4: az:=400-cz;
end; {czse}
azymut:=az;
end;
procedure naglwydr;
{wydruk naglowka}
begin
writeln(f,' Program AZDczw.pas');
writeln(f,'Obliczenie azymutu i dlugosci ze wspolrzednych');
writeln(f,'|--------------------------------------------------------------------------|');
writeln(f,'|Oznacz.
pkt|
|
|
| Kontrola
|');
writeln(f,'|B
|XB
|YB |tg(Fi)=DY/DX |cos(Fi) |DX+DY
| Psi |');
writeln(f,'|A
|XA
|YA |Czwartak Fi |sin(Fi)
|DX-DY |Az+50[grad] |');
writeln(f,'|Bok
A->B |D(XAB) |DY(AB) |Az(AB)[grad]
|d(AB) |tg(Psi)|tg(Psi) |');
writeln(f,'|
|Az(AB)[stop] |d=|DX}/cos(Fi) d=|DX}/sin(Fi)|');
writeln(f,'|--------------------------------------------------------------------------|');
writeln(f);
end;
procedure oblicz(nra, nrb: word; dx,dy: real);
var az1, d1,d2, d3, fi, tgfi, tgpsi, cfi, sfi, cz, licz, mian, psi,
tanpsi : real;
begin
writeln('A=',nra,' B=',nrb);
if (abs(dx)> MALA) then tgfi:=abs(dy/dx)
else tgfi:=NIESK;
fi:=arctan(tgfi);
cz:=rg*fi;
az1:=azymut(dx,dy);
licz:=dx+dy;
mian:=dx-dy;
if abs(mian) > MALA then tgpsi:=abs(licz/mian)
else tgpsi:= NIESK;
psi:=azymut(mian,licz);
tanpsi:=abs(tg(abs(psi)));
d1:=sqrt(dx*dx+dy*dy);
writeln('az1=',az1:10:4, '[grad] = ', az1*0.9:10:4,'[stop] d=',d1:10:3);
cfi:=cos(fi);
sfi:=sin(fi);
if abs(cfi) > MALA then d2:=abs(dx)/cfi else d2:=d1;;
if abs(sfi) > MALA then d3:=abs(dy)/sfi else d3:=d1;
{wydruk do pliku}
writeln(f,nrb:11, x2:10:3, y2:10:3, tgfi:10, cfi:10:5, licz:10:6,psi:10:4);
writeln(f,nra:11, x1:10:3, y1:10:3, cz:10:5, sfi:10:5, mian:10:6,(az1+50):10:4);
writeln(f,nra:4,' ->',nrb:4, dx:10:3, dy:10:3, az1:10:5, d1:10:3, tgpsi:8, ' ',tanpsi:8);
writeln(f, az1*0.9:41:5, d2:10:3, d3:10:3);
writeln(f,'--------------------------------------------------------------------------');
writeln(f);
end;
Begin
clrscr;
writeln('Program AZDLXY1.PAS - Obliczenie azymutu i dlugosci ze wspolrzednych');
writeln('Metoda tradycyjna - czwartak, obl. kontrolne - azymut + 50[grad]');
writeln;
assign(f,wyn);
rewrite(f);
naglwydr;
repeat
writeln('Podaj numery (calk.) i wspolrz. punktow (z kropka), oddziel. spacjami');
writeln;
Write('Nr_P1 X1 Y1 => ' );
readln(nra, x1, y1);
Write('Nr_P2 X2 Y2 => ');
readln(nrb, x2, y2);
dx:=x2-x1;
dy:=y2-y1;
oblicz(nra, nrb, dx,dy);
writeln;
writeln('Koniec obl => 1, inny klawisz kontynuacja: ' );
readln(koniec);
until (koniec='1');
writeln(f);
writeln(f,'Uwagi: ');
writeln(f,'Fi - czwartak, Psi - azymut + 50[grad]');
writeln(f,'Liczba 1.0E+0000 oznacza 1.0000, 0.0E+0000 oznacza zero');
writeln(f,'Liczba ', NIESK:8, ', oznacza nieskonczonosc - tangens dla katow 100+n*200[grad]');
writeln(f);
close(f);
writeln;
writeln('Wyniki obliczeń w pliku ',wyn);
readln;
End.
Obliczenie wspolrzednych z domiarow prostokatnych
program WspDomPr;
{Program WspDomPr.pas}
{Obliczenie wspolrzednych z domiarow prostokatnych}
{grupa 5 }
uses
crt;
{Stale}
const
plikwyn='WKatWcWp.txt';
autor='Iksinski';
Rog=200/pi;
{Zmienne}
var
xA, yA, xB, yB: real;
dpAB, doAB: real;
c, s, X, Y: real;
d, h: real;
Kont, nrA, nrB, nrP: integer;
NOblicz: string;
f: text;
{Funkcja - obliczenie dlugosci}
function dlug(dx,dy: real): real;
begin
dlug:=sqrt(dx*dx+dy*dy);
end;
{Procedury}
Procedure czekaj(kom: string); {Czeka na nacisniecie Enter po wypisaniu komunikatu kom}
begin
write(kom);
readln;
end;
Procedure Pomoc; {nie uwzględniona w programie glownym}
begin
writeln('Obliczenie wspolrzednych z domiarow prostokatnych');
writeln;
writeln(' Szkic i oznaczenia');
writeln('^X o B');
writeln('| /');
writeln('| d(i)/');
writeln('| / h(i) o P(i) ');
writeln('| /');
writeln('| /');
writeln('| A o------------o');
writeln('|---------------------> Y') ;
writeln;
writeln('Dane: xA,yA, xB, yB oraz domiary d(i), h(i)');
writeln;
write('Kontynucja: 1, Koniec programu: 2 ');
readln(Kont);
if Kont = 2 then halt;
end;
Procedure Start; {start programu}
begin
clrscr;
writeln;
writeln('Obliczenie wspolrzednych z domiarow prostokatnych');
writeln;
writeln(' Szkic i oznaczenia');
writeln('^X o B');
writeln('| /');
writeln('| d(i)/');
writeln('| / h(i) o P(i) ');
writeln('| /');
writeln('| /');
writeln('| A o------------o');
writeln('|---------------------> Y') ;
writeln;
writeln('Dane: xA,yA, xB, yB oraz domiary d(i), h(i)');
writeln;
writeln('Domiary h na prawo podajemy dodatnie, na lewo ujemne');
writeln;
write('Kontynucja: 1, Koniec programu: 2 ');
readln(Kont);
if Kont = 2 then halt;
assign(f, plikwyn);
rewrite(f);
writeln(f,'Obliczenie wspolrzednych z domiarow prostokatnych');
writeln(f);
writeln(f,' Szkic i oznaczenia');
writeln(f,'^X o B');
writeln(f,'| /');
writeln(f,'| d(i)/');
writeln(f,'| / h(i) o P(i) ');
writeln(f,'| /');
writeln(f,'| /');
writeln(f,'| A o------------o');
writeln(f,'|---------------------> Y') ;
writeln(f);
writeln(f,'NrPkt Domiary Wspolrzedne');
writeln(f,'
d
h
X
Y');
writeln(f,'-------------------------------------------------');
end;
Procedure Dane; {Wprowadzamy dane linii pomiarowej AB}
var dx, dy, dA, hA: real;
begin
clrscr;
dA:=0; hA:=0;
writeln('Dane linii pomiarowej: punkt A (poczatkowy) i punkt B (koncowy) ') ;
writeln('Dane oddzielamy spacja, wspolrzedne z kropka, numery punktow - liczby calkowite');
writeln;
writeln('Podaj dane:');
write('nrA xA yA ==> '); readln(nrA, xA, yA);
write('nrB xB yB ==> '); readln(nrB, xB, yB);
dx:=xB-xA; dy:=yB-yA;
doAB:=dlug(dx,dy);
writeln;
writeln('Dlugosc obliczona AB = ',doAB:10:3);
write('Podaj dlugosc pomierzona AB ==> '); readln(dpAB);
c:=dx/dpAB; s:=dy/dpAB;
writeln;
writeln('Wspolczynniki obliczone');
writeln('c = ', c:10:7, ' s = ',s:10:7);
writeln(f,nrA:5,dA:10:3,hA:10:3,xA:12:3,yA:12:3);
czekaj('Nacisnij Enter ');
end;
Procedure Oblicz; {Obliczanie punktow z domoarow d i h}
var hB: real;
nr: integer;
begin
clrscr;
nrP:=1;
hB:=0;
writeln('Obliczenia punktow z domiarow prostokatnych ');
writeln;
repeat
writeln('Podaj nr punktu na domiarze lub 0 gdy koniec obliczen ');
readln(nr);
writeln('nr=',nr);
if nr<>0 then
begin
nrp:=nr;
writeln('Podaj domiary d i h (na lewo od linii pomiarowj h ujemne !)');
write('d h ==> ');
readln(d, h);
x:=xA+d*c-h*s;
y:=yA+d*s+h*c;
writeln(nrp:5,d:10:3,y:10:3);
writeln(f,nrp:5,d:10:3,h:10:3,x:12:3,y:12:3);
end;
until nr=0;
writeln(f,nrB:5,dpAB:10:3,hB:10:3,xB:12:3,yB:12:3);
end;
procedure Wydruk; {Wydruk niektorych danych do pliku i wynikow}
begin
writeln(f);
writeln(f,'Dlugosc pomierzona AB =',DpAB:10:3);
writeln(f,'Dlugosc obliczona AB =',DoAB:10:3);
writeln(f,'Wspolczynniki c=dx(AB)/dpom i s = dy(AB)/dpom(AB)');
writeln(f,'c = ',c:10:7, ' s:=',s:10:7);
writeln(f);
write('Obliczyl (podaj nazwisko i imie: ');
readln(NOblicz);
writeln(f,'Obliczyl: ',NOblicz);
end;
procedure Koniec;
begin
writeln('Nacisnij Enter ');
readln;
close(f);
end;
{Program glowny}
Begin {Wlasciwy program}
{Pomoc;}
Start;
Dane;
Oblicz;
Wydruk;
Koniec;
End. {Kropka po End.}
Obliczenie domiarow prostokatnych ze wspolrzednych punktow
program DomPrzXY; {obliczenie domiarow prostokatnych ze wspolrzednych punktow}
{Program DomPrzXY.pas}
{Obliczenie wspolrzednych z domiarow prostokatnych - wersja 2 rozszerzona}
{Zapis wynikow do pliku
uses Crt;
const plikwyn='wyndompr.txt';
{Zmienne}
var
Xa, Ya, Xb, Yb, DXab, DYab, Dab, bm, c, s, d, b: real;
X, Y: real;
NrA, NrB, Nr: integer; odp: char;
fw: text; {zmianna plikowa}
function dl(x1, y1, x2, y2: real): real; {Obliczenie dlugosci ze wspolrz}
var dx, dy, d: real;
begin
dx:=x2-x1; dy:=y2-y1;
d:=sqrt(dx*dx+dy*dy);
writeln('d_funkcja=',d:10:3);
dl:=d;
end;
{Procedury}
procedure start(tytul:string);
begin
ClrScr;
Writeln(tytul);
writeln('Program DomPrzXY.pas');
writeln;
writeln('Zapis wynikow do pliku ', plikwyn);
Writeln;
assign(fw,plikwyn);
rewrite(fw);
writeln(fw,' Obliczenie domiarow na podstawie wspolrzednych');
writeln(fw);
end;
procedure Dane1(var Xa,Ya,Xb,Yb: real);
var d1, h1, h2: real;
begin
d1:=0; h1:=0; h2:=0;
writeln('Dane punktow prostej AB, na ktora rzutujemy punkty');
writeln('Podaj Nry (liczby calkowite) oraz X i Y oddzielone spacjami');
writeln;
Write('NrA Xa Ya: '); Readln(NrA, Xa, Ya);
Write('NrB Xb Yb: '); Readln(NrB, Xb, Yb);
Dab:=dl(xa,ya,xb,yb);
writeln('Dlug obl. A-B = ',Dab:10:3);
write('Podaj dlug pomierzona A-B ==> '); readln(bm);
DXab:=Xb-Xa; DYab:=Yb-Ya; c:=DXab/bm; s:=DYab/bm;
writeln('c=',c:10:6, ' s = ',s:10:6);
writeln(fw,'Nr
X
Y
d h ');
writeln(fw,'------------------------------------------------------');
writeln(fw,'Punkty prostej, na ktora rzutujemy');
writeln(fw,NrA:7, Xa:10:3, Ya:10:3, d1:10:3, h1:9:3, ' punkt A');
writeln(fw,NrB:7, Xb:10:3, Yb:10:3, bm:10:3, h2:9:3, ' punkt B');
writeln;
writeln('Nacisnij Enter '); readln;
end;
procedure domiary;
var dx, dy, d, b: real;
begin
clrscr;
writeln('Obliczenie rzutow na podstawie podanych wspolrzednych');
writeln;
writeln(fw,'Punkty rzutowane i obliczone domiary prostokatne ');
repeat
writeln;
write('Podaj Nr(i) X(i) Y(i) ');
readln(Nr, X, Y);
{ writeln('c=',c:10:6,' s=',s:10:6);}
dx:=X-Xa; dy:=Y-Ya; d:=c*dy-s*dx;
b:=c*dx+s*dy;
writeln('Punkt ',Nr, ' Odcieta = ',b:10:3, ' Rzedna = ',d:10:3);
writeln(fw,Nr:7, X:10:3, Y:10:3, b:10:3,d:9:3);
write('Koniec obliczen (t/n) '); readln(odp);
until (odp='t') or (odp='T');
writeln(fw);
writeln(fw,'d(AB)pom=',bm:7:3, ' d(AB)obl=',Dab:7:3);
writeln(fw, 'Wspolczynniki c=Dx(AB)/d(AB)pom=',c:7:7, ' s:=Dy*AB)/d(AB)pom=',s:7:7);
end;
procedure koniec;
var obliczajacy: string;
begin
Writeln;
write('Nazwisko obliczajacego: '); readln(obliczajacy);
writeln(fw);
writeln(fw,'Obliczyl: ',obliczajacy);
close(fw);
writeln('Wyniki obliczen w pliku ', plikwyn);
Write('Nacisnij klawisz Enter.'); Readln
end;
Begin {Wlasciwy program}
start('Obliczenie domiarow prostokatnych ze wspolrzednych');
Dane1(Xa, Ya, Xb, Yb);
domiary;
koniec;
End.
Katowe wciecie w przod, przy 2 punktach dostosowania
program KtWcWp;
{Program KtWcWp.pas}
{Katowe wciecie w przod, przy 2 punktach dostosowania}
uses
crt;
{Stale}
const
plikwyn='WKatWcWp.txt';
autor='Iksinski';
Rog=200/pi;
{Zmienne}
var
Kont, nrA, nrB, nrC: word;
Ag, Bg, xA, yA, xB, yB: real; {Dane}
xC, yC, Gg, Grozn: real; {szukane}
cA, cB, A, B : real; {pomocznicze}
NOblicz: string;
f: text;
{Funkcje i procedury}
function tgKata(dxL, dyL, dxP, dyP: real): real;
var tgK, L, M: real;
begin
L:=dxL*dyP-dxP*dyL; M:=dxL*dxP+dyL*dyP;
tgK:=L/M; tgKata:=tgK;
end;
function kat1(dxL, dyL, dxP, dyP: real): real;
var tgK, L, M, K: real;
begin
L:=dxL*dyP-dxP*dyL; M:=dxL*dxP+dyL*dyP;
tgK:=L/M; K:=arctan(tgK); kat1:=K*200/Pi;
end;
function kat(dxL, dyL, dxP, dyP: real): real;
var L, M, K: real;
begin
L:=dxL*dyP-dxP*dyL; M:=dxL*dxP+dyL*dyP;
K:=arctan(L/M); kat:=K*200/Pi;
end;
Procedure Pomoc;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln(' Szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o------------o');
writeln;
write('Kontynucja: 1, Koniec programu: 2 ');
readln(Kont);
if Kont = 2 then halt;
end;
procedure czekaj(kom: string);
begin
writeln(kom);
readln;
end;
Procedure Start;
begin
clrscr;
writeln('Katowe wciecie w przod, przy 2 punktach dodtosowania');
writeln('Metoda Hausbrandta');
writeln(' Program KatWcWprz.pas');
writeln;
writeln;
assign(f, plikwyn);
rewrite(f);
writeln(f);
end;
Procedure Dane;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln(' Szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o------------o');
writeln;
writeln('Podaj dane (oddzielane spacja): A - punkt prawy, B - punkt lewy');
writeln('Alfa - kat przy punkcie A w [grad], Beta - kat w punkcie B w [grad]');
writeln;
write('nrA, xA, yA ==> '); readln(nrA, xA, yA);
write('nrB, xB, yB ==> '); readln(nrB, xB, yB);
writeln;
write('Alfa, Beta ==> '); readln(Ag, Bg);
writeln;
write('Nr punktu wyznaczanego C ==> '); readln(nrC);
end;
Procedure Oblicz;
var sina, cosa, sinb, cosb: real;
begin
A:=Ag/Rog;
B:=Bg/Rog;
sina:=sin(A); cosa:=cos(A); cA:=cosa/sina;
sinb:=sin(B); cosB:=cos(B); cB:=cosb/sinb;
{cA:= 1/tan(A);}
{cB:=1/tan(B);}
xc:= (xA*cB + xB*cA + yA - yB) / (cA + cB);
yC:= (yA*cB + yB*cA - xA + xB) / (cA + cB);
writeln('xC=',xC:10:3);
writeln('yC=',yC:10:3);
czekaj('Nacisnij Enter ... ');
{readln;}
end;
Procedure Kontrola;
var dxl, dyl, dxp, dyp, Gg1: real;
begin
clrscr;
writeln('Kontrola - obliczenie kata Gamma');
dxL:=xA-xC; dyL:=yA-yC;
dxP:=xB-xC; dyP:=yB-yC;
Gg1:=kat1(dxl,dyl,dxp,dyp);
Gg:=kat(dxl,dyl,dxp,dyp);
Grozn:=200-(Ag+Bg);
writeln('DXL DYL ',dxl:10:3,dyl:10:3);
writeln('DXP DYP ',dxp:10:3,dyp:10:3);
writeln('tgC = ',tgKata(dxl,dyl,dxp,dyp));
writeln('Kat Gamma obl ze wspolrz. z funkcji arctan = ',Gg1:10:4);
writeln('Kat Gamma obl ze wspolrz. z funkcji arctan2 = ',Gg:10:4);
writeln('Kat Gamma obl z roznicy = ',Grozn:10:4);
czekaj('Nacisnij Enter ');
{readln;}
end;
procedure Wydruk;
begin
writeln(f,'Katowe wciecie w przod, przy 2 punktach dodtosowania');
writeln(f,'Metoda Hausbrandta');
writeln(f,' Program KatWcWprz.pas');
writeln(f);
writeln(f,' Szkic i oznaczenia');
writeln(f,' [C] - punkt wyznaczany');
writeln(f,' Gamma');
writeln(f,' / \');
writeln(f,' B Bata A Alfa');
writeln(f,' o------------o');
writeln(f);
writeln(f,' Dane: ');
writeln(f,'Punkt A: ', nrA,': x=',xA:10:3,' y = ',yA:10:3);
writeln(f,'Punkt B: ', nrB,': x=',xB:10:3,' y = ',yB:10:3);
writeln(f,' Katy:');
writeln(f,' Alfa[grad]= ',Ag:5:4,' Beta[grad]= ',Bg:5:4);
writeln(f,'Punkt wyznaczony wcięciem:');
writeln(f,' C: ', nrC,': x=',xC:10:3,' y = ',yC:10:3);
writeln(f,'Kontrola obliczen');
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan = ',Gg:10:4);
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan2 = ',Gg:10:4);
writeln(f, 'Kat Gamma obl z roznicy = ',Grozn:10:4);
writeln(f);
write(' Obliczyl (podaj nazwisko i imie: ');
readln(NOblicz);
writeln(f,'Obliczyl: ',NOblicz);
end;
procedure Koniec;
begin
close(f);
end;
Begin {Wlasciwy program}
Pomoc;
Start;
Dane;
Oblicz;
Kontrola;
Wydruk;
Koniec;
End.
Obliczenie pola wielobolu zamknietego ze wspolrzednych metoda wyznacznikowa - bez tablic
program PW;
{Program PW.pas - wersja konsolowa - dane z klawiatury}
{Zad 2. Grupa 2. Gruszka, Nowak}
{Obliczenie pola wielobolu zamknietego ze wspolrzednych metoda wyznacznikowa - bez tablic}
{Wersja krótka, bez tablic,metoda wyznacznikowa}
{Wprowadzamy Numery, 0 konczy obliczenia}
uses
crt;
{Stale}
const
plikwyn='WObl_PW.txt'; {Plik wynikow}
{autor='Iksinski';}
{Zmienne}
var
Nr, N0, N1, N2: integer; {numery punktow}
S, X0, Y0, X1, Y1, X2, Y2, P, dlug: real;
f: text; {zmienna plikowa}
{Funkcja do oblicz. dlugosci ze wspolrz}
function dl(x1, y1, x2, y2: real): real;
var dx, dy, d: real;
begin
dx:=x2-x1; dy:=y2-y1;
d:=sqrt(dx*dx+dy*dy);
dl:=d;
end;
{Program glowny}
Begin {Wlasciwy program}
clrscr;
writeln('Obliczenie pola wieloboku ze wspolrzednych');
writeln('Wersja obliczenia metoda wyznacznikow - bez tablic');
writeln(' Program PW.pas');
writeln;
(*writeln(DateToStr(Date), ' Godz: ', TimeToStr(Time)); {Data, czas} *)
writeln;
assign(f, plikwyn); {przypisanie pliku wynikow}
rewrite(f);
writeln(f,'Obliczenie pola wieloboku ze wspolrzednych'); {druk do pliku}
writeln(f, 'Wersja obliczenia metoda wyznacznikow - bez tablic');
writeln(f, 'Program PW.pas');
(* writeln(f, 'Data: ',DateToStr(Date), ' Godz: ', TimeToStr(Time));*)
writeln(f);
writeln(f,
'Nr(i)
X
Y Odlegl(i, i+1)');
S:=0;
write('Podaj Nr X, Y punktu pierwszego ==> '); readln(Nr, X1, Y1);
N0:=Nr; N1:=Nr; X0:=X1; Y0:=Y1;
repeat {powtarzaj}
write('Podaj Nr punktu kolejnego lub 0 gdy koniec ==> ');
readln(Nr);
if Nr<>0 then
begin
write('Podaj X Y punktu ', Nr, ' ==> '); readln(x2, y2);
N2:=Nr;
end
else
begin
N2:=N0;
X2:=X0;
Y2:=Y0;
end;
S:=S+X1*Y2-X2*Y1;
dlug:=dl(x1,y1,x2,y2);
writeln(f, N1:3, X1:11:3, y1:10:3, dlug:14:3);
{ writeln(f, N2:3, X2:10:3, y2:10:3);}
N1:=N2; X1:=X2; Y1:=Y2;
until Nr=0; {koniec powtarzaj gdy Nr=0 - wychodzimy}
P:=S/2; {Pole}
writeln('Pole = ', P:10:3);
writeln(f);
writeln(f, 'Pole = ', P:10:3);
writeln;
writeln('Wyniki w pliku ', Plikwyn);
writeln('Nacisnij Enter ');
readln;
close(f); {zamkniecie pliku}
End. {koniec programu glownego
Pole wieloboku ze wspolrzednych - metoda Gaussa i wzynacznikow, Wykorzystanie tablic
program PoleWiel;
{PoleWiel.pas}
{Pole wieloboku ze wspolrzednych - metoda Gaussa i wzynacznikow, Wykorzystanie tablic}
uses crt;
{Stale}
const max= 100; {maks ilosc punktow}
dlugNr=10; plikwyn='WOblPol.txt'; {nazwa pliku wynikow}
{Typy danych}
type
tabWsp=array[0..max] of real; NrPktu= integer; tabNr=array[0..max] of integer;
{Zmienne}
var
Pole0, Pole1, Pole2: real; X, Y: real; n: integer; {ilosc punktow}
Np: NrPktu; fw: text; {plik wynikow}
TN : tabNr; {tablica numerow punktow}
Tx, Ty, TD, TDx, TDy: tabWsp; {Tx - tablica X, Ty - tablicy Y, TDx, TDy - roznice wspolrz: i+1 - i-1}
{-- Procedury o funkcje --}
procedure start(tytul:string);
begin
ClrScr;
writeln('Program PoleWiel.pas');
Writeln(tytul); Writeln; assign(fw,plikwyn);
rewrite(fw);
writeln(fw, tytul); writeln(fw);
writeln(fw,
'Lp Nr
X
Y D[i,i+1]');
end;
{Obliczenie dlugosci ze wspolrz}
function dl(x1, y1, x2, y2: real): real;
var dx, dy, d: real;
begin
dx:=x2-x1; dy:=y2-y1; d:=sqrt(dx*dx+dy*dy); dl:=d;
end;
{Wprowadzenie danych}
procedure Dane;
var i: integer;
begin
write('Podaj ilosc punktow wieloboku 1.. ',max, ' ==> '); read(n);
writeln('Wprowadz dane: Nr X Y '); writeln;
for i:=1 to n do
begin
write(i:2, ' Nr X Y ==> '); readln(Np, x, y);
TN[i]:=Np; Tx[i]:=X; Ty[i]:=Y;
end;
Tn[0]:=Tn[n]; Tx[0]:=Tx[n]; Ty[0]:=Ty[n];
Tn[n+1]:=Tn[1]; Tx[n+1]:=Tx[1]; Ty[n+1]:=Ty[1];
end;
{Obliczenia}
procedure Oblicz(var Pp0: real; var Pp1: real; var Pp2: real);
var
S0, S1, S2, d: real; X1, Y1, X2, Y2: real; i: integer;
begin
S0:=0; S1:=0; S2:=0;
for i:=1 to n do
begin
TDx[i]:=Tx[i+1]-Tx[i-1];
TDy[i]:=Ty[i+1]-Ty[i-1];
S1:=S1+Tx[i]*TDy[i];
S2:=S2+Ty[i]*TDx[i];
X1:=Tx[i]; Y1:=Ty[i];
X2:=Tx[i+1]; Y2:=Ty[i+1];
S0:=S0+X1*Y2-X2*Y1;
d:=dl(x1,y1,x2,y2);
TD[i]:=d;
end;
Pp0:=S0/2; { ze wzoru wyznaczn}
Pp1:=S1/2; { z met/ Gaussa}
Pp2:=S2/2;
writeln;
writeln('Pp0=',Pp0:10:3, ' Pp1=',Pp1:10:3, ' Pp2:=',Pp2:10:3);
{readln;}
end;
Procedure WynikiEkran(Pole0, Pole1, Pole2: real);
begin
writeln('Pola: ', Pole0:10:2, Pole1:10:2, Pole2:10:3);
{readln;}
end;
{Zapis wynikow do pliku}
procedure WynikiPlik;
var i: integer;
begin
for i:=1 to n do
writeln(fw,i:3, Tn[i]:5,Tx[i]:11:3, Ty[i]:11:3, Td[i]:12:3);
writeln(fw);
writeln(fw, 'Pola');
writeln(fw,' 1) ze wzoru wzyznacznikowego: Pole = ',Pole0:10:2);
writeln(fw,' 2) metodą Gaussa: ');
writeln(fw,'
P1 = ',Pole1:10:2);
writeln(fw,'
P2 = ',abs(Pole2):10:2);
end;
procedure czekaj;
begin
close(fw);
writeln('Wyniki w pliku ',plikwyn);
Writeln; Write('Nacisnij klawisz Enter.'); Readln
end;
Begin {Wlasciwy program glowny}
clrscr;
start('Obliczenie pola wieloboku na podstawie wspolrzednych wierzcholkow');
dane;
oblicz(Pole0, Pole1, Pole2);
writeln('Pola - progr glowny: ',Pole0:10:3, Pole1:10:3, Pole2:10:3);
WynikiEkran(Pole0, Pole1, Pole2);
WynikiPlik;
czekaj
End.
Transformacja wspolrzednych przy 2 punktach dostosowania
program Transf2p;
{Program Transf2p.pas}
{Transformacja wspolrzednych przy 2 punktach dostosowania}
{Dane XpA, YpA, XwA, YwA; XpB, YpB, XwB, YwB}
{Gr3 Kaleta Gajewski}
uses
crt;
{Stale}
const
plikwyn='WynTransf.txt';
{Zmienne}
var
NpA, NpB, NwA, NwB, Nr: integer;
XpA, YpA, XwA, YwA, XpB, YpB, XwB, YwB: real;
dxp, dyp, dxw, dyw: real;
u, v: real; {wspolcz. transformackji}
Xp, Yp, Xw, Yw, dp, dw: real;
f: text; {plik wynikow}
{Funkkcja do obliczenia dlugosci z przyrostow wspolrz}
function odl(dx, dy: real): real;
begin
odl:=sqrt(dx*dx+dy*dy); {pierwiastek w Pascalu}
end;
Begin {Wlasciwy program}
clrscr;
writeln('Transformacja wspolrzednych przy 2 punktach dostosowania');
writeln('Metoda wyznacznikowa Hausbrandta');
writeln(' Program Transf2p.pas');
writeln;
(* writeln(DateToStr(Date), ' Godz: ', TimeToStr(Time)); *)
writeln;
assign(f, plikwyn); {otwarcie pliku}
rewrite(f);
writeln(f,'Transformacja wspolrzednych przy 2 punktach dostosowania');
writeln(' Program Transf2p.pas');
(* writeln(f, 'Data: ',DateToStr(Date), ' Godz: ', TimeToStr(Time)); *)
writeln(f);
writeln(f,
'Nr
Xp
Yp
Xw Yw ');
write('Podaj Nr Xp, Yp punktu A w ukl. pierwotnym: '); readln(NpA, XpA, YpA);
write('Podaj Nr Xp, Yp punktu B w ukl. pierwotnym: '); readln(NpB, XpB, YpB);
write('Podaj Nr Xw, Yw punktu A w ukl. wtornym : '); readln(NwA, XwA, YwA);
write('Podaj Nr Xw, Yw punktu B w ukl. wtornym : '); readln(NwB, XwB, YwB);
dxp:=XpB-XpA;
dyp:=YpB-YpA;
dxw:=XwB-XwA;
dyw:=YwB-YwA;
dp:=odl(dxp,dyp);
dw:=odl(dxw,dyw);
u:=(dxp*dyw-dyp*dxw)/(dxp*dxp+dyp*dyp); {wspolczynnik u transformacji}
v:=(dxp*dxw+dyp*dyw)/(dxP*dxp+dyp*dyp); {wspolczynnik v transformacji}
writeln('dxp=',dxp:10:3);
writeln('dyp=',dyp:10:3);
writeln('dxw=',dxw:10:3);
writeln('dyw=',dyw:10:3);
writeln('u=',u:10:7);
writeln('v=',v:10:7);
{readln;}
writeln(f, NpA:4, XpA:12:3, YpA:12:3, XwA:12:3, YwA:12:3);
repeat
write('Podaj Nr punktu kolejnego w ukladzie pierwotnym lub 0 gdy koniec ==> ');
readln(Nr);
if Nr<>0 then
begin
write('Podaj X Y punktu ', Nr, ' w ukladzie pierwotnym==> '); readln(Xp, Yp);
dxp:=Xp-XpA; dyp:=Yp-YpA;
dxw:=dxp*v-dyp*u; {przeliczenie przyrostow}
dyw:=dxp*u+dyp*v; { -"-}
Xw:=XwA+dxw; {wspolrz w ukl. wtrornym}
Yw:=YwA+dyw;
writeln(f, Nr:4, Xp:12:3, Yp:12:3, Xw:12:3, Yw:12:3);
end;
until Nr=0;
writeln(f, NpB:4, XpB:12:3, YpB:12:3, XwB:12:3, YwB:12:3);
writeln(f);
writeln(f,' Dp(A-B) = Dp[',NpA:10, '-',NpB:10,']=',dp:10:3);
writeln(f,' Dw(A-B) = Dw[',NwA:10, '-',NwB:10,']=',dw:10:3);
writeln(f,' Wspolczynniki transformacji: ');
writeln(f,' u = ', u:15:7, ' v=',v:15:7);
writeln(f);
writeln('Wyniki w pliku ', Plikwyn);
writeln('Nacisnij Enter ');
readln;
close(f); {zamkniecie pliku}
End. {koniec programu glownego}
Katowe wciecie w przod przy 2 punktach dostosowania, katy w gradach
program ktwcwp2;
{program ktwcwp2.pas}
{zad. 2 grupa 4, Malecki, Zielinski}
{katowe wciecie w przod przy 2 punktach dostosowania, katy w gradach}
uses
crt;
{stale}
const
plikwyn='wkatwcwp.txt';
rog=200/pi;
{zmienne}
var
kont, nra, nrb, nrc: word;
ag, bg, xa, ya, xb, yb: real; {dane}
xc, yc, gg, grozn: real; {szukane}
ca, cb, a, b : real; {pomocnicze}
noblicz: string;
f: text;
{funkcje i procedury}
function tgkata(dxl, dyl, dxp, dyp: real): real;
var tgk, l, m: real;
begin
L:=dxl*dyp-dxp*dyl; m:=dxl*dxp+dyl*dyp;
tgk:=l/m; tgkata:=tgk;
end;
function kat1(dxl, dyl, dxp, dyp: real): real;
var tgk, l, m, k: real;
begin
l:=dxl*dyp-dxp*dyl; m:=dxl*dxp+dyl*dyp;
tgk:=l/m; k:=arctan(tgk);
kat1:=k*200/pi;
end;
function kat(dxl, dyl, dxp, dyp: real): real;
var l, m, k: real;
begin
l:=dxl*dyp-dxp*dyl; m:=dxl*dxp+dyl*dyp;
k:=arctan(l/m); kat:=k*200/pi;
end;
procedure pomoc;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln(' szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o-------------o');
writeln;
write('kontynuacja: 1, koniec programu: 2 ');
readln(kont);
if kont = 2 then halt;
end;
procedure czekaj(kom: string);
begin
writeln(kom);
readln;
end;
procedure start;
begin
clrscr;
writeln('Katowe wciecia w przod, przy 2 punktach dostosowania');
writeln(' Metoda Hausbradta');
writeln(' Program Katwcwp2.pas');
writeln;
writeln;
assign(f, plikwyn);
rewrite(f);
writeln(f);
end;
procedure dane;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln;
writeln(' Szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o------------o');
writeln;
writeln('Podaj dane (oddzielane spacja): A - punkt prawy, B - punkt lewy');
writeln('Alfa - kat przy punkcie A w [grad], beta - kat w punkcie B w [grad]');
writeln('Numery punktow - liczby calkowitw');;
writeln;
write('nrA, xA, yA ==> '); readln(nra, xa, ya);
write('nrB, xB, yB ==> '); readln(nrb, xb, yb);
writeln;
write('Alfa, Beta ==>'); readln(ag, bg);
writeln;
write('Nr punktu wyznaczonego C ==> '); readln(nrc);
end;
procedure oblicz;
var sina, cosa, sinb, cosb: real;
begin
a:=ag/rog;
B:=bg/rog;
sina:=sin(a); cosa:=cos(a); ca:=cosa/sina;
sinb:=sin(b); cosb:=cos(b); cb:=cosb/sinb;
{ca:= 1/tan(a);}
{cb:= 1/tan(b);}
xc:= (xa*cb + xb*ca + ya - yb) / (ca + cb);
yc:= (ya*cb + yb*ca - xa + xb) / (ca + cb);
writeln('xc=',xc:10:3);
writeln('yc=',yc:10:3);
czekaj('Nacisnij enter ... ');
{readln;}
end;
procedure kontrola;
var dxl, dyl, dxp, dyp, gg1: real;
begin
clrscr;
writeln('Kontrola - obliczenie kata Gamma');
dxl:=xa-xc; dyl:=ya-yc;
dxp:=xb-xc; dyp:=yb-yc;
gg1:=kat1(dxl,dyl,dxp,dyp);
gg:=kat(dxl,dyl,dxp,dyp);
grozn:=200-(ag+bg);
writeln('dxl dyl',dxl:10:3,dyl:10:3);
writeln('dxp dyp',dxp:10:3,dyp:10:3);
writeln('tgc = ',tgkata(dxl,dyl,dxp,dyp));
writeln('kat gamma obl ze wspolrz. z funkcij wrctan = ',gg1:10:4);
writeln('kat gamma obl ze wspolrz. z funkcij arctan2 = ',gg:10:4);
writeln('kat gamma obl z roznicy = ',grozn:10:4);
czekaj('Nacisnij enter ');
end;
procedure wydruk;
begin
writeln(f,'Katowe wciecie w przod, przy 2 punktach dostosowania');
writeln(f,' Metoda Hausbrandta');
writeln(f,' Program Katwcwp2.pas');
writeln(f);
writeln(f,' Szkic i oznaczenia');
writeln(f,' [C] - punkt wyznaczany');
writeln(f,' Gamma');
writeln(f,' / \');
writeln(f,' B Beta A Alfa');
writeln(f,' o------------o');
writeln(f);
writeln(f,' Dane: ');
writeln(f,'Punkt A: ', nra,': x=',xa:10:3,' y = ',ya:10:3);
writeln(f,'Punkt B: ',nrb,' : x=',xb:10:3,' y = ',yb:10:3);
writeln(f,'Katy:');
writeln(f,'Alfa[grad]= ',ag:5:4,' Beta[grad]= ',bg:5:4);
writeln(f,'Punkt wyznaczony wcieciem:');
writeln(f,'C: ', nrc, ': x=',xc:10:3,' y = ',yc:10:3);
writeln(f);
writeln(f,'Kontrola obliczen');
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan = ',gg:10:4);
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan2 = ',gg:10:4);
writeln(f, 'Kat Gamma obl ze wzoru: Gamma=200-(Alfa+Beta)= ',grozn:10:4);
writeln(f);
write(' Obliczyl (podaj nazwisko i imie: ');
readln(noblicz);
writeln(f,'Obliczyl: ',noblicz);
end;
procedure koniec;
begin
close(f);
end;
Begin {wlasciwy program}
pomoc;
start;
dane;
oblicz;
kontrola;
wydruk;
koniec;
End.
Katowe wciecie w przod, przy 2 punktach dodtosowania - wersja 2
program KatWcWp;
{Program KatWcWprz.pas}
{Katowe wciecie w przod, przy 2 punktach dodtosowania}
{ == OPIS PROGRAMU ==}
{Dane wspolrzedne punktow A(xA,yA) i b(xB,yB) oraz katy Alfa, Beta w gradach}
{Obliczyć wspolrzedne xC,Yc punktu wyznaczanego C}
(*
[C] - punkt wyznaczany
Gamma
/ \
B Beta A Alfa
o------------o
*)
{Oznaczamy katy: Alfa[grad]=Ag, Beta[grad]=Bg
[A = Alfa[rad], B=Beta[rad] }
(*Wzory
(xC,yC) = |xA yA | xB yB |
| -1 ctg(B) | 1 ctg(A) |(1,2)
gdzie A - kat Alfa, B - kat Beta
(1,2) - formy Hausbrandta
Do obliczen komputerowych katy w radianach
RoG=200/Pi
KatRad=KatGrad/Rog
A=Ag/Rog
B=Bg/Rog
cA = ctg(A)=1/tan(A)
cB = ctg(B)=1/Tan(B)
czyli
xc = (xA*cB + xB*cA + yA - yB) / (cA + cB)
yC = (yA*cB + yB*cA - xA + xB) / (cA + cB)
Kontrola:
Gamm[grad] = 200 - (Alfa[grad] + Beta[grad])
Gg = Gamma[grad]
Bg=200-(Ag+Bg)
L=A P=B
\ /
\ /
\ / Gamma
o C=C
tan(Gamma) = | Dx(CL) Dy(CL) |
| Dx(CP) Dy(CP) |0
tan(G) = | DxCA DyCA |
| DxCB DyCB) |0
czyli
tan(Gamma)=(Dx(CL)*Dy(CP)-Dx(CP)*Dy(CL)/(Dx(CL)*Dx(CP)+Dy(CL)*Dy(CP))
gdzie
Dx(CL) = xL-xC = DxCA = xA-xC
Dy(CL) = yL-yC = DyCA = yA-yC
Dx(CP) = xP-xC = DxCB = xB-xC
Dy(CP) = yP-yC = DyCB = yB-yC
stąd:
tG = (DxCA*DyCB-DxCA*DyCB)/(DxCA*DxCB+DyCA*DyCB)
G=atan(tG)
Gg=G*Rog - kat w gradach
*)
uses
crt;
{Stale}
const
plikwyn='WKatWcWp.txt';
autor='Iksinski';
Rog=200/pi;
{Zmienne}
var
Kont, nrA, nrB, nrC: word;
Ag, Bg, xA, yA, xB, yB: real; {Dane}
xC, yC, Gg, Grozn: real; {szukane}
cA, cB, A, B : real; {pomocznicze}
NOblicz: string;
f: text;
{Funkce i procedury}
function tgKata(dxL, dyL, dxP, dyP: real): real;
var tgK, L, M: real;
begin
L:=dxL*dyP-dxP*dyL;
M:=dxL*dxP+dyL*dyP;
tgK:=L/M;
tgKata:=tgK;
end;
function kat1(dxL, dyL, dxP, dyP: real): real;
var tgK, L, M, K: real;
begin
L:=dxL*dyP-dxP*dyL;
M:=dxL*dxP+dyL*dyP;
tgK:=L/M;
K:=arctan(tgK);
kat1:=K*200/Pi;
end;
function kat(dxL, dyL, dxP, dyP: real): real;
var L, M, K: real;
begin
L:=dxL*dyP-dxP*dyL;
M:=dxL*dxP+dyL*dyP;
K:=arctan(L/M);
kat:=K*200/Pi;
end;
Procedure Pomoc;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln(' Szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o------------o');
writeln;
write('Kontynucja: 1, Koniec programu: 2 ');
readln(Kont);
if Kont = 2 then halt;
end;
procedure czekaj(kom: string);
begin
writeln(kom);
readln;
end;
Procedure Start;
begin
clrscr;
writeln('Katowe wciecie w przod, przy 2 punktach dodtosowania');
writeln('Metoda Hausbrandta');
writeln(' Program KatWcWprz.pas');
writeln;
(* writeln(DateToStr(Date), ' Godz: ', TimeToStr(Time)); *)
writeln;
assign(f, plikwyn);
rewrite(f);
writeln(f);
end;
Procedure Dane;
begin
clrscr;
writeln('Katowe wciecie w przod');
writeln(' Szkic i oznaczenia');
writeln(' [C] - punkt wyznaczany');
writeln(' Gamma');
writeln(' / \');
writeln(' B Beta A Alfa');
writeln(' o------------o');
writeln;
writeln('Podaj dane (oddzielane spacja): A - punkt prawy, B - punkt lewy');
writeln('Alfa - kat przy punkcie A w [grad], Beta - kat w punkcie B w [grad]');
writeln;
write('nrA, xA, yA ==> '); readln(nrA, xA, yA);
write('nrB, xB, yB ==> '); readln(nrB, xB, yB);
writeln;
write('Alfa, Beta ==> '); readln(Ag, Bg);
writeln;
write('Nr punktu wyznaczanego C ==> '); readln(nrC);
end;
Procedure Oblicz;
var sina, cosa, sinb, cosb: real;
begin
A:=Ag/Rog;
B:=Bg/Rog;
sina:=sin(A); cosa:=cos(A); cA:=cosa/sina;
sinb:=sin(B); cosB:=cos(B); cB:=cosb/sinb;
{cA:= 1/tan(A);}
{cB:=1/tan(B);}
xc:= (xA*cB + xB*cA + yA - yB) / (cA + cB);
yC:= (yA*cB + yB*cA - xA + xB) / (cA + cB);
writeln('xC=',xC:10:3);
writeln('yC=',yC:10:3);
czekaj('Nacisnij Enter ... ');
{readln;}
end;
Procedure Kontrola;
var dxl, dyl, dxp, dyp, Gg1: real;
begin
clrscr;
writeln('Kontrola - obliczenie kata Gamma');
dxL:=xA-xC; dyL:=yA-yC;
dxP:=xB-xC; dyP:=yB-yC;
Gg1:=kat1(dxl,dyl,dxp,dyp);
Gg:=kat(dxl,dyl,dxp,dyp);
Grozn:=200-(Ag+Bg);
writeln('DXL DYL ',dxl:10:3,dyl:10:3);
writeln('DXP DYP ',dxp:10:3,dyp:10:3);
writeln('tgC = ',tgKata(dxl,dyl,dxp,dyp));
writeln('Kat Gamma obl ze wspolrz. z funkcji arctan = ',Gg1:10:4);
writeln('Kat Gamma obl ze wspolrz. z funkcji arctan2 = ',Gg:10:4);
writeln('Kat Gamma obl z roznicy = ',Grozn:10:4);
czekaj('Nacisnij Enter ');
{readln;}
end;
procedure Wydruk;
begin
writeln(f,'Katowe wciecie w przod, przy 2 punktach dodtosowania');
writeln(f,'Metoda Hausbrandta');
writeln(f,' Program KatWcWprz.pas');
writeln(f);
writeln(f,' Szkic i oznaczenia');
writeln(f,' [C] - punkt wyznaczany');
writeln(f,' Gamma');
writeln(f,' / \');
writeln(f,' B Bata A Alfa');
writeln(f,' o------------o');
writeln(f);
writeln(f,' Dane: ');
writeln(f,'Punkt A: ', nrA,': x=',xA:10:3,' y = ',yA:10:3);
writeln(f,'Punkt B: ', nrB,': x=',xB:10:3,' y = ',yB:10:3);
writeln(f,' Katy:');
writeln(f,' Alfa[grad]= ',Ag:5:4,' Beta[grad]= ',Bg:5:4);
writeln(f,'Punkt wyznaczony wcięciem:');
writeln(f,' C: ', nrC,': x=',xC:10:3,' y = ',yC:10:3);
writeln(f,'Kontrola obliczen');
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan = ',Gg:10:4);
writeln(f, 'Kat Gamma obl ze wspolrz. z funkcji arctan2 = ',Gg:10:4);
writeln(f, 'Kat Gamma obl z roznicy = ',Grozn:10:4);
writeln(f);
write(' Obliczyl (podaj nazwisko i imie: ');
readln(NOblicz);
writeln(f,'Obliczyl: ',NOblicz);
end;
procedure Koniec;
begin
(*
writeln('Nacisnij Enter ');
readln;
*)
close(f);
end;
Begin {Wlasciwy program}
Pomoc;
Start;
Dane;
Oblicz;
Kontrola;
Wydruk;
Koniec;
End.
2. Podstawowe obliczenia geodezyjne - program bardziej zaawansowany - Turbo Pascal
{$N+}
Program poblgeo; {podst. obl. geod - poblgeo.pas}
{ (C) K. R.}
{Czesc deklarac}
Uses CRT,DOS;
const m=100; {max ilosc wspolrz}
plikwyn='wyniki.txt';
type str20=string[20];
const k='1';
var a,b,c : real;
i : integer;
n1: integer; {ilosc obl.podatku}
ch : char; {dowolny znak}
nzmc: str20;
rok,mc,dz,dzt: word; {rok,m_c,dzien,dzien_tyg}
np: word; {ilosc pkt}
tnr: array[1..m] of longint; {tablica nrow oktow}
txy: array[1..m,1..2] of real; {tablica wspolrz}
fw, f1, f2 : text;
q: integer;
grad: boolean;
zbxy1, zbxy2: string;
Procedure mies(nr:word; var naz_mies:str20);
begin
case nr of
1: naz_mies:='styczen';
2: naz_mies:='luty';
3: naz_mies:='marzec';
3: naz_mies:='kwiecien';
5: naz_mies:='czerwiec';
6: naz_mies:='lipiec';
7: naz_mies:='sierpien';
8: naz_mies:='lipiec';
9: naz_mies:='wrzesien';
10: naz_mies:='pazdziernik';
11: naz_mies:='listopad';
12: naz_mies:='grudzien';
end;
end;
procedure read_l(var ll: longint);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ll);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_i(var ii: integer);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ii);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r(var rr: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(rr);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r2(var r1, r2: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(r1, r2);
io:=IOresult;
until io=0;
{$I+}
end;
procedure nacisnij;
begin
writeln;
writeln;
writeln('Nacisnij dowolny znak');
repeat until Keypressed;
clrscr;
end;
procedure data;
begin
mies(mc,nzmc);
writeln('
Data: ',dz,' ',nzmc,' ',rok);
writeln;
end;
Procedure Czysc_ekran;
var ch: char;
begin {Czysc_ekran}
writeln('Czy kasowac ekran? T,t,Y,y -tak, N,n -nie ');
repeat read(ch) until ch in['t','T','y','Y','N','n'];
ch:=Upcase(ch);
if (ch in ['T','Y']) then
begin
clrscr;
data;
writeln;
end
else writeln;
end; {function}
Function gr_rad(gr:real):real;
begin
gr_rad:=gr*pi/200.0;
end;
procedure enter;
begin
writeln;
write('Nacisnij ENTER ');
readln;
end;
procedure koniec;
begin
clrscr;
writeln(fw);
writeln(fw,'Obliczyl
.......................
Sprawdzil ............');
writeln(fw,#12);
close(fw);
writeln('Koniec obliczen');
{nacisnij;}
end;
Procedure wczytwsp;
var
zbxy : string;
nr: longint;
x,y: real;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do wczytania: ');
readln(zbxy1);
assign(f1,zbxy1);
reset(f1);
i:=0;
while not eof(f1) do
begin
inc(np);
i:=np;
readln(f1,tnr[np],txy[np,1],txy[np,2]);
writeln(i:5,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
end; {eof}
close(f1);
writeln;
readln;
clrscr;
End;
function is(pp:longint; var x,y: real): boolean;
var nie_ma: boolean;
begin
i:=0;
x:=1e35; y:=1e35;
is:=false;
nie_ma:=true;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
x:=txy[i,1]; y:=txy[i,2];
is:=true;
nie_ma:=false;
{writeln(pp,' ',x:12:3,' ',y:12:3);}
exit;
end;
end;
end;
procedure podaj_xy(nrpkt: longint; var x,y: real);
begin
inc(np);
writeln;
write('Podaj: X Y pktu ',nrpkt,' (oddziel. spacja) ');
read_r2(x, y);
tnr[np]:=nrpkt;
txy[np,1]:=x; txy[np,2]:=y;
writeln;
end;
Function az(dx,dy:real):real; {w radianach}
var a: real;
begin
if dx=0 then
begin
if dy>0 then a:=pi/2 else a:=1.5*pi;
end
else
begin
a:=arctan(dy/dx);
if dx<0 then a:=a+pi;
if (dx>0) and (dy<0) then a:=a+2*pi;
end;
az:=a;
end;
Function kat(n1,n2,n3:longint):real; {L, C, P}
var x1,y1,x2,y2,x3,y3,dxl,dyl,dxp,dyp,kt,l,m: real;
jest: boolean;
Begin
jest:=false;
jest:=is(n1,x1,y1);
if not jest then podaj_xy(n1,x1,y1);
jest:=false;
jest:=is(n2,x2,y2);
if not jest then podaj_xy(n2,x2,y2);
jest:=false;
jest:=is(n3,x3,y3);
if not jest then podaj_xy(n3,x3,y3);
dxl:=x1-x2; dyl:=y1-y2;
dxp:=x3-x2; dyp:=y3-y2;
l:=dxl*dyp-dyl*dxp;
m:=dxl*dxp+dyl*dyp;
kt:=az(m,l);
kat:=kt;
{
writeln('xl=',x1:12:3,' yl=',y1:12:3);
writeln('xc=',x2:12:3,' yc=',y2:12:3);
writeln('xp=',x3:12:3,' yp=',y3:12:3);
writeln('Kat=',kt*200/pi:12:4);
readln;
}
End;
function rad_stms(r:real):real;
var r1, st, stc, mi, mic, sek, pp:real;
begin
r1:=abs(r);
st:=r*180/pi;
stc:=trunc(st);
mi:=(st-stc)*60;
mic:=trunc(mi);
sek:=(mi-mic)*60;
pp:=stc+mic/100+sek/10000;
if r<0 then pp:=-pp;
rad_stms:=pp;
end;
function stms_rad(s:real):real;
var s1, st, stc, mi, mic, sek, pp:real;
begin
s1:=abs(s);
stc:=trunc(s1);
mi:=(s1-stc)*100;
mic:=trunc(mi);
sek:=(mi-mic)*100;
st:=stc+mic/60+sek/3600;
pp:=st*pi/180.0;
if s<0 then pp:=-pp;
stms_rad:=pp;
end;
procedure dlugosc;
var jest: boolean;
p,k: longint;
xp,yp, xk, yk, d, azym, azs: real;
begin
clrscr;
highvideo;
writeln('Obliczenie dlugosci ze wspolrzednych ');
writeln;
normvideo;
writeln(fw,'
OBLICZENIE AZYMUTOW I DLUGOSCI');
writeln(fw);
writeln(fw,'
NrP
NrK
Azymut
Azymut Dlugosc');
writeln(fw,'
g c cc ř
''
"
');
writeln(fw);
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl. dlugosci: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d:=sqrt(sqr(xk-xp)+sqr(yk-yp));
azym:=az((xk-xp),(yk-yp));
azs:=rad_stms(azym);
writeln('Dlugosc boku ',p,' - ',k,' = ',d:12:3);
writeln('Azymut boku ',p,' - ',k,' w [grad] = ',azym*200/pi:12:5);
writeln('Azymut boku ',p,' - ',k,' w [St.MiSe] = ',rad_stms(azym):12:5);
writeln(fw,p:11,k:12,azym*200/pi:12:5,rad_stms(azym):12:5,d:12:3);
writeln;
end;
until p=0;
for i:=1 to 3 do writeln(fw);
end;
function est(pp:word): boolean;
begin
i:=0;
est:=false;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
est:=true;
writeln(#7, 'Punkt ', pp,'juz jest! ');
exit;
end;
end;
end;
procedure wsp_dom;
var jest: boolean;
p,k, pw: longint;
xp,yp, xk, yk, d0, d, dp,h, s, c, xw,yw : real;
begin
clrscr;
highvideo;
writeln('Obliczenie wspolrz. z domiarow prostok. ');
writeln;
normvideo;
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl.: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d0:=sqrt(sqr(xk-xp)+sqr(yk-yp));
writeln('Dlugosc boku ',p,' - ',k,' = ',d0:12:3);
write('Dlugosc pomierzona boku ');
repeat
read_r(dp);
until dp>0;
s:=(yk-yp)/dp; c:=(xk-yp)/dp;
writeln(fw,' OBLICZENIE
WSPOLRZEDNYCH Z DOMIAROW PROSTOKATNYCH');
writeln(fw);
writeln(fw);
writeln(fw,' Dpom=',dp:7:q,' Dobl=', d0:8:q);
writeln(fw);
writeln(fw,'
Nr
D
H
X
Y ');
writeln(fw,p:9,'
',xp:14:q,yp:13:q);
{$N+}
Program poblgeo; {podst. obl. geod - poblgeo.pas}
{ (C) K. R.}
{Czesc deklarac}
Uses CRT,DOS;
const m=100; {max ilosc wspolrz}
plikwyn='wyniki.txt';
type str20=string[20];
const k='1';
var a,b,c : real;
i : integer;
n1: integer; {ilosc obl.podatku}
ch : char; {dowolny znak}
nzmc: str20;
rok,mc,dz,dzt: word; {rok,m_c,dzien,dzien_tyg}
np: word; {ilosc pkt}
tnr: array[1..m] of longint; {tablica nrow oktow}
txy: array[1..m,1..2] of real; {tablica wspolrz}
fw, f1, f2 : text;
q: integer;
grad: boolean;
zbxy1, zbxy2: string;
Procedure mies(nr:word; var naz_mies:str20);
begin
case nr of
1: naz_mies:='styczen';
2: naz_mies:='luty';
3: naz_mies:='marzec';
3: naz_mies:='kwiecien';
5: naz_mies:='czerwiec';
6: naz_mies:='lipiec';
7: naz_mies:='sierpien';
8: naz_mies:='lipiec';
9: naz_mies:='wrzesien';
10: naz_mies:='pazdziernik';
11: naz_mies:='listopad';
12: naz_mies:='grudzien';
end;
end;
procedure read_l(var ll: longint);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ll);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_i(var ii: integer);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ii);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r(var rr: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(rr);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r2(var r1, r2: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(r1, r2);
io:=IOresult;
until io=0;
{$I+}
end;
procedure nacisnij;
begin
writeln;
writeln;
writeln('Nacisnij dowolny znak');
repeat until Keypressed;
clrscr;
end;
procedure data;
begin
mies(mc,nzmc);
writeln('
Data: ',dz,' ',nzmc,' ',rok);
writeln;
end;
Procedure Czysc_ekran;
var ch: char;
begin {Czysc_ekran}
writeln('Czy kasowac ekran? T,t,Y,y -tak, N,n -nie ');
repeat read(ch) until ch in['t','T','y','Y','N','n'];
ch:=Upcase(ch);
if (ch in ['T','Y']) then
begin
clrscr;
data;
writeln;
end
else writeln;
end; {function}
Function gr_rad(gr:real):real;
begin
gr_rad:=gr*pi/200.0;
end;
procedure enter;
begin
writeln;
write('Nacisnij ENTER ');
readln;
end;
procedure koniec;
begin
clrscr;
writeln(fw);
writeln(fw,'Obliczyl
.......................
Sprawdzil ............');
writeln(fw,#12);
close(fw);
writeln('Koniec obliczen');
{nacisnij;}
end;
Procedure wczytwsp;
var
zbxy : string;
nr: longint;
x,y: real;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do wczytania: ');
readln(zbxy1);
assign(f1,zbxy1);
reset(f1);
i:=0;
while not eof(f1) do
begin
inc(np);
i:=np;
readln(f1,tnr[np],txy[np,1],txy[np,2]);
writeln(i:5,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
end; {eof}
close(f1);
writeln;
readln;
clrscr;
End;
function is(pp:longint; var x,y: real): boolean;
var nie_ma: boolean;
begin
i:=0;
x:=1e35; y:=1e35;
is:=false;
nie_ma:=true;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
x:=txy[i,1]; y:=txy[i,2];
is:=true;
nie_ma:=false;
{writeln(pp,' ',x:12:3,' ',y:12:3);}
exit;
end;
end;
end;
procedure podaj_xy(nrpkt: longint; var x,y: real);
begin
inc(np);
writeln;
write('Podaj: X Y pktu ',nrpkt,' (oddziel. spacja) ');
read_r2(x, y);
tnr[np]:=nrpkt;
txy[np,1]:=x; txy[np,2]:=y;
writeln;
end;
Function az(dx,dy:real):real; {w radianach}
var a: real;
begin
if dx=0 then
begin
if dy>0 then a:=pi/2 else a:=1.5*pi;
end
else
begin
a:=arctan(dy/dx);
if dx<0 then a:=a+pi;
if (dx>0) and (dy<0) then a:=a+2*pi;
end;
az:=a;
end;
Function kat(n1,n2,n3:longint):real; {L, C, P}
var x1,y1,x2,y2,x3,y3,dxl,dyl,dxp,dyp,kt,l,m: real;
jest: boolean;
Begin
jest:=false;
jest:=is(n1,x1,y1);
if not jest then podaj_xy(n1,x1,y1);
jest:=false;
jest:=is(n2,x2,y2);
if not jest then podaj_xy(n2,x2,y2);
jest:=false;
jest:=is(n3,x3,y3);
if not jest then podaj_xy(n3,x3,y3);
dxl:=x1-x2; dyl:=y1-y2;
dxp:=x3-x2; dyp:=y3-y2;
l:=dxl*dyp-dyl*dxp;
m:=dxl*dxp+dyl*dyp;
kt:=az(m,l);
kat:=kt;
{
writeln('xl=',x1:12:3,' yl=',y1:12:3);
writeln('xc=',x2:12:3,' yc=',y2:12:3);
writeln('xp=',x3:12:3,' yp=',y3:12:3);
writeln('Kat=',kt*200/pi:12:4);
readln;
}
End;
function rad_stms(r:real):real;
var r1, st, stc, mi, mic, sek, pp:real;
begin
r1:=abs(r);
st:=r*180/pi;
stc:=trunc(st);
mi:=(st-stc)*60;
mic:=trunc(mi);
sek:=(mi-mic)*60;
pp:=stc+mic/100+sek/10000;
if r<0 then pp:=-pp;
rad_stms:=pp;
end;
function stms_rad(s:real):real;
var s1, st, stc, mi, mic, sek, pp:real;
begin
s1:=abs(s);
stc:=trunc(s1);
mi:=(s1-stc)*100;
mic:=trunc(mi);
sek:=(mi-mic)*100;
st:=stc+mic/60+sek/3600;
pp:=st*pi/180.0;
if s<0 then pp:=-pp;
stms_rad:=pp;
end;
procedure dlugosc;
var jest: boolean;
p,k: longint;
xp,yp, xk, yk, d, azym, azs: real;
begin
clrscr;
highvideo;
writeln('Obliczenie dlugosci ze wspolrzednych ');
writeln;
normvideo;
writeln(fw,'
OBLICZENIE AZYMUTOW I DLUGOSCI');
writeln(fw);
writeln(fw,'
NrP
NrK
Azymut
Azymut Dlugosc');
writeln(fw,'
g c cc ř
''
"
');
writeln(fw);
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl. dlugosci: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d:=sqrt(sqr(xk-xp)+sqr(yk-yp));
azym:=az((xk-xp),(yk-yp));
azs:=rad_stms(azym);
writeln('Dlugosc boku ',p,' - ',k,' = ',d:12:3);
writeln('Azymut boku ',p,' - ',k,' w [grad] = ',azym*200/pi:12:5);
writeln('Azymut boku ',p,' - ',k,' w [St.MiSe] = ',rad_stms(azym):12:5);
writeln(fw,p:11,k:12,azym*200/pi:12:5,rad_stms(azym):12:5,d:12:3);
writeln;
end;
until p=0;
for i:=1 to 3 do writeln(fw);
end;
function est(pp:word): boolean;
begin
i:=0;
est:=false;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
est:=true;
writeln(#7, 'Punkt ', pp,'juz jest! ');
exit;
end;
end;
end;
procedure wsp_dom;
var jest: boolean;
p,k, pw: longint;
xp,yp, xk, yk, d0, d, dp,h, s, c, xw,yw : real;
begin
clrscr;
highvideo;
writeln('Obliczenie wspolrz. z domiarow prostok. ');
writeln;
normvideo;
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl.: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d0:=sqrt(sqr(xk-xp)+sqr(yk-yp));
writeln('Dlugosc boku ',p,' - ',k,' = ',d0:12:3);
write('Dlugosc pomierzona boku ');
repeat
read_r(dp);
until dp>0;
s:=(yk-yp)/dp; c:=(xk-yp)/dp;
writeln(fw,' OBLICZENIE
WSPOLRZEDNYCH Z DOMIAROW PROSTOKATNYCH');
writeln(fw);
writeln(fw);
writeln(fw,' Dpom=',dp:7:q,' Dobl=', d0:8:q);
writeln(fw);
writeln(fw,'
Nr
D
H
X
Y ');
writeln(fw,p:9,'
',xp:14:q,yp:13:q);
pw:=1;
while pw<>0 do
begin
writeln('Pkt wyznaczany (0-koniec dla danej linii) ');
repeat
read_l(pw);
jest:=est(pw);
until not jest;
if pw<>0 then
begin
write('Odcieta i rzedna: ');
read_r2(d,h);
xw:=xp+d*c-h*s;
yw:=yp+d*s+h*c;
inc(np);
tnr[np]:=pw;
txy[np,1]:=xw;
txy[np,2]:=yw;
writeln('Pkt ',pw,' X= ',xw:14:3,' Y= ',yw:14:3);
writeln(fw,pw:9,d:10:q, h:9:q, xw:13:q,yw:13:q);
end;
end;
writeln(fw,k:9,'
',xk:14:q,yk:13:q);
for i:=1 to 3 do writeln(fw);
nacisnij;
end;
until p=0;
end;
Procedure wckatwp;
var jest: boolean;
nr1,nr2, nr: longint;
x1,y1, x2, y2, xc,yc, ka, kb, kcr : real;
wsk: char;
Procedure wcwp(gra: boolean; ka,kb:real; var xc, yc: real); {wciecie w prz}
var a,b,ca,cb: real;
begin
if gra=true then
begin
{writeln('Grady ');}
a:=gr_rad(ka); b:=gr_rad(kb);
end
else
begin
{ writeln('stopnie');}
a:=stms_rad(ka); b:=stms_rad(kb);
end;
{
writeln('ka=',ka:10:6,' kb=',kb:10:6);
writeln('ka_rad=',a:10:6,' kb_rad=',b:10:6);}
ca:=cos(a)/sin(a); cb:=cos(b)/sin(b); {cotg}
{
writeln('ctg a =',ca:10:6,' ctg b=',cb:10:6);
readln;
}
xc:=(x1*cb+y1+x2*ca-y2)/(cb+ca);
yc:=(-x1+y1*cb+x2+y2*ca)/(cb+ca);
end;
Begin {wckatwp}
Repeat
clrscr;
highvideo;
writeln('Obliczenie wciecia katowego w przod. ');
writeln;{$N+}
Program poblgeo; {podst. obl. geod - poblgeo.pas}
{ (C) K. R.}
{Czesc deklarac}
Uses CRT,DOS;
const m=100; {max ilosc wspolrz}
plikwyn='wyniki.txt';
type str20=string[20];
const k='1';
var a,b,c : real;
i : integer;
n1: integer; {ilosc obl.podatku}
ch : char; {dowolny znak}
nzmc: str20;
rok,mc,dz,dzt: word; {rok,m_c,dzien,dzien_tyg}
np: word; {ilosc pkt}
tnr: array[1..m] of longint; {tablica nrow oktow}
txy: array[1..m,1..2] of real; {tablica wspolrz}
fw, f1, f2 : text;
q: integer;
grad: boolean;
zbxy1, zbxy2: string;
Procedure mies(nr:word; var naz_mies:str20);
begin
case nr of
1: naz_mies:='styczen';
2: naz_mies:='luty';
3: naz_mies:='marzec';
3: naz_mies:='kwiecien';
5: naz_mies:='czerwiec';
6: naz_mies:='lipiec';
7: naz_mies:='sierpien';
8: naz_mies:='lipiec';
9: naz_mies:='wrzesien';
10: naz_mies:='pazdziernik';
11: naz_mies:='listopad';
12: naz_mies:='grudzien';
end;
end;
procedure read_l(var ll: longint);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ll);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_i(var ii: integer);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(ii);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r(var rr: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(rr);
io:=IOresult;
until io=0;
{$I+}
end;
procedure read_r2(var r1, r2: real);
var io:integer;
xx, yy: integer;
begin
{$I-}
xx:=whereX;
yy:=whereY;
repeat
gotoxy(xx,yy);
clreol;
read(r1, r2);
io:=IOresult;
until io=0;
{$I+}
end;
procedure nacisnij;
begin
writeln;
writeln;
writeln('Nacisnij dowolny znak');
repeat until Keypressed;
clrscr;
end;
procedure data;
begin
mies(mc,nzmc);
writeln('
Data: ',dz,' ',nzmc,' ',rok);
writeln;
end;
Procedure Czysc_ekran;
var ch: char;
begin {Czysc_ekran}
writeln('Czy kasowac ekran? T,t,Y,y -tak, N,n -nie ');
repeat read(ch) until ch in['t','T','y','Y','N','n'];
ch:=Upcase(ch);
if (ch in ['T','Y']) then
begin
clrscr;
data;
writeln;
end
else writeln;
end; {function}
Function gr_rad(gr:real):real;
begin
gr_rad:=gr*pi/200.0;
end;
procedure enter;
begin
writeln;
write('Nacisnij ENTER ');
readln;
end;
procedure koniec;
begin
clrscr;
writeln(fw);
writeln(fw,'Obliczyl
.......................
Sprawdzil ............');
writeln(fw,#12);
close(fw);
writeln('Koniec obliczen');
{nacisnij;}
end;
Procedure wczytwsp;
var
zbxy : string;
nr: longint;
x,y: real;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do wczytania: ');
readln(zbxy1);
assign(f1,zbxy1);
reset(f1);
i:=0;
while not eof(f1) do
begin
inc(np);
i:=np;
readln(f1,tnr[np],txy[np,1],txy[np,2]);
writeln(i:5,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
end; {eof}
close(f1);
writeln;
readln;
clrscr;
End;
function is(pp:longint; var x,y: real): boolean;
var nie_ma: boolean;
begin
i:=0;
x:=1e35; y:=1e35;
is:=false;
nie_ma:=true;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
x:=txy[i,1]; y:=txy[i,2];
is:=true;
nie_ma:=false;
{writeln(pp,' ',x:12:3,' ',y:12:3);}
exit;
end;
end;
end;
procedure podaj_xy(nrpkt: longint; var x,y: real);
begin
inc(np);
writeln;
write('Podaj: X Y pktu ',nrpkt,' (oddziel. spacja) ');
read_r2(x, y);
tnr[np]:=nrpkt;
txy[np,1]:=x; txy[np,2]:=y;
writeln;
end;
Function az(dx,dy:real):real; {w radianach}
var a: real;
begin
if dx=0 then
begin
if dy>0 then a:=pi/2 else a:=1.5*pi;
end
else
begin
a:=arctan(dy/dx);
if dx<0 then a:=a+pi;
if (dx>0) and (dy<0) then a:=a+2*pi;
end;
az:=a;
end;
Function kat(n1,n2,n3:longint):real; {L, C, P}
var x1,y1,x2,y2,x3,y3,dxl,dyl,dxp,dyp,kt,l,m: real;
jest: boolean;
Begin
jest:=false;
jest:=is(n1,x1,y1);
if not jest then podaj_xy(n1,x1,y1);
jest:=false;
jest:=is(n2,x2,y2);
if not jest then podaj_xy(n2,x2,y2);
jest:=false;
jest:=is(n3,x3,y3);
if not jest then podaj_xy(n3,x3,y3);
dxl:=x1-x2; dyl:=y1-y2;
dxp:=x3-x2; dyp:=y3-y2;
l:=dxl*dyp-dyl*dxp;
m:=dxl*dxp+dyl*dyp;
kt:=az(m,l);
kat:=kt;
{
writeln('xl=',x1:12:3,' yl=',y1:12:3);
writeln('xc=',x2:12:3,' yc=',y2:12:3);
writeln('xp=',x3:12:3,' yp=',y3:12:3);
writeln('Kat=',kt*200/pi:12:4);
readln;
}
End;
function rad_stms(r:real):real;
var r1, st, stc, mi, mic, sek, pp:real;
begin
r1:=abs(r);
st:=r*180/pi;
stc:=trunc(st);
mi:=(st-stc)*60;
mic:=trunc(mi);
sek:=(mi-mic)*60;
pp:=stc+mic/100+sek/10000;
if r<0 then pp:=-pp;
rad_stms:=pp;
end;
function stms_rad(s:real):real;
var s1, st, stc, mi, mic, sek, pp:real;
begin
s1:=abs(s);
stc:=trunc(s1);
mi:=(s1-stc)*100;
mic:=trunc(mi);
sek:=(mi-mic)*100;
st:=stc+mic/60+sek/3600;
pp:=st*pi/180.0;
if s<0 then pp:=-pp;
stms_rad:=pp;
end;
procedure dlugosc;
var jest: boolean;
p,k: longint;
xp,yp, xk, yk, d, azym, azs: real;
begin
clrscr;
highvideo;
writeln('Obliczenie dlugosci ze wspolrzednych ');
writeln;
normvideo;
writeln(fw,'
OBLICZENIE AZYMUTOW I DLUGOSCI');
writeln(fw);
writeln(fw,'
NrP
NrK
Azymut
Azymut Dlugosc');
writeln(fw,'
g c cc ř
''
"
');
writeln(fw);
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl. dlugosci: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d:=sqrt(sqr(xk-xp)+sqr(yk-yp));
azym:=az((xk-xp),(yk-yp));
azs:=rad_stms(azym);
writeln('Dlugosc boku ',p,' - ',k,' = ',d:12:3);
writeln('Azymut boku ',p,' - ',k,' w [grad] = ',azym*200/pi:12:5);
writeln('Azymut boku ',p,' - ',k,' w [St.MiSe] = ',rad_stms(azym):12:5);
writeln(fw,p:11,k:12,azym*200/pi:12:5,rad_stms(azym):12:5,d:12:3);
writeln;
end;
until p=0;
for i:=1 to 3 do writeln(fw);
end;
function est(pp:word): boolean;
begin
i:=0;
est:=false;
while (i < np) do
begin
i:=i+1;
if pp=tnr[i] then
begin
est:=true;
writeln(#7, 'Punkt ', pp,'juz jest! ');
exit;
end;
end;
end;
procedure wsp_dom;
var jest: boolean;
p,k, pw: longint;
xp,yp, xk, yk, d0, d, dp,h, s, c, xw,yw : real;
begin
clrscr;
highvideo;
writeln('Obliczenie wspolrz. z domiarow prostok. ');
writeln;
normvideo;
repeat
write('Podaj nr pktu P, lub 0 gdy koniec obl.: ');
read_l(p);
if p<>0 then
begin
jest:=false;
jest:=is(p,xp,yp);
if not jest then podaj_xy(p,xp,yp);
write('Podaj nr pktu K ');
read_l(k);
jest:=false;
jest:=is(k,xk,yk);
if not jest then podaj_xy(k,xk,yk);
d0:=sqrt(sqr(xk-xp)+sqr(yk-yp));
writeln('Dlugosc boku ',p,' - ',k,' = ',d0:12:3);
write('Dlugosc pomierzona boku ');
repeat
read_r(dp);
until dp>0;
s:=(yk-yp)/dp; c:=(xk-yp)/dp;
writeln(fw,' OBLICZENIE
WSPOLRZEDNYCH Z DOMIAROW PROSTOKATNYCH');
writeln(fw);
writeln(fw);
writeln(fw,' Dpom=',dp:7:q,' Dobl=', d0:8:q);
writeln(fw);
writeln(fw,'
Nr
D
H
X
Y ');
writeln(fw,p:9,'
',xp:14:q,yp:13:q);
pw:=1;
while pw<>0 do
begin
writeln('Pkt wyznaczany (0-koniec dla danej linii) ');
repeat
read_l(pw);
jest:=est(pw);
until not jest;
if pw<>0 then
begin
write('Odcieta i rzedna: ');
read_r2(d,h);
xw:=xp+d*c-h*s;
yw:=yp+d*s+h*c;
inc(np);
tnr[np]:=pw;
txy[np,1]:=xw;
txy[np,2]:=yw;
writeln('Pkt ',pw,' X= ',xw:14:3,' Y= ',yw:14:3);
writeln(fw,pw:9,d:10:q, h:9:q, xw:13:q,yw:13:q);
end;
end;
writeln(fw,k:9,'
',xk:14:q,yk:13:q);
for i:=1 to 3 do writeln(fw);
nacisnij;
end;
until p=0;
end;
Procedure wckatwp;
var jest: boolean;
nr1,nr2, nr: longint;
x1,y1, x2, y2, xc,yc, ka, kb, kcr : real;
wsk: char;
Procedure wcwp(gra: boolean; ka,kb:real; var xc, yc: real); {wciecie w prz}
var a,b,ca,cb: real;
begin
if gra=true then
begin
{writeln('Grady ');}
a:=gr_rad(ka); b:=gr_rad(kb);
end
else
begin
{ writeln('stopnie');}
a:=stms_rad(ka); b:=stms_rad(kb);
end;
{
writeln('ka=',ka:10:6,' kb=',kb:10:6);
writeln('ka_rad=',a:10:6,' kb_rad=',b:10:6);}
ca:=cos(a)/sin(a); cb:=cos(b)/sin(b); {cotg}
{
writeln('ctg a =',ca:10:6,' ctg b=',cb:10:6);
readln;
}
xc:=(x1*cb+y1+x2*ca-y2)/(cb+ca);
yc:=(-x1+y1*cb+x2+y2*ca)/(cb+ca);
end;
Begin {wckatwp}
Repeat
clrscr;
highvideo;
writeln('Obliczenie wciecia katowego w przod. ');
writeln;
normvideo;
write('Podaj nr pktu prawego A, lub 0 gdy koniec obl.: ');
read_l(nr1);
if nr1<>0 then
begin {if nr1<>0}
write('1-katy w grad, 2 - w st.MiSe ');
wsk:='0';
repeat
read(wsk);
until wsk in ['1', '2'];
writeln;
if wsk='1' then grad:=true else if wsk='2' then grad:=false;
writeln(fw,'
WCIECIE KATOWE W PRZOD');
writeln(fw);
writeln(fw);
writeln(fw,'
Nr
Alfa
Beta
X
Y Gamma');
if grad then
writeln(fw,'
[grad]
[grad]
[grad]')
else
writeln(fw,'
[St.MiSe]
[St.MiSe]
[St.MiSek]');
writeln(fw);
jest:=is(nr1,x1,y1);
if not jest then podaj_xy(nr1,x1,y1);
write('Podaj nr pktu lewego B ');
read_l(nr2);
jest:=false;
jest:=is(nr2,x2,y2);
if not jest then podaj_xy(nr2,x2,y2);
writeln(fw,' Punkty nawiazania: A, B');
writeln(fw,nr1:9,x1:40:q,y1:13:q);
writeln(fw,nr2:9,x2:40:q,y2:13:q);
writeln(fw);
writeln(fw,' Punkty wyznaczone wcieciem w przod: ');
nr:=1;
while nr <> 0 do
begin {while}
repeat
write('Pkt wyznacz. lub 0 gdy koniec wciec z bazy ',nr1,' - ',nr2,' : ');
jest:=false;
read_l(nr);
jest:=est(nr);
until not jest;
if nr<>0 then
begin
write('Podaj katy oddzielone kropka dzies. ');
if grad then writeln('w gradach: ') else
writeln('w stopniach, po kropce minuty i sek: ');
write('Kat prawy Alfa (na pkcie A) : ');
read_r(ka);
write('Kat lewy Beta (na pkcie B) : ');
read_r(kb);
wcwp(grad,ka,kb,xc,yc);
inc(np);
tnr[np]:=nr;
txy[np,1]:=xc;
txy[np,2]:=yc;
writeln;
writeln('Pkt wciety w przod: ',nr,': X= ',xc:14:3,' Y= ',yc:14:3);
kcr:=kat(nr1,nr,nr2);
writeln('Kat na pkcie wcietym = ',kcr*200/pi:9:4, ' [grad] = ',
rad_stms(kcr):9:4,' [St.MiSek]');
writeln;
write(fw,nr:9, ka:12:4,kb:15:4,xc:13:q,yc:12:q);
if grad then
writeln(fw,kcr*200/pi:11:4)
else writeln(fw,rad_stms(kcr):11:4);
writeln;
end;
end; {while}
end; {nr1<>0}
until nr1=0;
for i:=1 to 2 do writeln(fw);
writeln(fw,' Schemat wciecia
w przod: C');
writeln(fw,' Pomierzone:
Alfa, Beta
Gamma ');
writeln(fw);
writeln(fw,'
Beta Alfa ');
writeln(fw,'
B----------A');
for i:=1 to 3 do writeln(fw);
end;
Procedure PoleP; {pole pow}
var Pol, x1, y1, x2, y2, ax, ay,bx,by, xp, yp, xk, yk, dx, dy, d: real;
xpp, ypp: real;
jest: boolean;
p,pn,pp: longint;
j: integer;
Begin
clrscr;
highvideo;
writeln('Obliczenie pola powierzchni ze wspolrz' );
writeln;
normvideo;
Pol:=0;
writeln(fw);
writeln(fw,' OBLICZENIE POLA ZE WSPOLRZEDNYCH');
writeln(fw);
writeln(fw,' Lp
Nr(i)
X(i)
Y(i) D(i)-(i+1) ');
writeln(fw);
writeln('Podaj nr punktu pierwszego ');
j:=1;
read_l(pp);
jest:=false;
jest:=is(pp,xp,yp);
if not jest then podaj_xy(pp,xpp,ypp);
pn:=0;
x1:=xpp; y1:=ypp;
p:=pp;
writeln(fw,j:3,pp:10, xpp:16:q, ypp:16:q);
repeat
writeln('Podawaj kolejno nry pktow na obwodzie, powtorz pierwszy ');
read_l(pn);
j:=j+1;
jest:=false;
jest:=is(pn,xk,yk);
if not jest then podaj_xy(pn,xk,yk);
x2:=xk; y2:=yk;
ax:=x1-xpp; ay:=y1-ypp;
bx:=x2-xpp; by:=y2-ypp;
writeln('ax=',ax:10:3,' ay=',ay:10:3);
writeln('bx=',bx:10:3,' by=',by:10:3);
pol:=pol+0.5*(ax*by-ay*bx);
dx:=x2-x1; dy:=y2-y1;
d:=sqrt(dx*dx+dy*dy);
writeln('Dlug. ',p,'-',pn,'=',d:10:3);
writeln('Pole = ',pol:12:2);
x1:=x2; y1:=y2; p:=pn;
xp:=xk; yp:=yk;
writeln(fw,j:3,pn:10, x2:16:q, y2:16:q,d:15:q);
until pn=pp;
writeln(fw);
writeln(fw,' Ilosc punktow = ',j,' Pole powierzchni = ',pol:10:1,' [m^2]');
for i:=1 to 2 do writeln(fw);
writeln('Pole = ',pol:10:2);
nacisnij;
end;
Procedure wydrukwsp;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do zapisu : ');
readln(zbxy2);
assign(f1,zbxy2);
rewrite(f1);
for i:=1 to np do
writeln(f1,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
clrscr;
close(f1);
End;
Procedure menu;
Begin
for i:=1 to m do
begin
tnr[i]:=0; txy[i,1]:=0; txy[i,2]:=0;
end;
GetDate(rok,mc,dz,dzt);
clrscr;
data;
np:=0;
assign(fw,plikwyn);
rewrite(fw);
mies(mc,nzmc);
writeln(fw,'
Data: ',dz,' ',nzmc,' ',rok);
writeln(fw);
writeln(fw,' Podstawowe obliczenia geodezyjne ');
writeln(fw,' Program POblGEO.Pas rel. 1.0');
writeln(fw,' (C) K. R. ');
writeln(fw);
writeln(fw);
NormVideo;
highvideo;
textcolor(LightCyan);
writeln;
gotoxy(2,5);
writeln(' Podstawowe obliczenia geodezyjne (C) K. R.');
writeln(' Program POblGEO.Pas rel 1.0 January 1995');
gotoxy(2,8);
normvideo;
writeln('Wyniki w pliku "Wyniki.txt" ');
gotoxy(2,15);
write('Dokladnosc wydruku po przecinku : 2 lub 3 : ');
read_i(q);
q:=3;
repeat;
clrscr;
TextColor(Yellow);
highvideo;
writeln(' MENU PROGRAMU');
normvideo;
writeln;
writeln('0 - Koniec obliczen');
writeln('1 - Obliczenie azymutu i dlugosci ze wspolrz');
writeln('2 - Obliczenie wspolrz punktu na domiarze prostok');
writeln('3 - Obliczenie pola powierzchni ze wspolrzednych');
writeln('4 - Obliczenie wciecia katowego w przod');
writeln('5 - Wczytanie wspolrzedn. z pliku');
writeln('6 - Wydruk wspolrzedn. do pliku');
gotoxy(10,18);
lowvideo;
textcolor(Lightred);
write('Wybierz czynnosc 0..6: ====> ');
normvideo;
repeat read(ch) until ch in ['0'..'9'];
ch:=Upcase(ch);
writeln('ch=',ch); readln;
case ch of
'0' : koniec;
'1' : dlugosc;
'2' : wsp_dom;
'3' : polep;
'4' : wckatwp;
'5' : wczytwsp;
'6' : wydrukwsp;
end;
until ch='0';
end;
Begin {poczatek programu glownego}
menu;
end. {koniec programu}
normvideo;
write('Podaj nr pktu prawego A, lub 0 gdy koniec obl.: ');
read_l(nr1);
if nr1<>0 then
begin {if nr1<>0}
write('1-katy w grad, 2 - w st.MiSe ');
wsk:='0';
repeat
read(wsk);
until wsk in ['1', '2'];
writeln;
if wsk='1' then grad:=true else if wsk='2' then grad:=false;
writeln(fw,'
WCIECIE KATOWE W PRZOD');
writeln(fw);
writeln(fw);
writeln(fw,'
Nr
Alfa
Beta
X
Y Gamma');
if grad then
writeln(fw,'
[grad]
[grad]
[grad]')
else
writeln(fw,'
[St.MiSe]
[St.MiSe]
[St.MiSek]');
writeln(fw);
jest:=is(nr1,x1,y1);
if not jest then podaj_xy(nr1,x1,y1);
write('Podaj nr pktu lewego B ');
read_l(nr2);
jest:=false;
jest:=is(nr2,x2,y2);
if not jest then podaj_xy(nr2,x2,y2);
writeln(fw,' Punkty nawiazania: A, B');
writeln(fw,nr1:9,x1:40:q,y1:13:q);
writeln(fw,nr2:9,x2:40:q,y2:13:q);
writeln(fw);
writeln(fw,' Punkty wyznaczone wcieciem w przod: ');
nr:=1;
while nr <> 0 do
begin {while}
repeat
write('Pkt wyznacz. lub 0 gdy koniec wciec z bazy ',nr1,' - ',nr2,' : ');
jest:=false;
read_l(nr);
jest:=est(nr);
until not jest;
if nr<>0 then
begin
write('Podaj katy oddzielone kropka dzies. ');
if grad then writeln('w gradach: ') else
writeln('w stopniach, po kropce minuty i sek: ');
write('Kat prawy Alfa (na pkcie A) : ');
read_r(ka);
write('Kat lewy Beta (na pkcie B) : ');
read_r(kb);
wcwp(grad,ka,kb,xc,yc);
inc(np);
tnr[np]:=nr;
txy[np,1]:=xc;
txy[np,2]:=yc;
writeln;
writeln('Pkt wciety w przod: ',nr,': X= ',xc:14:3,' Y= ',yc:14:3);
kcr:=kat(nr1,nr,nr2);
writeln('Kat na pkcie wcietym = ',kcr*200/pi:9:4, ' [grad] = ',
rad_stms(kcr):9:4,' [St.MiSek]');
writeln;
write(fw,nr:9, ka:12:4,kb:15:4,xc:13:q,yc:12:q);
if grad then
writeln(fw,kcr*200/pi:11:4)
else writeln(fw,rad_stms(kcr):11:4);
writeln;
end;
end; {while}
end; {nr1<>0}
until nr1=0;
for i:=1 to 2 do writeln(fw);
writeln(fw,' Schemat wciecia
w przod: C');
writeln(fw,' Pomierzone:
Alfa, Beta
Gamma ');
writeln(fw);
writeln(fw,'
Beta Alfa ');
writeln(fw,'
B----------A');
for i:=1 to 3 do writeln(fw);
end;
Procedure PoleP; {pole pow}
var Pol, x1, y1, x2, y2, ax, ay,bx,by, xp, yp, xk, yk, dx, dy, d: real;
xpp, ypp: real;
jest: boolean;
p,pn,pp: longint;
j: integer;
Begin
clrscr;
highvideo;
writeln('Obliczenie pola powierzchni ze wspolrz' );
writeln;
normvideo;
Pol:=0;
writeln(fw);
writeln(fw,' OBLICZENIE POLA ZE WSPOLRZEDNYCH');
writeln(fw);
writeln(fw,' Lp
Nr(i)
X(i)
Y(i) D(i)-(i+1) ');
writeln(fw);
writeln('Podaj nr punktu pierwszego ');
j:=1;
read_l(pp);
jest:=false;
jest:=is(pp,xp,yp);
if not jest then podaj_xy(pp,xpp,ypp);
pn:=0;
x1:=xpp; y1:=ypp;
p:=pp;
writeln(fw,j:3,pp:10, xpp:16:q, ypp:16:q);
repeat
writeln('Podawaj kolejno nry pktow na obwodzie, powtorz pierwszy ');
read_l(pn);
j:=j+1;
jest:=false;
jest:=is(pn,xk,yk);
if not jest then podaj_xy(pn,xk,yk);
x2:=xk; y2:=yk;
ax:=x1-xpp; ay:=y1-ypp;
bx:=x2-xpp; by:=y2-ypp;
writeln('ax=',ax:10:3,' ay=',ay:10:3);
writeln('bx=',bx:10:3,' by=',by:10:3);
pol:=pol+0.5*(ax*by-ay*bx);
dx:=x2-x1; dy:=y2-y1;
d:=sqrt(dx*dx+dy*dy);
writeln('Dlug. ',p,'-',pn,'=',d:10:3);
writeln('Pole = ',pol:12:2);
x1:=x2; y1:=y2; p:=pn;
xp:=xk; yp:=yk;
writeln(fw,j:3,pn:10, x2:16:q, y2:16:q,d:15:q);
until pn=pp;
writeln(fw);
writeln(fw,' Ilosc punktow = ',j,' Pole powierzchni = ',pol:10:1,' [m^2]');
for i:=1 to 2 do writeln(fw);
writeln('Pole = ',pol:10:2);
nacisnij;
end;
Procedure wydrukwsp;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do zapisu : ');
readln(zbxy2);
assign(f1,zbxy2);
rewrite(f1);
for i:=1 to np do
writeln(f1,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
clrscr;
close(f1);
End;
Procedure menu;
Begin
for i:=1 to m do
begin
tnr[i]:=0; txy[i,1]:=0; txy[i,2]:=0;
end;
GetDate(rok,mc,dz,dzt);
clrscr;
data;
np:=0;
assign(fw,plikwyn);
rewrite(fw);
mies(mc,nzmc);
writeln(fw,'
Data: ',dz,' ',nzmc,' ',rok);
writeln(fw);
writeln(fw,' Podstawowe obliczenia geodezyjne ');
writeln(fw,' Program POblGEO.Pas rel. 1.0');
writeln(fw,' (C) K. R. ');
writeln(fw);
writeln(fw);
NormVideo;
highvideo;
textcolor(LightCyan);
writeln;
gotoxy(2,5);
writeln(' Podstawowe obliczenia geodezyjne (C) K. R.');
writeln(' Program POblGEO.Pas rel 1.0 January 1995');
gotoxy(2,8);
normvideo;
writeln('Wyniki w pliku "Wyniki.txt" ');
gotoxy(2,15);
write('Dokladnosc wydruku po przecinku : 2 lub 3 : ');
read_i(q);
q:=3;
repeat;
clrscr;
TextColor(Yellow);
highvideo;
writeln(' MENU PROGRAMU');
normvideo;
writeln;
writeln('0 - Koniec obliczen');
writeln('1 - Obliczenie azymutu i dlugosci ze wspolrz');
writeln('2 - Obliczenie wspolrz punktu na domiarze prostok');
writeln('3 - Obliczenie pola powierzchni ze wspolrzednych');
writeln('4 - Obliczenie wciecia katowego w przod');
writeln('5 - Wczytanie wspolrzedn. z pliku');
writeln('6 - Wydruk wspolrzedn. do pliku');
gotoxy(10,18);
lowvideo;
textcolor(Lightred);
write('Wybierz czynnosc 0..6: ====> ');
normvideo;
repeat read(ch) until ch in ['0'..'9'];
ch:=Upcase(ch);
writeln('ch=',ch); readln;
case ch of
'0' : koniec;
'1' : dlugosc;
'2' : wsp_dom;
'3' : polep;
'4' : wckatwp;
'5' : wczytwsp;
'6' : wydrukwsp;
end;
until ch='0';
end;
Begin {poczatek programu glownego}
menu;
end. {koniec programu}
pw:=1;
while pw<>0 do
begin
writeln('Pkt wyznaczany (0-koniec dla danej linii) ');
repeat
read_l(pw);
jest:=est(pw);
until not jest;
if pw<>0 then
begin
write('Odcieta i rzedna: ');
read_r2(d,h);
xw:=xp+d*c-h*s;
yw:=yp+d*s+h*c;
inc(np);
tnr[np]:=pw;
txy[np,1]:=xw;
txy[np,2]:=yw;
writeln('Pkt ',pw,' X= ',xw:14:3,' Y= ',yw:14:3);
writeln(fw,pw:9,d:10:q, h:9:q, xw:13:q,yw:13:q);
end;
end;
writeln(fw,k:9,'
',xk:14:q,yk:13:q);
for i:=1 to 3 do writeln(fw);
nacisnij;
end;
until p=0;
end;
Procedure wckatwp;
var jest: boolean;
nr1,nr2, nr: longint;
x1,y1, x2, y2, xc,yc, ka, kb, kcr : real;
wsk: char;
Procedure wcwp(gra: boolean; ka,kb:real; var xc, yc: real); {wciecie w prz}
var a,b,ca,cb: real;
begin
if gra=true then
begin
{writeln('Grady ');}
a:=gr_rad(ka); b:=gr_rad(kb);
end
else
begin
{ writeln('stopnie');}
a:=stms_rad(ka); b:=stms_rad(kb);
end;
{
writeln('ka=',ka:10:6,' kb=',kb:10:6);
writeln('ka_rad=',a:10:6,' kb_rad=',b:10:6);}
ca:=cos(a)/sin(a); cb:=cos(b)/sin(b); {cotg}
{
writeln('ctg a =',ca:10:6,' ctg b=',cb:10:6);
readln;
}
xc:=(x1*cb+y1+x2*ca-y2)/(cb+ca);
yc:=(-x1+y1*cb+x2+y2*ca)/(cb+ca);
end;
Begin {wckatwp}
Repeat
clrscr;
highvideo;
writeln('Obliczenie wciecia katowego w przod. ');
writeln;
normvideo;
write('Podaj nr pktu prawego A, lub 0 gdy koniec obl.: ');
read_l(nr1);
if nr1<>0 then
begin {if nr1<>0}
write('1-katy w grad, 2 - w st.MiSe ');
wsk:='0';
repeat
read(wsk);
until wsk in ['1', '2'];
writeln;
if wsk='1' then grad:=true else if wsk='2' then grad:=false;
writeln(fw,'
WCIECIE KATOWE W PRZOD');
writeln(fw);
writeln(fw);
writeln(fw,'
Nr
Alfa
Beta
X
Y Gamma');
if grad then
writeln(fw,'
[grad]
[grad]
[grad]')
else
writeln(fw,'
[St.MiSe]
[St.MiSe]
[St.MiSek]');
writeln(fw);
jest:=is(nr1,x1,y1);
if not jest then podaj_xy(nr1,x1,y1);
write('Podaj nr pktu lewego B ');
read_l(nr2);
jest:=false;
jest:=is(nr2,x2,y2);
if not jest then podaj_xy(nr2,x2,y2);
writeln(fw,' Punkty nawiazania: A, B');
writeln(fw,nr1:9,x1:40:q,y1:13:q);
writeln(fw,nr2:9,x2:40:q,y2:13:q);
writeln(fw);
writeln(fw,' Punkty wyznaczone wcieciem w przod: ');
nr:=1;
while nr <> 0 do
begin {while}
repeat
write('Pkt wyznacz. lub 0 gdy koniec wciec z bazy ',nr1,' - ',nr2,' : ');
jest:=false;
read_l(nr);
jest:=est(nr);
until not jest;
if nr<>0 then
begin
write('Podaj katy oddzielone kropka dzies. ');
if grad then writeln('w gradach: ') else
writeln('w stopniach, po kropce minuty i sek: ');
write('Kat prawy Alfa (na pkcie A) : ');
read_r(ka);
write('Kat lewy Beta (na pkcie B) : ');
read_r(kb);
wcwp(grad,ka,kb,xc,yc);
inc(np);
tnr[np]:=nr;
txy[np,1]:=xc;
txy[np,2]:=yc;
writeln;
writeln('Pkt wciety w przod: ',nr,': X= ',xc:14:3,' Y= ',yc:14:3);
kcr:=kat(nr1,nr,nr2);
writeln('Kat na pkcie wcietym = ',kcr*200/pi:9:4, ' [grad] = ',
rad_stms(kcr):9:4,' [St.MiSek]');
writeln;
write(fw,nr:9, ka:12:4,kb:15:4,xc:13:q,yc:12:q);
if grad then
writeln(fw,kcr*200/pi:11:4)
else writeln(fw,rad_stms(kcr):11:4);
writeln;
end;
end; {while}
end; {nr1<>0}
until nr1=0;
for i:=1 to 2 do writeln(fw);
writeln(fw,' Schemat wciecia
w przod: C');
writeln(fw,' Pomierzone:
Alfa, Beta
Gamma ');
writeln(fw);
writeln(fw,'
Beta Alfa ');
writeln(fw,'
B----------A');
for i:=1 to 3 do writeln(fw);
end;
Procedure PoleP; {pole pow}
var Pol, x1, y1, x2, y2, ax, ay,bx,by, xp, yp, xk, yk, dx, dy, d: real;
xpp, ypp: real;
jest: boolean;
p,pn,pp: longint;
j: integer;
Begin
clrscr;
highvideo;
writeln('Obliczenie pola powierzchni ze wspolrz' );
writeln;
normvideo;
Pol:=0;
writeln(fw);
writeln(fw,' OBLICZENIE POLA ZE WSPOLRZEDNYCH');
writeln(fw);
writeln(fw,' Lp
Nr(i)
X(i)
Y(i) D(i)-(i+1) ');
writeln(fw);
writeln('Podaj nr punktu pierwszego ');
j:=1;
read_l(pp);
jest:=false;
jest:=is(pp,xp,yp);
if not jest then podaj_xy(pp,xpp,ypp);
pn:=0;
x1:=xpp; y1:=ypp;
p:=pp;
writeln(fw,j:3,pp:10, xpp:16:q, ypp:16:q);
repeat
writeln('Podawaj kolejno nry pktow na obwodzie, powtorz pierwszy ');
read_l(pn);
j:=j+1;
jest:=false;
jest:=is(pn,xk,yk);
if not jest then podaj_xy(pn,xk,yk);
x2:=xk; y2:=yk;
ax:=x1-xpp; ay:=y1-ypp;
bx:=x2-xpp; by:=y2-ypp;
writeln('ax=',ax:10:3,' ay=',ay:10:3);
writeln('bx=',bx:10:3,' by=',by:10:3);
pol:=pol+0.5*(ax*by-ay*bx);
dx:=x2-x1; dy:=y2-y1;
d:=sqrt(dx*dx+dy*dy);
writeln('Dlug. ',p,'-',pn,'=',d:10:3);
writeln('Pole = ',pol:12:2);
x1:=x2; y1:=y2; p:=pn;
xp:=xk; yp:=yk;
writeln(fw,j:3,pn:10, x2:16:q, y2:16:q,d:15:q);
until pn=pp;
writeln(fw);
writeln(fw,' Ilosc punktow = ',j,' Pole powierzchni = ',pol:10:1,' [m^2]');
for i:=1 to 2 do writeln(fw);
writeln('Pole = ',pol:10:2);
nacisnij;
end;
Procedure wydrukwsp;
Begin
clrscr;
write('Nazwa zbioru wspolrzednych do zapisu : ');
readln(zbxy2);
assign(f1,zbxy2);
rewrite(f1);
for i:=1 to np do
writeln(f1,tnr[i]:10,txy[i,1]:14:3,txy[i,2]:14:3);
clrscr;
close(f1);
End;
Procedure menu;
Begin
for i:=1 to m do
begin
tnr[i]:=0; txy[i,1]:=0; txy[i,2]:=0;
end;
GetDate(rok,mc,dz,dzt);
clrscr;
data;
np:=0;
assign(fw,plikwyn);
rewrite(fw);
mies(mc,nzmc);
writeln(fw,'
Data: ',dz,' ',nzmc,' ',rok);
writeln(fw);
writeln(fw,' Podstawowe obliczenia geodezyjne ');
writeln(fw,' Program POblGEO.Pas rel. 1.0');
writeln(fw,' (C) K. R. ');
writeln(fw);
writeln(fw);
NormVideo;
highvideo;
textcolor(LightCyan);
writeln;
gotoxy(2,5);
writeln(' Podstawowe obliczenia geodezyjne (C) K. R.');
writeln(' Program POblGEO.Pas rel 1.0 January 1995');
gotoxy(2,8);
normvideo;
writeln('Wyniki w pliku "Wyniki.txt" ');
gotoxy(2,15);
write('Dokladnosc wydruku po przecinku : 2 lub 3 : ');
read_i(q);
q:=3;
repeat;
clrscr;
TextColor(Yellow);
highvideo;
writeln(' MENU PROGRAMU');
normvideo;
writeln;
writeln('0 - Koniec obliczen');
writeln('1 - Obliczenie azymutu i dlugosci ze wspolrz');
writeln('2 - Obliczenie wspolrz punktu na domiarze prostok');
writeln('3 - Obliczenie pola powierzchni ze wspolrzednych');
writeln('4 - Obliczenie wciecia katowego w przod');
writeln('5 - Wczytanie wspolrzedn. z pliku');
writeln('6 - Wydruk wspolrzedn. do pliku');
gotoxy(10,18);
lowvideo;
textcolor(Lightred);
write('Wybierz czynnosc 0..6: ====> ');
normvideo;
repeat read(ch) until ch in ['0'..'9'];
ch:=Upcase(ch);
writeln('ch=',ch); readln;
case ch of
'0' : koniec;
'1' : dlugosc;
'2' : wsp_dom;
'3' : polep;
'4' : wckatwp;
'5' : wczytwsp;
'6' : wydrukwsp;
end;
until ch='0';
end;
Begin {poczatek programu glownego}
menu;
End. {koniec programu}
Darmowy hosting zapewnia PRV.PL