Przykłady prostych programów geodezyjnych w Basicu
1. Obliczenie azymutu ze współrzędnych
1) Metoda bez czwartaków
Wersja 1a)
' Program az1.bas
' Obliczenie azymutu ze wspolrzednych
' Podaje sie wspolrzednie 2 punktow
' x1, y1
' x2, y2
pi = 4.0 * ATN(1.0) ' Obliczenie Pi
rg = 200.0 / pi ' Ro gradowe
rs = 180.0 / pi ' Ro stopniowe
CLS
PRINT "Oblliczenie azymutu ze wspolrzednych 2 punktow: "
PRINT "Dane: x1, y1, x2, y2"
PRINT
INPUT "x1 "; x1 ' wprowadzenie danych x1 punktu 1-go
INPUT "y1 "; y1 ' wprowadzenie danych y1 punktu 1-go
INPUT "x2 "; x2 ' wprowadzenie danych x2 punktu 2-go
INPUT "y2 "; y2 ' wprowadzenie danych y2 punktu 2-go
DX = x2 - x1 ' Obl. DX
dy = y2 - y1 ' Obl. DY
PRINT
PRINT "Obliczenia i wydruki kontrolne - testowanie cwiartek wspolrzednych"
PRINT
IF DX = 0 THEN ' 1) Warunek gdy dx = 0
PRINT "poczatek dx=0" ' Wydruk
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
PRINT "Koniec dx=0"
' END IF ' 1) dx=0
ELSE ' dx <> 0
PRINT "else - poczatek dx<>0"
a = ATN(dy / DX)
IF DX < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 1 dx <>0
azg = a * rg
azs = a * rs
PRINT
PRINT "Wyniki obliczen"
PRINT "dx = "; DX
PRINT "dy="; dy
PRINT
PRINT "az [grad] = "; azg
PRINT "az [stopn] = "; azs
PRINT
INPUT "Nacisnij Enter"; a$
Wersja 1b)
' Program az.bas
' Obliczenie azymutu ze wspolrzednych
' Podaje sie wspolrzednie 2 punktow
' x1, y1
' x2, y2
pi = 4.0 * ATN(1.0) ' Obliczenie Pi
rg = 200.0 / pi ' Ro gradowe
rs = 180.0 / pi ' Ro stopniowe
CLS
PRINT "Oblliczenie azymutu ze wspolrzednych 2 punktow: "
PRINT "Dane: x1, y1, x2, y2"
PRINT
INPUT "x1 "; x1 ' wprowadzenie danych x1 punktu 1-go
INPUT "y1 "; y1 ' wprowadzenie danych y1 punktu 1-go
INPUT "x2 "; x2 ' wprowadzenie danych x2 punktu 2-go
INPUT "y2 "; y2 ' wprowadzenie danych y2 punktu 2-go
DX = x2 - x1 ' Obl. DX
dy = y2 - y1 ' Obl. DY
PRINT
PRINT "Obliczenia i wydruki kontrolne - testowanie cwiartek wspolrzednych"
PRINT
IF DX = 0 THEN ' 1) Warunek gdy dx = 0
PRINT "poczatek dx=0" ' Wydruk
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
PRINT "Koniec dx=0"
ELSE ' dx <> 0
PRINT "else - poczatek dx<>0"
a = ATN(dy / DX)
IF DX < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 1 dx <>0
azg = a * rg ' Przeliczenie azymutu z radianow na grady
azs = a * rs ' Przeliczenie azymutu z radianow na stopnie (i ulamki stopnia)
' Koniec obliczen - wydruki wynikoe
PRINT ' Wydruk pustej linii
PRINT "Wyniki obliczen"
PRINT "dx = "; DX
PRINT "dy="; dy
PRINT
PRINT "az [grad] = "; azg
PRINT "az [stopn] = "; azs
PRINT
INPUT "Nacisnij Enter"; a$ ' Oczekiwanie na nacisniecie klawisza
END ' Koniec programu
2) Obliczenie azymutu ze wspolrzednych - metoda czwartaków
'Program az2.bas
'Obliczenie azymutu ze wspolrzednych - metoda czwartaków
pi = 4.0*atn(1.0) ' Obliczenie Pi
rg=200/pi ' Ro gradowe
rs=180/pi ' Ro stopniowe
Input "x1 " ;x1 ' Wprowadzanie danych
input "y1 " ; y1
input "x2 "; x2
input "y2 "; y2
dx=x2-x1 ' Obl. DX
dy=y2-y1
print "dx=";dx
print "dy=";dy
if dx=0 then ' Warunek gdy DX=0
if dy> 0 then
az = pi/2
else
az=1.5*pi
end if
else ' Gdy DX <> 0
czw= atn(dy/dx) ' Obl. czwartaka w radianach
czw=abs(czw)
czwg=czw*rg ' Zamiana na grady
czws=czw*rs ' Zamiana na stopnie
print "pi=";pi ' Wydruk Pi
print "czwart=";czwg; "[grad] ="; czws; "[st]"
if dx>0 and dy>0 then cw=1
if dx<0 and dy>0 then cw=2
if dx<0 and dy<0 then cw=3
if dx>0 and dy<0 then cw=4
select case cw ' Wariant ćwiartki
case 1
az=czw ' ćwiartka I
print "case="; cw
case 2 ' ćwiartka II
az=pi-czw
print "case=";cw
case 3
az=pi+czw
print "case=";cw
case 4
az=2*pi-czw ' ćwiartka IV
print "case=";cw
end select
end if
azg=az*rg ' Zamina na grady
azs=az*rs ' Zamiana azymutu na stopnie dziesietne
print "dx = ";dx
print "dy="; dy
print "azg[grad]=";azg
print "azs[st] =";azs
END
Długość i azymut ze współrzednych
Wersja QBasic
DECLARE SUB czekaj (lancuch1$)
DECLARE SUB Dlugosci ()
DECLARE SUB Azymut ()
DECLARE SUB Dlfun ()
DECLARE FUNCTION dlug! (dx!, dy!)
mm$ = LEFT$(DATE$, 2): dd$ = MID$(DATE$, 4, 2): yy$ = RIGHT$(DATE$, 4)
dato$ = yy$ + "." + mm$ + "." + dd$ ' data oblicz
fk$ = "####.####"
koniec = 0
CLS
PRINT "Data: "; dd$; "-"; mm$; "-"; yy$
PRINT
PRINT " Program DlugAz.bas"
PRINT
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
DO
DO
PRINT " 0 Koniec obliczen "
PRINT " 1 Dlugosci ze wspolrzednych"
PRINT " 2 Azymut ze wspolrzednych"
PRINT " 3 Dlugosc z funkcji"
PRINT
INPUT "Wybierz wariant: 0..2 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 3
SELECT CASE iw
CASE 0: koniec = -1
CASE 1: CALL Dlugosci
CASE 2: CALL Azymut
CASE 3: CALL Dlfun
END SELECT
LOOP UNTIL koniec = -1
CLS
END 'Programu glownego
SUB Azymut
pi = 4! * ATN(1!)
rg = 200! / pi
rs = 180! / pi
CLS
PRINT "Obliczenie azymutu ze wspolrzednych"
INPUT "x1 "; x1
INPUT "y1 "; y1
INPUT "x2 "; x2
INPUT "y2 "; y2
dx = x2 - x1
dy = y2 - y1
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
'PRINT "Koniec dx=0"
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
' PRINT "Poczatek dx<>0"
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
' PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azs = a * rs
PRINT "dx = "; dx
PRINT "dy = "; dy
PRINT "Azymut azg="; azg; " [grad]"
PRINT "Azymut azs="; azs; " [stopni]"
PRINT "Odlegl z funnkcji = "; dlug(dx, dy);
PRINT
strD1$ = "Koniec obl. azymutu . Nacisnij enter"
CALL czekaj(strD1$)
END SUB
SUB czekaj (lancuch1$)
PRINT lancuch1$
INPUT a$
CLS
END SUB
SUB Dlfun
CLS
PRINT "SUB Dlfun"
PRINT "Obliczenie dlugosci z funkcji Dlfun";
PRINT
INPUT "x1= "; x1
INPUT "y1= "; y1
INPUT "x2= "; x2
INPUT "y2= "; y2
dx1 = x2 - x1
dy1 = y2 - y1
odl = dlug(dx1, dy1)
PRINT "Odlegl = "; odl
INPUT a$
strD1$ = "Koniec obl. dlugosci z funkcji. Nacisnij enter"
CALL czekaj(strD1$)
END SUB
FUNCTION dlug (dx, dy)
d2 = dx * dx + dy * dy
d = SQR(d2)
dlug = d
END FUNCTION
SUB Dlugosci
CLS
PRINT "Oblicenie dlugosci ze wspolrzednych "
INPUT "x1= "; x1
INPUT "y1= "; y1
INPUT "x2= "; x2
INPUT "y2= "; y2
dx = x2 - x1
dy = y2 - y1
d1 = SQR(dx * dx + dy * dy)
d2 = SQR(dx ^ 2 + dy ^ 2)
PRINT
PRINT "d1= "; d1
PRINT "d2= "; d2
PRINT
strD1$ = "Koniec obl. dlugosci. Nacisnij enter"
CALL czekaj(strD1$)
END SUB
Długość i azymut ze współrzednych
Wersja Just Basic
' Program DlugAzJB.bas - wersja Just Basic
koniec = 0
CLS
PRINT "Data: "; dd$; "-"; mm$; "-"; yy$
PRINT
PRINT " Program DlugAz.bas"
PRINT
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
DO
DO
PRINT " 0 Koniec obliczen "
PRINT " 1 Dlugosci ze wspolrzednych"
PRINT " 2 Azymut ze wspolrzednych"
PRINT " 3 Dlugosc z funkcji"
PRINT
INPUT "Wybierz wariant: 0..2 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 3
SELECT CASE iw
CASE 0: koniec = -1
CASE 1: CALL Dlugosci
CASE 2: CALL Azymut
CASE 3: CALL Dlfun
END SELECT
LOOP UNTIL koniec = -1
CLS
END 'Progr glow
SUB Azymut
pi = 4.0 * ATN(1.0)
rg = 200.0 / pi
rs = 180.0 / pi
cls
Print "Obliczenie azymutu ze wspolrzednych"
INPUT "x1 "; x1
INPUT "y1 "; y1
INPUT "x2 "; x2
INPUT "y2 "; y2
dx = x2 - x1
dy = y2 - y1
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
'PRINT "Koniec dx=0"
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
' PRINT "Poczatek dx<>0"
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
' PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azs = a * rs
PRINT "dx = "; dx
PRINT "dy = "; dy
PRINT "Azymut azg="; azg; " [grad]"
PRINT "Azymut azs="; azs; " [stopni]"
print "Odlegl z funnkcji = "; dlug(dx,dy);
print
strD1$="Koniec obl. azymutu . Nacisnij enter"
call czekaj strD1$
END SUB
SUB Dlugosci
CLS
PRINT "Oblicenie dlugosci ze wspolrzednych "
INPUT "x1= ";x1
INPUT "y1= ";y1
INPUT "x2= ";x2
INPUT "y2= ";y2
dx=x2-x1
dy=y2-y1
d1=sqr(dx*dx+dy*dy)
d2=sqr(dx^2+dy^2)
print
print "d1= ";d1
print "d2= ";d2
print
strD1$="Koniec obl. dlugosci. Nacisnij enter"
call czekaj strD1$
END SUB
SUB Dlfun
cls
print "SUB Dlfun"
print "Obliczenie dlugosci z funkcji Dlfun";
print
INPUT "x1= ";x1
INPUT "y1= ";y1
INPUT "x2= ";x2
INPUT "y2= ";y2
dx1=x2-x1
dy1=y2-y1
odl=dlug(dx1, dy1)
print "Odlegl = ";odl
input a$
strD1$="Koniec obl. dlugosci z funkcji. Nacisnij enter"
call czekaj strD1$
END SUB
sub czekaj lancuch1$
print lancuch1$
input a$
cls
end sub
function dlug(dx,dy)
d2=dx*dx+dy*dy
d=sqr(d2)
dlug = d
end function
Oprogramowanie obliczenia azymutu w Visual Basicu - do aplikacji
Excel'a
Przykład obliczenia długości i azymutu w Excelu z
wykorzystaniem funkcji Visual Basic
(met. 1 z powyższych schematów oblicz. azymutu - bez
czwartaków)
1) Przykład obliczeń w arkuszu
Excela
2. Listingi programów
Attribute
VB_Name = "Module1"
Sub
odleg()
' Oblicenie odleglosi i azymutu ze wspolrzednych
'
Procedura odleg
Dim x1, y1, x2, y2 As Double ' wspolrzedne
Dim n1,
n2 As Integer ' numery punktow
Dim opis As String ' lancuch
liter
opis = "Podaj nr 1"
n1 = CSng(InputBox(opis))
opis =
"Podaj nr 2"
' n2 = CSng(InputBox("Wpisz Nr pktu 2-go "))
n2 =
CSng(InputBox(opis))
x1 = CDbl(InputBox("Podaj x1"))
y1 =
CDbl(InputBox("Podaj y1"))
x2 = CDbl(InputBox("Podaj x2"))
y2 =
CDbl(InputBox("Podaj y2"))
'MsgBox dlug(x1, y1, x2, y2) - okno
odpowiedzi
MsgBox "Odleglosc " & n1 & " - " & n2 & " = "
& dlug(x1, y1, x2, y2)
dx = x2 - x1
dy = y2 - y1
MsgBox
"Azymut " & n1 & " - " & n2 & " = " & az(x1, y1, x2,
y2)
End Sub
'Funkcja
dlug(x1, y1, x2, y2) as double
Function dlug(x1, y1, x2, y2)
dl =
Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
dlug = dl
End
Function
' Funkcja az(x1, y1, x2,
y2) As Double
Function az(x1, y1,
x2, y2) As Double
Dim pi, rg, rs As Double
pi = 4# *
Atn(1)
rg = 200# / pi
rs = 180# / pi
dx = x2 - x1: dy = y2 -
y1
If dx = 0 Then ' T (dx = 0)
' Print "poczate dx=0"
If dy > 0 Then ' dy>0 T
a = pi / 2
Else ' dy
>0 N
a = 1.5 * pi
End If ' Koniec dy >0
'
Print "Byl Koniec dx=0"
Else ' N (dx=0) czyli dx
<>0
a = Atn(dy / dx)
If dx < 0 Then ' dx
<0
' Print "dx < 0 "
a = a + pi
Else ' dx
>0
If dy < 0 Then
a = a + 2 * pi
End
If ' Koniec dy<0
End If 'dx <0
End If ' Koniec dx
= 0
azg = a * rg ' azymut w gradach
azs = a * rs ' azymut w
stopniach
az = azg ' Azymut w gradach
End
Function
Funkcje można uruchomic z poziomu Visual Basic -
makro (procedura odleg())
lub z arkusza kalkulacyjnego - wykorzystując
zdefiniowane funkcje - tutaj dlug(x1,y1,x2,y2) i az(x1,y1,x2,y2)
W języku Visual Basic wystepuje m.in.
- możliwość jawnej deklaracji zmiennych: np. dim x, y as double '
rzeczywista podwojnej precyzji
- wprowadzanie danych w okienku InputBox
- wyprowadzanie w okienku MsgBox
Długość, azymut, współrzędne z domiarów prostokątnych
1) Wersja QBasic
' Program DADQB.bas
'Obliczenie dlugosi, azymutów i współrzednych z domiarów prostokatnych
' wersja QBasic
DECLARE SUB czekaj (lancuch1$)
DECLARE SUB Dlugosci ()
DECLARE SUB Azymut ()
DECLARE SUB Dlfun ()
DECLARE SUB Wspoldom ()
DECLARE FUNCTION dlug! (dx!, dy!)
DECLARE FUNCTION azymg! (dx!, dy!)
mm$ = LEFT$(DATE$, 2): dd$ = MID$(DATE$, 4, 2): yy$ = RIGHT$(DATE$, 4)
dato$ = yy$ + "." + mm$ + "." + dd$ ' data oblicz
' fk$ = "####.####"
il = 50
DIM lnry(il), xy(il, 2)
koniec = 0
CLS
PRINT "Data: "; dd$; "-"; mm$; "-"; yy$
PRINT
PRINT " Program DADQB.bas"
PRINT
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
PRINT
DO ' 1)
DO ' 2)
PRINT " 0 Koniec obliczen "
PRINT " 1 Dlugosci ze wspolrzednych"
PRINT " 2 Azymut ze wspolrzednych"
PRINT " 3 Dlugosc z funkcji"
PRINT " 4 Wspolrzedne z domiarow"
PRINT
INPUT "Wybierz wariant: 0..2 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 4 '2)
SELECT CASE iw
CASE 0: koniec = -1
CASE 1: CALL Dlugosci
CASE 2: CALL Azymut
CASE 3: CALL Dlfun
CASE 4: CALL Wspoldom
END SELECT
LOOP UNTIL koniec = -1 ' 1)
CLS
END 'Progr glow ==================
FUNCTION azymg (dx, dy)
pi = 4! * ATN(1!)
rg = 200! / pi
rs = 180! / pi
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azymg = azg
END FUNCTION
SUB Azymut
pi = 4! * ATN(1!)
rg = 200! / pi
rs = 180! / pi
CLS
PRINT "Obliczenie azymutu ze wspolrzednych"
INPUT "x1 "; x1
INPUT "y1 "; y1
INPUT "x2 "; x2
INPUT "y2 "; y2
dx = x2 - x1
dy = y2 - y1
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
'PRINT "Koniec dx=0"
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
' PRINT "Poczatek dx<>0"
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
' PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azs = a * rs
PRINT "dx = "; dx
PRINT "dy = "; dy
PRINT "Azymut azg="; azg; " [grad]"
PRINT "Azymut azs="; azs; " [stopni]"
PRINT "Odlegl z funkcji = "; dlug(dx, dy)
PRINT "Azymut z funkcji = "; azymg(dx, dy); "[grad]"
PRINT
strD1$ = "Koniec obl. azymutu . Nacisnij enter"
CALL czekaj(strD1$)
END SUB ' ----------------------
SUB czekaj (lancuch1$)
PRINT lancuch1$
INPUT a$
CLS
END SUB
SUB Dlfun ' -------------------------
CLS
PRINT "SUB Dlfun"
PRINT "Obliczenie dlugosci z funkcji Dlfun";
PRINT
INPUT "x1= "; x1
INPUT "y1= "; y1
INPUT "x2= "; x2
INPUT "y2= "; y2
dx1 = x2 - x1
dy1 = y2 - y1
odl = dlug(dx1, dy1)
PRINT "Odlegl z funkcji dlug = "; odl
PRINT "Azymut z funkcji azymg = "; azymg(dx, dy); "[grad]"
INPUT a$
strD1$ = "Koniec obl. dlugosci z funkcji. Nacisnij enter"
CALL czekaj(strD1$)
END SUB
FUNCTION dlug (dx, dy)
d2 = dx * dx + dy * dy
d = SQR(d2)
dlug = d
END FUNCTION '--------------------------
SUB Dlugosci '----------
CLS
PRINT "Oblicenie dlugosci ze wspolrzednych "
INPUT "x1= "; x1
INPUT "y1= "; y1
INPUT "x2= "; x2
INPUT "y2= "; y2
dx = x2 - x1
dy = y2 - y1
d1 = SQR(dx * dx + dy * dy)
d2 = SQR(dx ^ 2 + dy ^ 2)
PRINT
PRINT "d1= "; d1
PRINT "d2= "; d2
PRINT "Azymut z funkcji = "; azymg(dx, dy); "[grad]"
PRINT
strD1$ = "Koniec obl. dlugosci. Nacisnij enter"
CALL czekaj(strD1$)
END SUB '------------------
SUB Wspoldom 'Oblicz, wspol. z domiarow
SHARED lnry(), xy()
PRINT " Obliczenie wspolrzednych z domiarow prostokatnych "
PRINT
PRINT " Nr pkt
Odcieta
Rzedna
X
Y "
PRINT
lnr = 1
DO WHILE lnr <> 0
CLS
PRINT "Nr punktu pocz A lub 0 gdy koniec obliczen "
INPUT "Nr pocz A: "; lnr
IF lnr <> 0 THEN
la = lnr
INPUT "Xa "; xa
INPUT "Ya "; ya
PRINT "Xa="; xa, " Ya="; ya
PRINT "Nr nr punktu konc B "
INPUT "Nr konc. B "; lnr
lb = lnr
INPUT "Xb "; xb
INPUT "Yb "; yb
PRINT " xa="; xa
PRINT " ya="; ya
PRINT " xb="; xb
PRINT " yb="; yb
dx1 = xb - xa
dy1 = yb - ya
PRINT "Dx="; dx1
PRINT "Dy="; dy1
dob = SQR(dx1 * dx1 + dy1 * dy1)
PRINT "dx="; dx1, " dy="; dy1, " Dobl="; dob
INPUT "Dlug. pomierz A-B "; dp
c = dx1 / dp: s = dy1 / dp
PRINT "c=Dx/Dp"; c, " s=Dy/Dp"; s
lnp = 1
DO WHILE lnp <> 0
' 200
PRINT "Nr punktu na domiarze prost. P lub 0 gdy koniec obliczen linii pomiar"
INPUT lnp
IF lnp <> 0 THEN
INPUT "Odcieta d: "; d
INPUT "Rzedna h: "; h
dx = c * d - h * s
dy = s * d + h * c
PRINT "dx="; dx, " dy="; dy
x = xa + dx
y = ya + dy
PRINT "Xp="; x, " Yp="; y
ip = ip + 1
' lnry(ip) = lnp
xy(ip, 1) = x
xy(ip, 2) = y
PRINT "Nr
Pkt
D
H
Xobl
Yobl"
PRINT USING "#######"; lnp;
PRINT USING "#########.###"; d; h; x; y
END IF
LOOP
PRINT xb; yb
PRINT
PRINT "Dpom = "; dp
PRINT
PRINT " Dobl=";
PRINT dob
PRINT
PRINT
INPUT "Nacisnij Enter "; a$
END IF
LOOP
END SUB '--------------
---------------------------------------------------------------
Długość, azymut, współrzędne z domiarów prostokątnych
2) Wersja Just Basic
mm$ = LEFT$(DATE$, 2): dd$ = MID$(DATE$, 4, 2): yy$ = RIGHT$(DATE$, 4)
dato$ = yy$ + "." + mm$ + "." + dd$ ' data oblicz
il=50
DIM lnry(il), xy(il, 2)
koniec = 0
CLS
print date$("yyyy/mm/dd")
PRINT
PRINT " Program DlugAz.bas"
PRINT
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
PRINT
DO ' 1)
DO ' 2)
PRINT " 0 Koniec obliczen "
PRINT " 1 Dlugosci ze wspolrzednych"
PRINT " 2 Azymut ze wspolrzednych"
PRINT " 3 Dlugosc z funkcji"
PRINT " 4 Wspolrzedne z domiarow"
PRINT
INPUT "Wybierz wariant: 0..2 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 4 '2)
SELECT CASE iw
CASE 0: koniec = -1
CASE 1: CALL Dlugosci
CASE 2: CALL Azymut
CASE 3: CALL Dlfun
CASE 4: CALL Wspoldom
END SELECT
LOOP UNTIL koniec = -1 ' 1)
CLS
END 'Progr glow
SUB Azymut
pi = 4.0 * ATN(1.0)
rg = 200.0 / pi
rs = 180.0 / pi
cls
Print "Obliczenie azymutu ze wspolrzednych"
INPUT "x1 "; x1
INPUT "y1 "; y1
INPUT "x2 "; x2
INPUT "y2 "; y2
dx = x2 - x1
dy = y2 - y1
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
'PRINT "Koniec dx=0"
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
' PRINT "Poczatek dx<>0"
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
' PRINT "Koniec dx <> 0"
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azs = a * rs
PRINT "dx = "; dx
PRINT "dy = "; dy
PRINT "Azymut azg="; azg; " [grad]"
PRINT "Azymut azs="; azs; " [stopni]"
print "Odlegl z funkcji = "; dlug(dx,dy)
print "Azymut z funkcji = "; azymg(dx, dy); "[grad]"
print
strD1$="Koniec obl. azymutu . Nacisnij enter"
call czekaj strD1$
END SUB
SUB Dlugosci
CLS
PRINT "Oblicenie dlugosci ze wspolrzednych "
INPUT "x1= ";x1
INPUT "y1= ";y1
INPUT "x2= ";x2
INPUT "y2= ";y2
dx=x2-x1
dy=y2-y1
d1=sqr(dx*dx+dy*dy)
d2=sqr(dx^2+dy^2)
print
print "d1= ";d1
print "d2= ";d2
print "Azymut z funkcji = "; azymg(dx, dy); "[grad]"
print
strD1$="Koniec obl. dlugosci. Nacisnij enter"
call czekaj strD1$
END SUB
sub Dlfun
cls
print "SUB Dlfun"
print "Obliczenie dlugosci z funkcji Dlfun";
print
INPUT "x1= ";x1
INPUT "y1= ";y1
INPUT "x2= ";x2
INPUT "y2= ";y2
dx1=x2-x1
dy1=y2-y1
odl=dlug(dx1, dy1)
print "Odlegl z funkcji dlug = ";odl
print "Azymut z funkcji azymg = "; azymg(dx,dy); "[grad]"
input a$
strD1$="Koniec obl. dlugosci z funkcji. Nacisnij enter"
call czekaj strD1$
end sub
sub czekaj lancuch1$
print lancuch1$
input a$
cls
end sub
function dlug(dx,dy)
d2=dx*dx+dy*dy
d=sqr(d2)
dlug = d
end function
function azymg(dx, dy)
pi = 4.0 * ATN(1.0)
rg = 200.0 / pi
rs = 180.0 / pi
IF dx = 0 THEN ' 1) dx = 0
IF dy > 0 THEN ' 2) dy>0 T
a = pi / 2
ELSE
a = 1.5 * pi
END IF ' 2) Koniec dy >0
END IF ' 1) dx=0
IF dx <> 0 THEN ' 10) dx <>0
a = ATN(dy / dx)
IF dx < 0 THEN ' 11) dx <0
a = a + pi
ELSE ' dx >0
IF dy < 0 THEN '12
a = a + 2 * pi
END IF ' 12) dy <0
END IF '11 Koniec dx < 0
END IF ' 10 dx <>0
azg = a * rg
azymg=azg
end function
SUB Wspoldom 'Oblicz, wspol. z domiarow
PRINT " Obliczenie wspolrzednych z domiarow prostokatnych "
PRINT
PRINT " Nr pkt
Odcieta
Rzedna
X
Y "
PRINT
lnr = 1
DO WHILE lnr <> 0
CLS
PRINT "Nr punktu pocz A lub 0 gdy koniec obliczen "
INPUT "Nr pocz A: "; lnr
IF lnr <> 0 THEN
la = lnr
input "Xa "; xa
input "Ya ";ya
PRINT "Xa="; xa, " Ya="; ya
PRINT "Nr nr punktu konc B "
INPUT "Nr konc. B "; lnr
lb = lnr
input "Xb "; xb
input "Yb ";yb
print " xa=";xa
print " ya=";ya
print " xb=";xb
print " yb=";yb
dx1 = xb - xa
dy1 = yb - ya
print "Dx="; dx1
print "Dy="; dy1
dob = SQR(dx1*dx1 + dy1*dy1)
PRINT "dx="; dx, " dy="; dy, " Dobl="; dob
INPUT "Dlug. pomierz A-B "; Dp
c = dx1 / Dp: s = dy1 / Dp
PRINT "c=Dx/Dp"; c, " s=Dy/Dp"; s
lnp = 1
DO WHILE lnp <> 0
' 200
PRINT "Nr punktu na domiarze prost. P lub 0 gdy koniec obliczen linii pomiar"
INPUT lnp
IF lnp <> 0 THEN
INPUT "Odcieta d: "; d
INPUT "Rzedna h: "; h
dx = c * d - h * s
dy = s * d + h * c
PRINT "dx="; dx, " dy="; dy
x = xa + dx
y = ya + dy
PRINT "Xp="; x, " Yp="; y
ip = ip + 1
lnry(ip) = lnp
xy(ip, 1) = x
xy(ip, 2) = y
PRINT lnp;
PRINT d; h; x; y
END IF
LOOP
PRINT xb; yb
PRINT
PRINT "Dpom = ";dp
PRINT
PRINT " Dobl=";
PRINT dob
PRINT
PRINT
INPUT "Nacisnij Enter "; a$
END IF
LOOP
END SUB
Kąty ze współrzędnych - wersja Just Basic
'Program KATynJB.BAS - wersja Just Basic
' Komentarze
' Definicje stalych
il = 2000 ' Ilosc obliczen maks.
pi = 4.0 * ATN(1.0) ' Pi
rg = 200.0 / pi ' Ro[grad]
rs = 180.0 / pi ' Ro[stopn]
'Program glowny
ip = 0 'Ilosc punktow o danych wspolrz
CLS ' Kasowanie ekranu
DO
[menu]
CLS
PRINT "Data: "; date$("yyyy/mm/dd")
PRINT "Godz : "; time$()
PRINT
PRINT " Program KATY2.BAS QBASIC wersja szkolna"
PRINT
PRINT " MENU"
PRINT " ======================================"
PRINT
PRINT " 1 Katy ze wspolrzednych"
PRINT " 0 Koniec obliczen "
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
PRINT
DO
INPUT "Wybierz wariant: 0..1 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 7
SELECT CASE iw
CASE 1: CALL Katy
CASE 0: GOTO [koniec]
END SELECT
LOOP UNTIL iw = 0
[koniec]
CLS
END 'Program glowny
FUNCTION ANaz(dx, dy) ' azymut w gradach
print "Funkcja ANAz(dx, dy) - obliczenie azymutu "
pi = 4.0 * ATN(1.0) ' Pi = 3.14....
'Wydruk kontrolny
print " pi= ";pi
rg = 200.0 / pi ' Ro [grad]
print "rg= "; rg
IF dx = 0 AND dy = 0 THEN
PRINT "Dx=DY blad danych"
ar=0
GOTO [Koniec1] ' Skocz do etykiety [Koniec1]
END IF
IF dx <> 0 THEN
ar = ATN(dy/dx)
PRINT "0) dx <> 0 ar= atn(dy/dx) ="; ar
END IF
IF dy = 0 and dx > 0 THEN
ar = 0 ' 1
print "1) dy =0 and dx > 0 ar = "; ar
END IF
IF dy = 0 and dx < 0 THEN
ar = pi ' 2
PRINT "2) dy=0 and dx >0 ar = "; ar
END IF
IF dx = 0 and dy > 0 THEN
ar = 0.5*pi ' 3
PRINT "3) dx=0 and dy>0 ar = "; ar
END IF
IF dx = 0 and dy < 0 THEN
ar= 1.5*pi ' 4
pRINT " 4) dx =0 and dy < 0 ar = ";ar
END iF
IF dx < 0 AND dy <> 0 THEN
ar = pi + ar ' 6
print "6) dx <0 and dy <> 0 ar = "; ar
END IF
iF dx > 0 and dy < 0 THEN
ar = 2.0*pi + ar
print "7) dx > 0 and dy<0 ar = ";ar
END IF
[Koniec1]
azyg = ar * rg ' w gradach
print "dx= "; dx
print "dy= "; dy
print "azyg [grad] = "; azyg
ANaz = azyg ' w gradach
END FUNCTION
'Procedura Katy
SUB Katy
' SHARED fk$
fd$ = "#######.###"
PRINT " Obliczenie katow i dlugosci ze wspolrzednych "
PRINT
lnr = 1
DO
CLS
PRINT "Wprowadz nr punktu lewego L lub 0 gdy koniec wprowdz. ";
INPUT nrl
IF nrl <> 0 THEN
INPUT "Wprowadz XL "; xl
INPUT "Wprowadz YL "; yl
PRINT
PRINT "Wprowadz nr punktu prawego P ";
INPUT nrp
INPUT "Wprowadz XP "; xp
INPUT "Wprowadz YP "; yp
PRINT
PRINT "Wprowadz nr punktu centralnego C ";
INPUT nrc
INPUT "Wprowadz XC "; xc
INPUT "Wprowadz YC "; yc
dx1 = xl - xc: dy1 = yl - yc
dl1 = SQR(dx1 * dx1 + dy1 * dy1)
PRINT
a1 = ANaz(dx1, dy1) ' azymut boku lewego
dx2 = xp - xc: dy2 = yp - yc
dl2 = SQR(dx2 * dx2 + dy2 * dy2)
PRINT
a2 = ANaz(dx2, dy2) ' azymut boku prawego
PRINT "Przyrosty wspolrzednych i dlugosci:"
PRINT " dx (C-L)="; : PRINT dx1;
PRINT " dy (C-P)="; : PRINT dy1;
PRINT " dL (C-L)="; : PRINT dl1
PRINT " dx (C-P)="; : PRINT dx2;
PRINT " dy (C-P)="; : PRINT dy2;
PRINT " dL (C-P)="; : PRINT dl2
ang = a2 - a1 ' kat z roznicy azymutow w gradach
IF ang < 0 THEN ang = ang + 400.0
PRINT
PRINT "Azymuty [grad]"
PRINT "Az ("; nrc; "-"; nrl; ") = ";
PRINT a1
PRINT "Az ("; nrc; "-"; nrp; ") = ";
PRINT a2
' Obliczenie kata bezposrednio
yyy = dx1 * dy2 - dy1 * dx2
xxx = dx1 * dx2 + dy1 * dy2
angle = ANaz(xxx, yyy)
PRINT
PRINT "KATY w gradach"
PRINT "Kat z roznicy azymutow : "; nrl; "-"; nrc; "-"; nrp; " = ";
PRINT ang
PRINT "Kat wg form Hausbrandta: "; lnr; "-"; cnr; "-"; pnr; " = ";
PRINT angle
PRINT
INPUT "Nacisnij Enter ... "; a$
END IF
LOOP WHILE nrl <> 0
PRINT
PRINT
CLS
END SUB ' Koniec procedury KATY
Wcięcie kątowe w przód
' program wckat.bas - wersja QBasic
' Wersja szkolna
' Deklaracje
DECLARE SUB wydruk ()
DECLARE SUB dane ()
DECLARE SUB wc ()
DECLARE SUB oblicz ()
DEFDBL P, R, W-Y
DEFINT I-J, M
DEFLNG N
COMMON SHARED a, b, x, y, rg, f$, xa, ya, xb, yb, mw, mk, Na, Nb
f$ = "#############.###"
m = 100
pi = 4# * ATN(1#)
rg = 200# / pi
OPTION BASE 1
DIM SHARED nr(m), w(m, 2), alfa(m), beta(m)
' Program glowny
CLS
PRINT " Wciecie katowe w przod "
PRINT " (C) K. R. "
PRINT " Wersja szkolna "
PRINT
CALL dane
CALL wydruk
END ' Program glowny
'Procedury
SUB dane
PRINT
INPUT "Nr , X, Y pktu nawiazania A (prawego) "; Na, xa, ya
INPUT "Nr , X, Y pktu nawiazania B (lewego) "; Nb, xb, yb
PRINT
PRINT "Oznaczenia: Alfa - Kat na pkcie A, Beta - na pkcie B "
PRINT
INPUT "Wersja katow: 1 - grady, 2 - stop,min,sek "; wk
PRINT "Ilosc wciec z bazy "; Na; "-"; Nb, : INPUT mw
PRINT "Podaj kolejno: Nr_pktu, Alfa, Beta ";
PRINT
FOR i = 1 TO mw
PRINT "Pkt wyznaczany nr "; i
IF wk = 1 THEN INPUT "Nr, Alfa[g], Beta[g] "; nr(i), alfa(i), beta(i)
IF wk = 2 THEN
INPUT "Nr, A_st, A_mi, A_sek, B_st, B_mi, B-sek"; nr(i), a1, a2, a3, b1, b2, b3
a = a1 + a2 / 60 + a3 / 3600: b = b1 + b2 / 60 + b3 / 3600
a = a / .9: b = b / .9
alfa(i) = a: beta(i) = b
END IF
a = alfa(i): b = beta(i):
CALL wc
w(i, 1) = x
w(i, 2) = y
NEXT i
END SUB
'Wciecie
SUB wc
a = a / rg
b = b / rg
x1 = xa: y1 = ya
x2 = xb: y2 = yb
ca = COS(a) / SIN(a): cb = COS(b) / SIN(b) ' ctg a, ctg b
PRINT "ctg A ="; ca; " ctg B = "; cb
x = (x1 * cb + y1 + x2 * ca - y2) / (cb + ca)
y = (-x1 + y1 * cb + x2 + y2 * ca) / (cb + ca)
PRINT "x="; x; " y="; y
INPUT a$
END SUB
SUB wydruk
CLS
INPUT "Nazwa pliku lub urzadz. wydruku (PRN-drukarka, SCRN: - ekran) "; fw$
CLS
OPEN "O", #1, fw$
PRINT #1, " WCIECIE KATOWE W PRZOD"
PRINT #1,
PRINT #1, " Punkty nawiazania: A, B"
PRINT #1, "
Nr
X
Y"
PRINT #1, USING "###########"; Na;
PRINT #1, USING f$; xa; ya
PRINT #1, USING "###########"; Nb;
PRINT #1, USING f$; xb; yb
PRINT
PRINT #1, " Punkty wyznaczone wcieciem w przod: "
PRINT #1, "
Nr
Alfa
Beta
X
Y "
PRINT #1,
"
g c cc g c
cc
"
PRINT #1,
FOR i = 1 TO mw
PRINT #1, USING "###########"; nr(i);
PRINT #1, USING "########.#####"; alfa(i); beta(i);
PRINT #1, USING f$; w(i, 1); w(i, 2)
NEXT i
PRINT #1,
PRINT #1, " Schemat wciecia w przod: C"
PRINT #1, " Pomierzone: Alfa,
Beta.
"
PRINT #1,
"
Beta Alfa "
PRINT #1,
"
B-----------A"
PRINT #1,
END SUB
Przykład wyników
WCIECIE KATOWE W PRZOD
Punkty nawiazania: A, B
Nr
X
Y
1
0.000
0.000
2
10.000
10.000
Punkty wyznaczone wcieciem w przod:
Nr
Alfa
Beta
X
Y
g c cc g c
cc
11 50.00000
60.00000
-0.000
11.584
12 55.00000
80.00000
-1.238
15.726
Schemat wciecia w przod: C
Pomierzone: Alfa,
Beta.
Beta Alfa
B-----------A
Podstawowe obliczenia geodezyjne - wersja QBAsic
Program bardziej zaawansowany, wyprowadzenia wyników do pliku, formatowanie wydruku, ustalenie dokładności wydruku,
zapis i odczyt współrzędnych ze zbioru, obsługa błędów
'Program POG.BAS - QBasic - wersja do testowania
' (C) K. R.
'DECLARE SUB Tytul ()
'DECLARE SUB tytul2 ()
'DECLARE SUB NAZPLIK ()
'DECLARE SUB Wspol ()
'DECLARE SUB Azym ()
'DECLARE SUB Wspoldom ()
'DECLARE SUB ZapisWsp ()
'DECLARE SUB Pole ()
'DECLARE SUB Katy ()
'DECLARE SUB opis ()
'DECLARE SUB koniec ()
'DECLARE SUB SPRNR ()
'DeCLARE SUB spr2 (lnp&)
DEFINT I-K, M-N
DEFLNG L
DEFDBL A-H, O-Z
MM$ = LEFT$(DATE$, 2): DD$ = MID$(DATE$, 4, 2): YY$ = RIGHT$(DATE$, 4)
dato$ = YY$ + "." + MM$ + "." + DD$ ' data oblicz
il% = 2000
pi = 4# * ATN(1#) ' Liczba Pi
rg = 200# / pi ' Ro [grad]
rs = 180# / pi ' Ro [stopn]
fk$ = "######.#####" ' Format zapisu katow
fp$ = "############" ' Format zapisu nrow (10 cyfr)
OPTION BASE 1 ' Tablice numerowane od 1 (normalnie od 0)
DIM lnry(il%), xy(il%, 2) 'Deklaracja tablic: nrow oraz wspolrz: x,y
' COMMON f$, fk$, fx$, fp$, x, y
DEF FNaz (dx, dy) ' Funkcja na obliczenie azymutu
IF dx = 0 AND dy = 0 THEN PRINT "Dx=DY blad danych"
IF dy = 0 THEN
IF dx > 0 THEN azy = 0 ELSE azy = pi
END IF
IF dx <> 0 THEN ar = ATN(dy / dx) ' azymut w rad
IF dx = 0 THEN
IF dy > 0 THEN azy = pi / 2 ELSE azy = 1.5# * pi
END IF
IF dx > 0 AND dy <> 0 THEN
IF dy > 0 THEN azy = ar ELSE azy = 2# * pi + ar
END IF
IF dx < 0 AND dy <> 0 THEN azy = pi + ar
kaz:
FNaz = azy * rg
END DEF
'Program glowny
ip = 0 'Ilos punktow o danych wspolrz
CLS
PRINT "Program POG - podstawowe obliczenia geodezyjne "
PRINT
INPUT "1 - monitor kolor kolorowy, 2 - mono "; imk
IF imk = 2 THEN GOTO 5
'ON ERROR GOTO 5
CALL Tytul: GOTO 10
5
CALL tytul2
10
CALL NAZPLIK ' wywolanie procedury
ON ERROR GOTO blad
iw = -1 'Wskaznik wyboru pozycji menu
DO
menu:
CLS
PRINT " Program POG podstawowe obliczenia geodezyjne"
PRINT
PRINT
PRINT " MENU"
PRINT " ======================================"
PRINT
PRINT "1 Wprowadzenie nrow i wspolrzednych"
PRINT "2 Obliczenie azymutow i dlugosci "
PRINT "3 Obliczenie wspolrz. na podstawie domiarow "
PRINT "4 Zapis wspolrz. do pliku "
PRINT "5 Obliczenie pola ze wspolrzednych "
PRINT "6 Katy ze wspolrzednych"
PRINT "7 Krotki opis"
PRINT "0 Koniec obliczen "
PRINT
PRINT "Uwaga: Numery punktow - liczba max. 2147483647 (prakt. 9 cyfr) "
DO
INPUT "Wybierz wariant: 0..7 ==> "; iw
LOOP UNTIL iw >= 0 AND iw <= 7
SELECT CASE iw
CASE 1: CALL Wspol
CASE 2
CALL Azym
CASE 3
CALL Wspoldom
CASE 4: CALL ZapisWsp
CASE 5: CALL Pole
CASE 6: CALL Katy
CASE 7: CALL opis
CASE 0
CALL koniec
END SELECT
LOOP UNTIL iw = 0
CLS
END
blad: 'Etykieta - skacze tu gdy jest blad
CLS
PRINT "Blad .... "
CLOSE #1
END 'Progr glow
SUB Azym ' Azymuty
SHARED lnr, ip, lnry(), xy(), spr, x, y, fk$, fp$, fx$, rs, rg
PRINT #1,
PRINT #1, " Obliczenie azymutow i dlugosci ze wspolrzednych "
PRINT #1,
PRINT #1, " Nr
pocz
Xp
Yp Dlugosci
Azymuty [grad] "
PRINT #1, " Nr
konc
Xk
Yk
Azymuty [ř.' "; "] "
PRINT #1,
lnr = 1
DO WHILE lnr <> 0
CLS
PRINT "Wprowadz nr punktu pocz. A lub 0 gdy koniec wprowdz. "
INPUT lnr
IF lnr <> 0 THEN
CALL SPRNR
la = lnr
xa = x: ya = y
PRINT "Xa="; xa, " Ya="; ya
PRINT "Wprowadz nr punktu B "
INPUT lnr
CALL SPRNR
lb = lnr
xb = x: yb = y
dx1 = xb - xa: dy1 = yb - ya
d = SQR(dx1 * dx1 + dy1 * dy1)
' d = dl(dx1, dy1)
PRINT "dx="; dx1, " dy="; dy1, d
a = FNaz(dx1, dy1)
s = ABS(a / rg) * rs: s1% = INT(s + .0000001): sM = (s - s1%) * 60#
mc% = INT(sM + .000001): sek = INT((sM - mc%) * 60# + .5)
IF sek = 60 THEN mc% = mc% + 1: sek = 0
a1s = s1% + mc% / 100 + sek / 10000
PRINT "st="; s1%, " Mi="; mc%, " sek="; sek
IF a < 0 THEN a1s = -a1s
PRINT "Azymut "; la; "-"; lb; " = ";
PRINT USING fk$; a;
PRINT "[grad]";
PRINT USING fk$; a1s; : PRINT "[ř.' '']"
PRINT #1, USING fp$; la;
PRINT #1, USING fx$; xa; ya; d;
PRINT #1, USING fk$; a
PRINT #1, USING fp$; lb;
PRINT #1, USING fx$; xb; yb;
PRINT #1, " ";
PRINT #1, USING "######"; a1s;
PRINT #1, "ř";
PRINT #1, USING "##"; mc%; : PRINT #1, "'";
PRINT #1, USING "##.#"; sek; : PRINT #1, "''"
PRINT #1,
INPUT "Nacisnij Enter "; a$
END IF
LOOP
PRINT #1,
PRINT #1,
END SUB
SUB Katy
SHARED lnr, ip, lnry(), xy(), spr, x, y, fk$, fp$, fx$, rs, rg
PRINT #1,
PRINT #1, " Obliczenie katow i dlugosci ze wspolrzednych "
PRINT #1,
PRINT #1, " Nr
lewy
Xl
Yl Dlug L-C
Azymut C-L [grad] "
PRINT #1, " Nr
cent
Xc
Yc
C-P Azymut C-P "
PRINT #1, " Nr
prawy
Xp
Yp
L-P Kat L-C-P "
PRINT #1,
lnr = 1
DO WHILE lnr <> 0
CLS
PRINT "Wprowadz nr punktu lewego L lub 0 gdy koniec wprowdz. "
INPUT lnr
IF lnr <> 0 THEN
CALL SPRNR
ll = lnr
xl = x: yl = y
PRINT "Xl="; xl, " Yl="; yl
PRINT "Wprowadz nr punktu prawego P "
INPUT lnr
CALL SPRNR
lp = lnr
xp = x: yp = y
PRINT "Xp="; xp, " Yp="; yp
PRINT "Wprowadz nr punktu centralnego C "
INPUT lnr
CALL SPRNR
lc = lnr
xc = x: yc = y
PRINT "Xc="; xc, " Yc="; yc
dx1 = xl - xc: dy1 = yl - yc
dl1 = SQR(dx1 * dx1 + dy1 * dy1)
' d = dl(dx1, dy1)
PRINT "dx(C-L)="; dx1, " dy(C-L)="; dy1, " dl(C-L)="; dl1
a1 = FNaz(dx1, dy1)
dx2 = xp - xc: dy2 = yp - yc
dl2 = SQR(dx2 * dx2 + dy2 * dy2)
' d = dl(dx1, dy1)
PRINT "dx(C-P)="; dx2, " dy(C-P)="; dy2, " dl(C-P= "; dl2
a2 = FNaz(dx2, dy2)
ang = a2 - a1
IF ang < 0 THEN ang = ang + 400
yyy = dx1 * dy2 - dy1 * dx2
xxx = dx1 * dx2 + dy1 * dy2
angle = FNaz(xxx, yyy)
dx3 = xp - xl: dy3 = yp - yl
dl3 = SQR(dx3 * dx3 + dy3 * dy3)
PRINT "Kat "; ll; "-"; lc; "-"; lp; " = ";
PRINT USING fk$; ang;
PRINT USING fk$; angle;
PRINT "[grad]";
PRINT #1, USING fp$; ll;
PRINT #1, USING fx$; xl; yl; dl1;
PRINT #1, USING fk$; a1
PRINT #1, USING fp$; lc;
PRINT #1, USING fx$; xc; yc; dl2;
PRINT #1, USING fk$; a2
PRINT #1, USING fp$; lp;
PRINT #1, USING fx$; xp; yp; dl3;
PRINT #1, USING fk$; ang
PRINT #1, " Kat L-C-P = ";
PRINT #1, USING fk$; angle
PRINT #1,
PRINT
INPUT "Nacisnij Enter "; a$
END IF
LOOP
PRINT #1,
PRINT #1,
END SUB
SUB koniec 'Procedura konczaca program - zamyka plik wynikow
SHARED dato$
PRINT #1,
PRINT #1,
PRINT #1, " Data obliczen "; dato$
PRINT #1,
PRINT #1, " Obliczyl
...........
Sprawdzil ..........."
PRINT #1, CHR$(12)
CLOSE #1
SCREEN 0
CLS
END SUB
SUB NAZPLIK 'Procedura na wprowadzenie pliku wynikow i dokl. wydruku
SHARED fx$, f$
20
CLS
PRINT " PODSTAWOWE OBLICZENIA GEODEZYJNE "
PRINT " Program POG "
PRINT " (C) K. R. 05.1994 "
PRINT
PRINT
PRINT "Nazwa pliku/urzadzenia do wydruku wynikow: "
PRINT
PRINT "PRN lub LPT1 - drukarka 1, LPT2 - drukarka 2, "
PRINT "SCRN: lub <Enter> - ekran "
PRINT "Dowolna inna nazwa zgodnie z DOS - plik "
PRINT
PRINT "Podaj nazwe do wydruku wynikow i nacisnij <Enter> ==> "; ;
INPUT f$
IF f$ = "" THEN f$ = "scrn:"
OPEN f$ FOR OUTPUT AS 1
iwyd = 0
PRINT
DO
INPUT "Dokladnosc wydruku wspolrz: 2 lub 3 : "; iwyd
LOOP UNTIL iwyd = 2 OR iwyd = 3
IF iwyd = 3 THEN fx$ = "###########.###" ELSE fx$ = "###########.##"
PRINT #1, " PODSTAWOWE OBLICZENIA GEODEZYJNE "
PRINT #1,
PRINT #1, " Program POG - rel. 1.1 "
PRINT #1, " Autor programu K. R. 05.1994 "
PRINT #1,
PRINT #1,
CLS
END SUB
SUB opis
CLS
PRINT " Krotki opis programu"
PRINT
PRINT "Program sluzy do podstawowych obliczen geodezyjnych"
PRINT "azymuty i dlugosci, wspolrz. z domiarow, pola pow., katy"
PRINT
PRINT "Max ilosc punktow obliczanych: 2000"
PRINT "Numery punktow max 9 cyfrowe "
PRINT "Dokl. wydruku bokow i wspolrz: 1 - cm lub 2 - mm"
PRINT "Wyniki obliczen moga byc wyprowadzane do pliku, na drukarke lub ekran"
PRINT "Podaje sie nazwe urzadzenia: PRN lub LPT1 albo LPT2 - drukarka"
PRINT "SCRN: - ekran, inna nazwa wg. DOS - plik (nazwa do 8 zn, rozsz. 3 zn)"
PRINT "Nazwa pliku moze byc poprzedzona nazwa dysku i sciezka dostepu"
PRINT
PRINT " Dane do obliczenia pol moga byc wczytane z klawiatury lub pliku "
PRINT " Przy podawaniu danych z klawaitury, dane oddziela sie przecinkiem"
PRINT " Dane w pliku moga byc oddzielone przecinkiem lub spacjami "
PRINT
PRINT " Dane w pliku do obl. pol: "
PRINT " Ilosc punktow: n"
PRINT " Nr(i) X(i) Y(i) i=1..n"
PRINT
PRINT " <Nacisnij jakis klawisz> ... "
DO: LOOP WHILE INKEY$ = ""
CLS
END SUB ' Opis
SUB Pole 'Oblicz pola ze wspolrz
SHARED lnr, ip, lnry(), xy(), spr, x, y, fk$, fp$, fx$, sprp, il%
DIM ln(il%), px(il%), py(il%)
PRINT #1, " OBLICZENIE POLA POWIERZCHNI ZE WSPOLRZEDNYCH"
PRINT #1,
PRINT #1, " Lp
Nr(i)
X(i)
Y(i) D(i)-(i+1) "
PRINT #1,
lnr = 1
np = 0: pO = 0: PP = 0: X0 = 0: Y0 = 0
FOR i = 1 TO iln%
ln(i) = 0
px(i) = 0
py(i) = 0
NEXT i
CLS
PRINT "Obliczenie pola powierzchni ze wspolrzednych "
PRINT
'PRINT "fx$="; fx$
PRINT
PRINT " Dane (Nr X Y) : 1 - z klawiatury, 2 - ze zbioru: ";
INPUT idp
IF idp = 2 THEN
INPUT "Nazwa pliku danych "; fd$
OPEN "I", #2, fd$
INPUT #2, np
FOR i = 1 TO np
INPUT #2, ln(i), px(i), py(i)
NEXT i
CLOSE #2
END IF
IF idp = 1 THEN
INPUT "Ilosc punktow "; np
FOR i = 1 TO np
INPUT " Nr pktu "; lnr
CALL SPRNR
ln(i) = lnr
px(i) = x: py(i) = y
PRINT "X="; x, " Y="; y
ln(i) = lnr
NEXT i
END IF
px(np + 1) = px(1): py(np + 1) = py(1)
pO = 0
X0 = px(1): Y0 = py(1)
FOR i = 1 TO np
x1 = px(i) - X0: y1 = py(i) - Y0
x2 = px(i + 1) - X0: y2 = py(i + 1) - Y0
PP = x1 * y2 - y1 * x2: PP = PP / 2
pO = pO + PP
d = SQR((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
PRINT #1, i; TAB(5);
PRINT #1, USING fp$; ln(i);
PRINT #1, TAB(20);
PRINT #1, USING fx$; px(i); py(i); d
PRINT i; TAB(5);
PRINT USING fp$; ln(i);
PRINT TAB(20);
PRINT USING fx$; px(i); py(i); d
NEXT i
PRINT #1,
PRINT #1, " Ilosc punktow = "; np
PRINT #1, " Pole powierzchni = ";
PRINT #1, USING fx$; pO;
PRINT #1, " [m^2]"
PRINT " Ilosc punktow = "; np
PRINT " Pole powierzchni = ";
PRINT USING fx$; pO;
PRINT " [m^2]"
PRINT #1,
PRINT #1,
PRINT #1,
INPUT "Nacisnij Enter "; a$
END SUB
SUB spr2 (lnp) 'Sprawdza czy jest pkt o numerze lnp
SHARED x, y, sprp, ip, lnry(), xy()
sprp = 0
FOR i = 1 TO ip
' PRINT i, lnry(i), xy(i, 1), xy(i, 2)
IF lnry(i) = lnp THEN
sprp = 1
BEEP
PRINT "Jest juz punkt "; lnp
EXIT FOR
END IF
NEXT
END SUB
SUB SPRNR 'Sprawdza czy jest punkt
SHARED x, y, spr, lnr, ip, lnry(), xy()
spr = 0
FOR i = 1 TO ip
' ? i,lnry(i),xy(i,1),xy(i,2)
IF lnry(i) = lnr THEN
spr = 1
x = xy(i, 1)
y = xy(i, 2)
PRINT "Jest pkt "; lnr
PRINT "X="; x, " y="; y
EXIT FOR
END IF
NEXT
IF spr = 0 THEN
ip = ip + 1
lnry(ip) = lnr
INPUT "X, Y ", x, y
xy(i, 1) = x
xy(i, 2) = y
PRINT "ip="; ip
END IF
END SUB
SUB Tytul
k2 = 7 ' napis
k1 = 1 ' tlo
SCREEN 9, 0
COLOR k2, k1
VIEW SCREEN (1, 1)-(637, 348)
LINE (20, 14)-(625, 335), k2, B
PAINT (2, 2), k2
LOCATE 4, 10
PRINT "PODSTAWOWE OBLICZENIA GEODEZYJNE "
LOCATE 5, 10
PRINT "Program POG "
LOCATE 6, 10
PRINT "Autor programu: K. R. 1994"
LOCATE 10, 10
PRINT " Program realizuje nastepujace funkcje "
LOCATE 11, 10
PRINT " 1. Wprowadzenie numerow i wspolrzednych"
LOCATE 12, 10
PRINT " 2. Obliczenie azymutow i dlugosci "
LOCATE 13, 10
PRINT " 3. Obliczenie wspolrzednych na podstawie domiarow "
LOCATE 14, 10
PRINT " 4. Zapis wspolrzednych do pliku "
LOCATE 15, 10
PRINT " 5. Obliczenie pola ze wspolrzednych "
LOCATE 16, 10
PRINT " 6. Obliczenie katow ze wspolrzednych "
LOCATE 20, 10
PRINT "1 - obliczenia, 2 - opis, 3 - wyjscie "
x$ = ""
DO WHILE x$ = ""
x$ = INKEY$
LOOP
SELECT CASE x$
CASE "2"
SCREEN 0
COLOR 14, 0
CLS
CALL opis
CASE "3"
SCREEN 0
COLOR 14, 0
CLS
END
END SELECT
SCREEN 0
COLOR 14, 0
END SUB
SUB tytul2
CLS
LOCATE 3, 10
PRINT "PODSTAWOWE OBLICZENIA
GEODEZYJNE
"
LOCATE 5, 10
PRINT "Autor: K. R.
1994
"
LOCATE 7, 10
LOCATE 9, 10
PRINT " Program realizuje nastepujace funkcje "
LOCATE 11, 10
PRINT " Wprowadzenie numerow i wspolrzednych "
LOCATE 12, 10
PRINT " Obliczenie azymutow i
dlugosci
"
LOCATE 13, 10
PRINT " Obliczenie wspolrzednych na podstawie domiarow "
LOCATE 14, 10
PRINT " Zapis wspolrzednych do
pliku
"
LOCATE 15, 10
PRINT " Obliczenie pola ze
wspolrzednych
"
LOCATE 20, 10
PRINT "1 - obliczenia, 2 - opis, 3 - wyjscie "
x$ = ""
DO WHILE x$ = ""
x$ = INKEY$
LOOP
SELECT CASE x$
CASE "2"
SCREEN 0
CLS
CALL opis
CASE "3"
SCREEN 0
CLS
END
END SELECT
SCREEN 0
END SUB
SUB Wspol 'Wprowadz. wspolrz
SHARED lnr, ip, lnry(), xy(), spr, fp$, fx$
CLS
PRINT "Wprowadzenie wspolrzednych punktow"
INPUT "1 - z klawiatury, 2 - z pliku "; iwar%
IF iwar% = 1 THEN GOTO 100
INPUT "Nazwa pliku danych "; pld$
OPEN "i", #3, pld$
WHILE NOT EOF(3)
INPUT #3, lnr, x, y
ip = ip + 1
PRINT ip,
PRINT USING fp$; lnr;
PRINT USING fx$; x; y
lnry(ip) = lnr
xy(ip, 1) = x
xy(ip, 2) = y
WEND
CLOSE #3
PRINT
INPUT "Nacisnij Enter"; a$
CLS
GOTO 300
100
lnr = 1
DO
CLS
PRINT "Wprowadz nr punktu lub 0 gdy koniec wprowdz. "
PRINT "Gdy nr <> 0 to wprowadz X, Y (oddzielone przecinkiem) "
INPUT lnr
IF lnr <> 0 THEN
CALL SPRNR
END IF
LOOP UNTIL lnr = 0
300
END SUB
SUB Wspoldom 'Oblicz, wspol. z domiarow
SHARED lnr, ip, lnry(), xy(), spr, x, y, fk$, fp$, fx$, sprp
PRINT #1, " Obliczenie wspolrzednych z domiarow prostokatnych "
PRINT #1,
PRINT #1, " Nr pkt
Odcieta
Rzedna
X
Y "
PRINT #1,
lnr = 1
DO WHILE lnr <> 0
CLS
PRINT "Nr punktu pocz A lub 0 gdy koniec obliczen "
INPUT lnr
IF lnr <> 0 THEN
CALL SPRNR
la = lnr
xa = x: ya = y
PRINT "Xa="; xa, " Ya="; ya
PRINT #1, USING fp$; la;
PRINT #1, TAB(41);
PRINT #1, USING fx$; xa; ya
PRINT "Nr nr punktu konc B "
INPUT lnr
CALL SPRNR
lb = lnr
xb = x: yb = y
dx1 = xb - xa: dy1 = yb - ya
dob = SQR(dx1 * dx1 + dy1 * dy1)
PRINT "dx="; dx, " dy="; dy, " d="; dob
INPUT "Dlug. pomierz A-B "; Dp
c = dx1 / Dp: s = dy1 / Dp
PRINT "c="; c, " s="; s
lnp = 1
DO WHILE lnp <> 0
200
PRINT "Nr punktu na domiarze prost. P lub 0 gdy koniec obliczen linii pomiar"
INPUT lnp
IF lnp <> 0 THEN
CALL spr2(lnp)
IF sprp = 1 GOTO 200
INPUT "Odcieta d, rzedna h: "; d, h
dx = c * d - h * s
dy = s * d + h * c
PRINT "dx="; dx, " dy="; dy
x = xa + dx
y = ya + dy
PRINT "Xp="; x, " Yp="; y
ip = ip + 1
lnry(ip) = lnp
xy(ip, 1) = x
xy(ip, 2) = y
PRINT #1, USING fp$; lnp;
PRINT #1, USING fx$; d; h; x; y
END IF
LOOP
PRINT #1, USING fp$; lb;
PRINT #1, TAB(41);
PRINT #1, USING fx$; xb; yb
PRINT #1,
PRINT #1, " Dpom = ";
PRINT #1, USING fx$; Dp;
PRINT #1, " Dobl=";
PRINT #1, USING fx$; dob
PRINT #1,
PRINT #1,
INPUT "Nacisnij Enter "; a$
END IF
LOOP
END SUB
SUB ZapisWsp 'Zapis wspolrz do zbioru
SHARED ip, lnry(), xy(), fp$, fx$, fw$
CLS
PRINT "Nazwa pliku do zapisu wspolrz (Enter - XY.txt) ";
INPUT fw$
IF (fw$ = "") THEN fw$ = "XY.txt"
OPEN fw$ FOR OUTPUT AS #2
FOR i = 1 TO ip
PRINT #2, USING fp$; lnry(i);
PRINT #2, USING fx$; xy(i, 1); xy(i, 2)
NEXT i
CLOSE #2
END SUB
Pole trojkata gdy dane dlugosci bokow a, b, c
' Program PTHeron.bas
' I. Proste obliczenia z geometrii
' Grupa 1. Pole trojkata gdy dane dlugosci bokow a, b, c
' Wzory
' Wzory Herona: Pole=sqr(p*(p-a)(p-b)*(p-c))
' gdzie p=0.5*(a+b+c) - polowa obwodu
' Dlakontroli liczymy wysokosci :
' ha=2*Pole/a hb=2*Pole/b hc=2*Pole/c
' Pa=a*ha/2 Pb=b*hb/2
DECLARE SUB Dane ()
DECLARE SUB oblicz ()
DECLARE SUB plik ()
DECLARE SUB druk ()
COMMON SHARED a, b, c, P, pole, ha, hb, hc, pa, pb, pc
fd$ = "###.###"
fp$ = "####.##"
DEFDBL A-C, H, P
DO
CLS
PRINT "Program PTHeron.bas DATA (mc-dz-rok): "; DATE$; " Godz:"; TIME$
PRINT
PRINT "Pole trojkata gdy dane dlugosci bokow a, b, c"
CALL Dane
CALL oblicz
CALL druk
INPUT "Wydruk do pliku (T/N) "; w$
IF w$ = "T" OR w$ = "t" THEN plik
INPUT "Dalsze obliczenia (T/N) "; do$
LOOP UNTIL do$ = "N" OR do$ = "n"
END 'Koniec programu glownego
SUB Dane
SHARED a, b, c
PRINT
PRINT "Procedura dane"
PRINT "Podaj boki : a, b, c ";
INPUT a, b, c
END SUB
SUB oblicz
SHARED a, b, c, P, pole, ha, hb, hc, pa, pb, pc
fd$ = "###.###"
fp$ = "#####.##"
PRINT
PRINT "procedura oblicz"
P = (a + b + c) / 2
PRINT "a="; a
PRINT "b="; b
PRINT "c="; c
PRINT "p="; P
pole = SQR(P * (P - a) * (P - b) * (P - c))
PRINT "Pole="; pole
ha = 2 * pole / a
hb = 2 * pole / b
hc = 2 * pole / c
pa = a * ha / 2
pb = b * hb / 2
pc = c * hc / 2
PRINT
END SUB
SUB druk
fd$ = "###.###"
fp$ = "#####.##"
PRINT
PRINT "Procedura druk"
PRINT "Boki a, b, c: ";
PRINT USING fd$; a; b; c
PRINT
PRINT "Wyniki"
PRINT "Pole z wzoru herona: ";
PRINT USING fp$; pole
PRINT "Wysokosci trojkata ha, hb, hc: ";
PRINT USING fp$; ha; hb; hc
PRINT "Pola obliczone dla kontroli z wysokosci ha, hb, hc "
PRINT "Pa=a*ha=";
PRINT USING fp$; pa
PRINT "Pb=b*hb=";
PRINT USING fp$; pb
PRINT "Pc=c*hc=";
PRINT USING fp$; pc
PRINT
INPUT "Nacisnij enter "; a$
PRINT
END SUB
SUB plik
fd$ = "###.###"
fp$ = "#####.##"
PRINT
INPUT "Podaj nazwe pliku do wydruku: "; f$
INPUT "Podaj nazwisko obliczajacego: "; Naz$
OPEN f$ FOR APPEND AS 1
PRINT #1,
PRINT #1, " Program PTHeron.bas - wersja Qbasic"
PRINT #1,
PRINT #1, " Obliczenie pola trojkata, gdy dane boki a, b, c"
PRINT #1, "Wzory Herona: pole=sqr(p*(p-a)*(p-b)-(p-c)), gdzie p=(a+b+c)/2"
PRINT #1,
PRINT #1, "Dane: boki trojkata "
PRINT #1, "a="; : PRINT #1, USING fd$; a;
PRINT #1, " b="; : PRINT #1, USING fd$; b;
PRINT #1, " c="; : PRINT #1, USING fd$; c
PRINT #1,
PRINT #1, "Wyniki obliczen:"
PRINT #1, "Wysokosci Ha, Hb, Hc: ";
PRINT #1, USING fd$; ha; hb; hc
PRINT #1,
PRINT #1, "Pole z wzoru Herona =";
PRINT #1, USING fp$; pole
PRINT #1,
PRINT #1, "Pola obliczone dla kontroli z wysokosci Ha, Hb, Hc: "
PRINT #1, "Pa=a*Ha = ";
PRINT #1, USING fp$; pa;
PRINT #1, " Pb=b*Hb=";
PRINT #1, USING fp$; pb;
PRINT #1, " Pc=c*Hc=";
PRINT #1, USING fp$; pc
PRINT #1,
PRINT #1, "Obliczyl: "; Naz$; " Data (mc-dz-rok) "; DATE$; " Godz. "; TIME$
PRINT #1,: PRINT #1,
CLOSE #1
END SUB
Pole trojkata gdy dane 2 dlugosci bokow b, c i kat Alfa miedzy nimi w gradach
' Program PT2DKat,bas QBasic
'I. Proste obliczenia z geometrii
'Grupa 2. Gruszka, Nowak
' 1. Pole trojkata gdy dane 2 dlugosci bokow b, c i kat Alfa miedzy nimi w gradach
' Wzory
' Pole=0.5*b*c*sin(AlfaR), gdzia AlfaR - kąt w radianach
' AlfaR=Alfa/RoG
' Rog=200/Pi: Pi=4*ATN(1) - w Basicu
' Dla kontroli liczymy
' a=sqr(B^2+c^2-2*b*c*cos(AlfaR))
' ha=2*Pole/a
' hb=2*Pole/b
' hc=2*Pole/c
' Pa=a*ha/2
' Pb=b*hb/2
' Pc=c*hc/2
fd$ = "###.###" ' format wydruku dlugosci
fp$ = "#####.##" ' format wydruku pola
fk$ = "####.####"' format wydruku katow
DIM pole AS DOUBLE
DEFDBL A-C, H, P
pi = 4# * ATN(1#)
REM PRINT "Pi="; pi
RoG = 200# / pi ' RO[grad]
DO
' Poczatek petli DO
CLS
PRINT "Program PT2DKat.bas"
PRINT "Pole trojkata gdy dane 2 dlugosci bokow b, c i kat Alfa[grad] miedzy nimi"
PRINT
PRINT "Podaj boki: b, c, Alfa[grad (oddzielone przecinkiem): ";
INPUT b, c, Alfa
'Obliczenia
PRINT "RoG="; RoG
AlfaR = Alfa / RoG
PRINT "AlfaR="; AlfaR
pole = .5# * b * c * SIN(AlfaR)
a = SQR(b ^ 2 + c ^ 2 - 2 * b * c * COS(AlfaR)) ' bok a
ha = 2 * pole / a
hb = 2 * pole / b
hc = 2 * pole / c
pa = a * ha / 2
pb = b * hb / 2
pc = c * hc / 2
' Wydruki
PRINT "Pole trokata o bokach ";
PRINT USING fd$; b; c;
PRINT " i kacie Alfa[grad] miedzy nimi ";
PRINT USING fk$; Alfa;
PRINT " = ";
PRINT USING fp$; pole
PRINT "Bok obliczony a = "; : PRINT USING fd$; a
PRINT
PRINT "Wysokosci ha, hb, hc";
PRINT USING fd$; ha; hb; hc
PRINT
PRINT "Pola obliczone z wysokości "
PRINT "Pa="; : PRINT USING fp$; pa
PRINT "Pb="; : PRINT USING fp$; pb
PRINT "Pc="; : PRINT USING fp$; pc
PRINT
INPUT "Nacisnij Enter "; a$
INPUT "Wydruk do pliku (T/N) "; w$
IF w$ = "T" OR w$ = "t" THEN
INPUT "Podaj nazwe pliku do wydruku "; f$
OPEN f$ FOR APPEND AS 1
PRINT #1, " Program PT2DKat.bas"
PRINT #1, "Obliczenie pola trojkata, gdy dane 2 boki i kat miedzy nimi"
PRINT #1,
PRINT #1, "Dane: ";
PRINT #1, "b=";
PRINT #1, USING fd$; b;
PRINT #1, " c=";
PRINT #1, USING fd$; c;
PRINT #1, " Alfa[grad]= ";
PRINT #1, USING fk$; Alfa
PRINT #1, "Bok obliczony a=";
PRINT #1, USING fd$; a
PRINT #1, "Wysokosci ha, hb, hc: ";
PRINT #1, USING fd$; ha; hb; hc
PRINT #1,
PRINT #1, "Pole = ";
PRINT #1, USING fp$; pole
PRINT #1,
INPUT "Podaj nazwisko obliczajacego: "; Naz$
PRINT #1, "Obliczyl: "; Naz$; " Data (mc-dz-rok) "; DATE$; " Godz. "; TIME$
PRINT #1,
END IF
CLOSE #1
do$ = "T"
PRINT "Dalsze obliczenia (T/N) ";
INPUT do$
LOOP UNTIL (do$ = "N" OR do$ = "n") ' Koniec DO
END
Pole trojkata gdy dane wspolrzedne 3 punktow: x1,y1, x2,y2, x3,y3
DECLARE FUNCTION dlxy# (x1#, y1#, x2#, y2#)
DECLARE FUNCTION PHelm# (a!, b!, c!)
DECLARE FUNCTION dlugxy# (x1#, y1#, x2#, y2#)
' Program PTXY3p.bas QBasic
'I. Proste obliczenia z geometrii
'Grupa 3. Kaleta Gajewski
' 1. Pole trojkata gdy dane wspolrzedne 3 punktow: x1,y1, x2,y2, x3,y3
' Wzory
' dx12=x2-x1
' dy12=y2-y1
' dx13=x3-x1
' dy13=y3-y1
' p1=0.5*(dx12*dy13=dx13*dy12)
' p2=(x1*y2+x2*y3+x3*y1-x3*y2-x1*y3-x28y1)/2
fd$ = "####.###" ' format wydruku dlugosci
fw$ = "#####.###" ' format wydruku wspolrz
fp$ = "#####.##" ' format pola
DEFDBL D, P, X-Y ' Zmienne podwojnej dokladnosci
DEFLNG N
DO
CLS ' Poczatek petli DO
PRINT " Program PTXY3p.PAS"
PRINT
PRINT "Pole trojkata gdy dane wspolrzedne 3 punktow: x1,y1, x2,y2, x3,y3"
PRINT
INPUT "Podaj dane punktu 1: Nr1, X1, Y1 (oddzielone przecinkiem)"; N1, x1, y1
INPUT "Podaj dane punktu 2: Nr2, X2, Y2 (oddzielone przecinkiem)"; N2, x2, y2
INPUT "Podaj dane punktu 3: Nr3, X3, Y3 (oddzielone przecinkiem)"; N3, x3, y3
dx12 = x2 - x1
dy12 = y2 - y1
dx13 = x3 - x1
dy13 = y3 - y1
PRINT "Wyniki"
PRINT "DX12, DY12: "; dx12; dy12
PRINT "DX13, DY13: "; dx13; dy13
P1 = (dx12 * dy13 - dx13 * dy12) / 2 ' Pole metoda 1
PRINT "P1="; P1
P2 = (x1 * y2 + x2 * y3 + x3 * y1 - x3 * y2 - x1 * y3 - x2 * y1) / 2 ' Pole metoda 2
PRINT "P2="; P2
a = dlxy(x2, y2, x3, y3)
b = dlxy(x1, y1, x3, y3)
c = dlxy(x1, y1, x2, y2)
P3 = PHelm(a, b, c)
PRINT "P3=";
PRINT USING "####.##"; P3
PRINT
INPUT "Nacisnij Enter"; a$
' Wydruki
PRINT "Pole trojkata ze wspolrzednych 3 punktow "
PRINT "X1, Y1: ";
PRINT USING fw$; x1; y1
PRINT "X2, Y2: ";
PRINT USING fw$; x2; y2
PRINT "X3, Y3: ";
PRINT USING fw$; x3; y3
PRINT "Pola obliczone z przyrostow wspolrzednych ";
PRINT "P1="; : PRINT USING fp$; P1
PRINT "Pola obliczone bezposrednio ze wspolrzednych ";
PRINT "P2="; : PRINT USING fp$; P2
PRINT "Pola obliczone ze wzoru
Herona
";
PRINT "P3="; : PRINT USING fp$; P3
PRINT "Dlugosci bokow a, b, c ";
PRINT USING fw$; a; b; c
PRINT
INPUT "Nacisnij Enter "; a$
INPUT "Wydruk do pliku (T/N) "; w$
IF w$ = "T" OR w$ = "t" THEN
INPUT "Podaj nazwe pliku do wydruku "; f$
OPEN f$ FOR APPEND AS 1
PRINT #1, " Program PTXY3p.BAS"
PRINT #1, "Pole trokata ze wspolrzednych 3 punktow "
PRINT #1, "Dane"
PRINT #1, "Punkt Nr1, X1, Y1: ";
PRINT #1, USING "#######"; N1;
PRINT #1, USING fw$; x1; y1
PRINT #1, "Punkt Nr2, X2, Y2: ";
PRINT #1, USING "#######"; N2;
PRINT #1, USING fw$; x2; y2
PRINT #1, "Punkt Nr3, X3, Y3: ";
PRINT #1, USING "#######"; N3;
PRINT #1, USING fw$; x3; y3
PRINT #1,
PRINT #1, "Wyniki"
PRINT #1, "Pole dzialki "; N1; "-"; N2; "-"; N3; ""
PRINT #1, "Pola obliczone z przyrostow wspolrzednych ";
PRINT #1, "P1=";
PRINT #1, USING fp$; P1
PRINT #1, "Pola obliczone bezposrednio ze wspolrzednych ";
PRINT #1, "P2=";
PRINT #1, USING fp$; P2
PRINT #1, "Pole obliczone ze wzoru
Herona
";
PRINT #1, "P3=";
PRINT #1, USING fp$; P3
PRINT #1, "Dlugosci bokow a, b, c ";
PRINT #1, USING fw$; a; b; c
PRINT #1,
INPUT "Nazwisko obliczajacego: "; obl$
PRINT #1, "Obliczyl: "; Naz$; " Data (mc-dz-rok) "; DATE$; " Godz. "; TIME$
PRINT #1,
PRINT #1,
END IF
CLOSE #1
do$ = "T"
PRINT "Dalsze obliczenia (T/N) ";
INPUT do$
LOOP UNTIL (do$ = "N" OR do$ = "n") ' Koniec petli DO
END ' Koniec programu glownego
' -- Funkcje --
FUNCTION dlxy (x1, y1, x2, y2) ' Obliczenie dlugosci ze wspolzrednych
' PRINT "Dlxy"
dx = x2 - x1
dy = y2 - y1
d = SQR(dx ^ 2 + dy ^ 2)
' PRINT "d="; d
dlxy = d
END FUNCTION
FUNCTION PHelm (a, b, c) ' Pole trojkata na podstawie dlugosci bokow - wzor Helmerta
p = (a + b + c) / 2
pole = SQR(p * (p - a) * (p - b) * (p - c))
PHelm = pole
END FUNCTION
Pole czworokata gdy dane wspolrzedne 4 punktow: x1,y1, x2,y2, x3,y3, x4,y4
DECLARE FUNCTION dlxy# (x1#, y1#, x2#, y2#)
DECLARE FUNCTION PHelm# (a#, b#, c#)
' Program PczwXY.bas QBasic
' I. Proste obliczenia z geometrii
' Grupa 4. Malecki, Zielinski
' 1. Pole czworokata gdy dane wspolrzedne 4 punktow: x1,y1, x2,y2, x3,y3, x4,y4
' Wzory
' dx13=x3-x1
' dy13=y3-y1
' dx24=x4-x2
' dy24=y4-y2
' p1=(dx13*dy24-dx24*dy13)/2
' p21=(dx12*dy13-dx13*dy12)/2
' p22=(dx13*dy13-dx14*dy13)/2
' p2=p21+p22
fd$ = "####.###" ' format wydruku dlugosci
fw$ = "#####.###" ' format wydruku wspolrz
fp$ = "#####.##" ' format pola
DEFDBL A-E, P, X-Y ' Zmienne rzeczywiste podwojnej dokladnosci
' ---- Program glowny ------
DO ' Poczatek petli DO
CLS
'PRINT "Grupa 4, zad. 1 - Malecki, Zielinski;"
PRINT " Program PczwXY.bas"
PRINT
PRINT "Pole czworoboku gdy dane wspolrzedne 4 punktow: x1,y1, x2,y2, x3,y3, x4, y4"
PRINT
INPUT "Podaj wspolrzedne punktu 1: X1, Y1 "; x1, y1
INPUT "Podaj wspolrzedne punktu 2: X2, Y2 "; x2, y2
INPUT "Podaj wspolrzedne punktu 3: X3, Y3 "; x3, y3
INPUT "Podaj wspolrzedne punktu 4: X4, Y4 "; x4, y4
dx12 = x2 - x1
dy12 = y2 - y1
dx13 = x3 - x1
dy13 = y3 - y1
dx14 = x4 - x1
dy14 = y4 - y1
dx24 = x4 - x2
dy24 = y4 - y2
P1 = (dx13 * dy24 - dx24 * dy13) / 2 ' Pole metoda 1
p21 = (dx12 * dy13 - dx13 * dy12) / 2
p22 = (dx13 * dy14 - dx14 * dy13) / 2
P2 = p21 + p22
PRINT "Wyniki"
PRINT "P1="; P1
PRINT "P2="; P2
a = dlxy(x1, y1, x2, y2)
b = dlxy(x2, y2, x3, y3)
c = dlxy(x3, y3, x4, y4)
d = dlxy(x4, y4, x1, y1)
e = dlxy(x1, y1, x3, y3)
f = dlxy(x2, y2, x4, y4)
P31 = PHelm(a, b, e)
P32 = PHelm(e, c, d)
P3 = P31 + P32
PRINT "P3="; P3
INPUT "Nacisnij Enter"; a$
' Wydruki
CLS
PRINT "Pole czworokata ze wspolrzednych 4 punktow "
PRINT "X1, Y1: ";
PRINT USING fw$; x1; y1
PRINT "X2, Y2: ";
PRINT USING fw$; x2; y2
PRINT "X3, Y3: ";
PRINT USING fw$; x3; y3
PRINT "X4, Y4: ";
PRINT USING fw$; x4; y4
PRINT "Pola obliczone z przyrostow wspolrzednych czworokata ";
PRINT "P1="; : PRINT USING fp$; P1
PRINT "Pola obliczone z sum trojkatow 1-2-3 i 1-3-4 ";
PRINT "P2="; : PRINT USING fp$; P2
PRINT "Pola obliczone ze wzorow
Herona
";
PRINT "P3="; : PRINT USING fp$; P3
PRINT "Dlugosci bokow a, b, c, d, przekatne 1-3, 2-4: "
PRINT USING fw$; a; b; c; d; e; f
PRINT
INPUT "Nacisnij Enter "; a$
INPUT "Wydruk do pliku (T/N) "; w$
IF w$ = "T" OR w$ = "t" THEN ' Wydruki do pliku
INPUT "Podaj nazwe pliku do wydruku "; f$
OPEN f$ FOR APPEND AS 1 ' Otwarcie pliku do zapisu w trybie dopisywania
PRINT #1, " Program PczwXY.bas"
PRINT #1, "Pole czworokata ze wspolrzednych 4 punktow "
PRINT #1,
PRINT #1, "Dane"
PRINT #1, "X1, Y1: ";
PRINT #1, USING fw$; x1; y1
PRINT #1, "X2, Y2: ";
PRINT #1, USING fw$; x2; y2
PRINT #1, "X3, Y3: ";
PRINT #1, USING fw$; x3; y3
PRINT #1, "X4, Y4: ";
PRINT #1,
PRINT #1, "Wyniki"
PRINT #1, USING fw$; x4; y4
PRINT #1, "Pola obliczone z bezposrednio przyrostow wspolrzednych ";
PRINT #1, "P1=";
PRINT #1, USING fp$; P1
PRINT #1, "Pola obliczone z sum pol 2 trojkatow ze wspolrzednych ";
PRINT #1, "P2=";
PRINT #1, USING fp$; P2
PRINT #1, "Pole obliczone z sum pol 2 trojkatow z wzoru Herona ";
PRINT #1, "P3=";
PRINT #1, USING fp$; P3
PRINT #1,
PRINT #1, "Dlugosci bokow a, b, c, d ";
PRINT #1, USING fw$; a; b; c; d
PRINT #1, "Przekatne 1-3, 2-4: ";
PRINT #1, USING fw$; e; f
PRINT #1,
INPUT "Nazwisko obliczajacego: "; obl$
PRINT #1, "Obliczyl: "; obl$; " Data (mc-dz-rok) "; DATE$; " Godz. "; TIME$
PRINT #1,
CLOSE #1 ' Zamkniecie pliku
END IF
do$ = "T"
PRINT "Dalsze obliczenia (T/N) ";
INPUT do$
LOOP UNTIL (do$ = "N" OR do$ = "n") ' Koniec petli DO
END 'Koniec programu glownego
' Funkcje
DEFSNG A-C, E
FUNCTION dlxy (x1, y1, x2, y2) ' Obliczenie dlugosci ze wspolrzednych
dx = x2 - x1
dy = y2 - y1
d = SQR(dx ^ 2 + dy ^ 2)
dlxy = d
END FUNCTION
DEFDBL A-C
FUNCTION PHelm (a, b, c) ' Pole trojkata na podstawie bokow - wzor Helmerta
P = (a + b + c) / 2
pole = SQR(P * (P - a) * (P - b) * (P - c))
PHelm = pole
END FUNCTION
Pole trojkata gdy dane 2 katy Alfa, Beta w gradach i dlugosc boku c
' Program PT2KD.bas QBasic
'I. Proste obliczenia z geometrii
' 1. Pole trojkata gdy dane 2 katy Alfa, Beta w gradach i dlugosc boku c
' Wzory
' Gamma=200-(Alfa+Beta)
' Pi=4*Atn(1)
' RoG=200/Pi
' AlfaR=Alfa/RoG
' BetaR=Bata/Rog
' hc1=a*sin(BetaR)
' hc2=b*sin(AlfaR)
' P1=c*hc1/2
' P2=c*hc2/2
' Dla kontroli liczymy pole z wzoru Herona
DECLARE FUNCTION PHelm# (a#, b#, c#)
fd$ = "####.###" ' format wydruku dlugosci
fp$ = "#####.##" ' format wydruku pola
fk$ = "####.####"' format wydruku katow
DEFDBL A-C, G-H, P
Pi = 4# * ATN(1#)
RoG = 200# / Pi ' Ro[Grad]
DO ' Pocztek petli DO
CLS
PRINT " Program PT2KDl.bas"
PRINT "Pole trojkata gdy dane 2 katy Alfa, Beta w gradach i dlugosc boku c"
PRINT
INPUT "Podaj Alfa[Grad], Beta[Grad], c (oddzielone przecinkami) "; Alfa, Beta, c
Gamma = 200# - (Alfa + Beta)
AlfaR = Alfa / RoG
BetaR = Beta / RoG
GammaR = Gamma / RoG
a = c * SIN(AlfaR) / SIN(GammaR)
b = c * SIN(BetaR) / SIN(GammaR)
PRINT
PRINT "a="; a
PRINT "b="; b
PRINT "c="; c
PRINT "Gamma="; Gamma
hc1 = a * SIN(BetaR)
hc2 = b * SIN(AlfaR)
PRINT "hc1="; hc1
PRINT "hc2="; hc2
P1 = c * hc1 / 2
P2 = c * hc2 / 2
PRINT "P1="; P1
PRINT "P2="; P2
P3 = PHelm(a, b, c)
PRINT "P3="; P3
' Wydruki
CLS
PRINT "Pole trojkata gdy dane: Alfa, Beta, c "
PRINT "Pola obliczone "
PRINT "P1= c*hc1 = "; : PRINT USING fp$; P1
PRINT "P2= c*hc2 = "; : PRINT USING fp$; P2
PRINT "Pole obliczone ze wzoru
Herona
"
PRINT "P3="; : PRINT USING fp$; P3
PRINT "Dlugosci bokow a, b, c: ";
PRINT USING fd$; a; b; c
PRINT
INPUT "Wydruk do pliku (T/N) "; w$
IF w$ = "T" OR w$ = "t" THEN ' Poczatek IF
INPUT "Podaj nazwe pliku do wydruku "; f$
OPEN f$ FOR APPEND AS 1
PRINT #1, " Program PT2KDl.bas"
PRINT #1, "Pole trokata gdy dane: Alfa, Beta, c "
PRINT #1,
PRINT #1, "Alfa[grad], Beta[grad], c: ";
PRINT #1, USING fk$; Alfa; Beta;
PRINT #1, USING fd$; c
PRINT #1,
PRINT #1, "Gamma[grad]="; Gamma
PRINT #1, "Wysokosci z boku c: hc1 = a * SIN(BetaR), hc2 = b * SIN(AlfaR):"
PRINT #1, USING fd$; hc1; hc2
PRINT #1,
PRINT #1, "Pola obliczone "
PRINT #1, "P1= c*hc1 = "; : PRINT #1, USING fp$; P1
PRINT #1, "P2= c*hc2 = "; : PRINT #1, USING fp$; P2
PRINT #1, "Pole obliczone ze wzoru Herona P3= ";
PRINT #1, USING fp$; P3
PRINT #1, "Dlugosci bokow a, b, c ";
PRINT #1, USING fd$; a; b; c
PRINT #1,
PRINT #1,
INPUT "Nazwisko obliczajacego: "; obl$
PRINT #1, "Obliczyl: "; obl$; " Data (mc-dz-rok) "; DATE$; " Godz. "; TIME$
PRINT #1,
CLOSE #1
END IF ' Koniec IF
do$ = "T"
PRINT "Dalsze obliczenia (T/N) ";
INPUT do$
LOOP UNTIL (do$ = "N" OR do$ = "n") ' Koniec petli DO
END ' Koniec programu glownego
'Funkcja
FUNCTION PHelm (a, b, c) ' Obliczenie pola z dlugosci bokow - wzor Helmerta
p = (a + b + c) / 2
' PRINT "a, b, c = "; a, b, c,
pole = SQR(p * (p - a) * (p - b) * (p - c))
PHelm = pole
END FUNCTION
Darmowy hosting zapewnia PRV.PL