alen Ćosić program u visual basicu za …tu su još i poglavlja o programskom jeziku visual basic,...

88
1 SVEUČILIŠTE U ZAGREEBU GEODETSKI FAKULTET Alen Ćosić PROGRAM U VISUAL BASICU ZA RAČUNANJA U GAUSS-KRÜGEROVOJ PROJEKCIJI Diplomski rad Zagreb 2004.

Upload: others

Post on 11-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

1

SVEUČILIŠTE U ZAGREEBU

GEODETSKI FAKULTET

Alen Ćosić

PROGRAM U VISUAL BASICU ZA RAČUNANJA U

GAUSS-KRÜGEROVOJ PROJEKCIJI

Diplomski rad

Zagreb 2004.

Page 2: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

2

Sadržaj

Predgovor……………………………………………………………………….. 3.

1. Uvod ……………………………………………………………………………. 4.

2. Osnovne formule za računanja u Gauss-Krügerovoj projekciji ………………... 5.

2.1. Računanje pravokutnih koordinata i konvergencije meridijana iz

geografskih koordinata …………………………………………………… 5.

2.2. Računanje geografskih koordinata i konvergencije meridijana iz

pravokutnih koordinata ...………………………………………………… 7.

2.3. Računanje redukcije pravca i dužine …………………………………….. 8.

2.4. Računanje pravokutnih koordinata u ravnini iz azimuta i dužine

geodetske linije ………………………………………………………….... 10.

2.5. Računanje dužine i azimuta geodetske linije iz pravokutnih

koordinata u ravnini ……………………………………………………… 11.

2.6. Transformacija pravokutnih koordinata iz jednog koordinatnog

sustava u drugi …………………………………………………………… 12.

3. Visual Basic ……………………………………………………………………. 13.

3.1. Objektno orijentirano programiranje …………………………………….. 13.

3.2. Struktura programa ……………………………………………………….. 14.

4. Program Visual GAUSS ……………………………………………………….. 15.

4.1. Početna forma (splash screen) ……………………………………………. 17.

4.1.1. Popis kontrola na početnoj formi ………………………………… 18.

4.1.2. Programski kôd početne forme …………………………………... 19.

4.2. Forma "Izbor" ……………………………………………………………. 20.

4.2.1. Popis kontrola na formi "Izbor" ………………………………….. 21.

4.2.2. Programski kôd forme "Izbor" …………………………………… 21.

4.3. Forma "Zadatak 1" ……………………………………………………….. 23.

4.3.1. Popis kontrola na formi "Zadatak 1" ……………………………... 28.

4.3.2. Programski kôd forme "Zadatak 1" ………………………………. 29.

4.4. Forma "Zadatak 2" ………………………………………………………... 37.

4.4.1. Popis kontrola na formi "Zadatak 2" ……………………………… 38.

4.4.2. Programski kôd forme "Zadatak 2" ………………………………. 38.

4.5. Forma "Zadatak 3" ………………………………………………………... 42.

4.5.1. Popis komandi na formi "Zadatak 3" ……………………………... 44.

4.5.2. Programski kôd forme "Zadatak 3" ………………………………. 44.

4.6. Forma "Zadatak 4" ………………………………………………………... 50.

4.6.1. Popis komandi na formi "Zadatak 4" ……………………………... 51.

4.6.2. Programski kôd forme "Zadatak 4" ……………………………….. 51.

4.7. Forma "Zadatak 5" ………………………………………………………... 58.

4.7.1. Popis komandi na formi "Zadatak 5" ……………………………... 59.

4.7.2. Programski kôd forme "Zadatak 5" ………………………………. 59.

4.8. Forma "Zadatak 6" ……………………………………………………….. 66.

4.8.1. Popis kontrola na formi "Zadatak 6" …………………………….. 67.

4.8.2. Programski kôd forme "Zadatak 6" ……………………………… 67.

4.9. Forma "Spremanje" ………………………………………………………. 71.

Page 3: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

3

4.9.1. Popis komandi na formi "Spremanje" ……………………………. 72.

4.9.2. Programski kôd forme "Spremanje" ……………………………… 73.

4.10. Modul "Konstante" ……………………………………………………….. 75.

4.10.1. Programski kôd modula "Konstante" …………………………….. 75.

5. Testiranje programa ……………………………………………………………. 79.

5.1. Testiranje prvog zadatka …………………………………………………. 79.

5.2. Testiranje drugog zadatka ………………………………………………... 81.

5.3. Testiranje trećeg zadatka …………………………………………………. 82.

5.4. Testiranje četvrtog zadatka ………………………………………………. 83.

5.5. Testiranje petog zadatka …………………………………………………. 84.

5.6. Testiranje šestog zadatka ………………………………………………… 85.

6. Literatura ………………………………………………………………………. 86.

7. Sažetak…………………………………………………………………………. 87.

Page 4: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

4

Predgovor

Osnovu ovog diplomskog rada čini program, napravljen u Visual Basicu, za računanja u

Gauss-Krügerovoj projekciji, pod imenom VisualGAUSS. Pored objašnjenja samog programa

tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja

u Gauss-Krügerovoj projekciji te testiranje programa. Budući da sam imao na raspolaganju

program GAUSHN, napravljen za istu svrhu u programu QBASIC, često sam se pozivao na

njega, naročito pri testiranju programa gdje je poslužio kao predložak za kontrolu računanja

programa VisualGAUSS.

Želio bih se zahvaliti svim osobama koje su radile na izradi tog programa zbog toga što su mi

umnogome olakšale stvaranje mog programa, koristio sam njihove matematičke izvode već

prilagođene računalnoj obradi, a tokom cijele izrade diplomskog rada uspoređivao sam

kvalitetu svog programa s programom GAUSHN.

Također se zahvaljujem svom mentoru, prof. dr. sc. Nedjeljku Frančuli na svesrdnoj pomoći i

savjetima koji su mi najviše pomogli.

Page 5: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

5

1. Uvod

Gauss-Krügerova projekcija je poprečna cilindrična projekcija elipsoida u ravninu, te pripada

grupi tzv. "geodetskih projekcija", odnosno projekcija za potrebe državne izmjere. To su

projekcije koje služe za određivanje pravokutnih koordinata trigonometrijskih točaka u

ravnini. Takva projekcija treba poslužiti kao matematička osnova za sva računanja u ravnini i

za izradu planova i karata najkrupnijih mjerila.

Austrija je bila prva država koja je uvela Gauss-Krügerovu projekciju za potrebe državne

izmjere 1917.god., slijedila je Njemačka 1923.god., a Jugoslavija je

Gauss-Krügerovu projekciju uvela 1924.god.

Projekcija je dobila ime po velikom njemačkom znanstveniku Carlu-Friedrichu Gaussu

(1777-1855) koji je i geodeziju zadužio mnogim otkrićima. Između 1821. i 1825. godine on je

pri izračunavanju hanoverske triangulacije za preslikavanje s elipsoida u ravninu primjenio

način preslikavanja koji danas nosi njegovo ime. Prof. dr. L. Krüger je 1912. objavio knjigu o

toj projekciji, a 1919. zbirku formula za praktičnu primjenu, te se od tada ta projekcija naziva

Gauss-Krügerova projekcija. U literaturi s engleskog govornog područja ova se projekcija

susreće pod nazivom Transverse Mercator Projection.

Budući da se geodetske projekcije osim za izradu karata krupnih mjerila koriste kao osnova za

sva računanja u ravnini, to je u njihovom proučavanju osim računanja geodetskih koordinata u

ravnini iz geografskih koordinata potrebno riješiti i niz ostalih zadataka:

1. računanje geografskih koordinata iz pravokutnih koordinata u ravnini projekcije

2. račuanje konvergencije meridijana iz geografskih i pravokutnih koordinata

3. računanje linearnog mjerila iz geografskih i pravokutnih koordinata

4. računanje redukcije pravaca i dužina

5. računanje pravokutnih koordinata točke, kad su zadane pravokutne koordinate jedne

točke i duljina i azimut geodetske linije

6. računanje duljina i azimuta geodetske linje iz pravokutnih koordinata dviju točaka

7. transformacija koordinata između susjednih koordinatnih sustava

Page 6: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

6

2. Osnovne formule za računanja u Gauss-Krügerovoj

projekciji

2.1. Računanje pravokutnih koordinata i konvergencije meridijana iz

geografskih koordinata

f =konst.

l=ko

nst.

+x

+y

Ty

x

x

x0=B0

P0

f

x

T

+y

l=ko

nst.

f =konst.

y

+x

x

x0=B

P0

Slika 2.1: Računanje pravokutnih koordinata iz geografskih koordinata

=co

nst.

=co

nst.

cy

x

c

T

y

x

Slika 2.2: Konvergencija meridijana

Pravokutne koordinate računamo po formulama:

6

3

4

2

2

1 )()()( lxlxlxBx ,

5

3

3

21 )()()( lylylyy .

Page 7: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

7

Pri čemu je:

)6sin6

4sin4

2sin2

)(1( 000

0

2 DCB

AeB ,

cos)( 1 Ny ,

)1(6

cos)( 22

3

2

tN

y ,

)5814185(120

cos)( 22242

5

3 tttN

y

,

cossin2

)( 1

Nx ,

)495(cossin24

)( 4223

2 tN

x ,

)5861(cossin720

)( 425

3 ttN

x .

Konvergencija meridijana se računa na ovaj način:

5

2

3

1 )()(sin lclclc .

Koeficijente u gornjoj formuli računamo po ovim formulama:

)231(cossin3

1)( 422

1 c ,

)2(cossin15

1)( 24

2 tc .

Pri čemu je:

22 sin1 eaN ,

2

22 )(

a

bae

,

2

22 )('

b

bae

.

B- dužina luka meridijana od ekvatora do paralele s geografskom širinom

l- razlika geografskih dužina srednjeg meridijana ( 0 ) i neke točke u odnosu na početni

meridijan ( 0 l )

N- polumjer zakrivljenosti prvog vertikala

φ- geografska širina

t- tg

- cos'e (e'- drugi linearni ekscentricitet elipse)

0A =1.00503730594646

Page 8: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

8

0B =0.00504784913836498

0C =0.0000105637864667293

0D =0.0000000206333485024118

2.2. Računanje geografskih koordinata i konvergencije meridijana iz

pravokutnih koordinata

+x

T

l=ko

nst.

f =konst.

+y

f

P0

x0=B0

+y

f =konst.

l=ko

nst.

T

x0=B

+x

P0

F

x

f 1=konst.

F

f

Slika 2.3: Računanje geografskih koordinata iz pravokutnih koordinata

Geografske koordinate računamo po formulama:

6

3

4

2

2

11 )()()( yyy ,

5

3

3

21 )()()( ylylyll .

Pri čemu je:

)1(2

)( 2

12

1

11

N

t,

)6635(24

)( 2

1

2

1

2

1

2

14

1

12 tt

N

t ,

)459061(720

)( 4

1

2

16

1

13 tt

N

t ,

11

1cos

1)(

Nl ,

1

3

1

2

1

2

12

cos6

21)(

N

tl

,

1

5

1

4

1

2

13

cos120

24285)(

N

tl

.

Page 9: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

9

Konvergenciju meridijana računamo pomoću:

5

5

3

43 )()()( ycycycc .

Vrijednosti koeficijenata računamo ovako:

1

13 )(

N

tc ,

)1(3

)( 2

1

2

13

1

14 t

N

tc ,

)352(15

)( 4

1

2

15

1

15 tt

N

tc .

l- razlika geografskih dužina srednjeg meridijana ( 0 ) i neke točke u odnosu na početni

meridijan ( 0 l )

N- polumjer zakrivljenosti prvog vertikala

φ- geografska širina

t- tg 1

- 1cos' e (e'- drugi linearni ekscentricitet elipse)

2.3. Računanje redukcije pravca i dužine

P

E1E

P1

T 1s T 2

x

y

T 2

'

T 1'

d

s'

y 2

y 1x2

x1

x

y

T 2'

T 1'

d

s'

u

v

Slika 2.4: Geodetska linija na elipsoidu(s) i njezina projekcija(s')

te redukcije pravaca 2

1 i 1

2

Redukcija dužine se računa po ovoj formuli:

6

4 21 mmm

s

d m ,

Page 10: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

10

4

4

2

2

2421

R

y

R

ym ,

MNR ,

322

2

)sin1(

)1(

e

eaM

.

Redukcije pravaca računamo ovako:

21

2

1 ,

)( 21

2

1 ,

yykyxkyxk mmm 2

3

3

211 ,

xyk 42 .

Varijable 4321 ,,, kkkk određujemo pomoću:

2

''

12 mR

k

,

4

''

26 mR

k

,

3

2

''

3

m

mm

R

tk

,

2

''

412 mR

k

.

s - duljina geodetske linije na elipsoidu ,

d - duljina pravca između dviju točaka u ravnini ,

my - ordinata točke na polovici geodetske linije ,

mR - polumjer zakrivljenosti na srednjoj širini m ,

mm t, - veličine koje se odnose na srednju geografsku širinu m .

Page 11: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

11

2.4. Računanje pravokutnih koordinata u ravnini iz azimuta i duljine

geodetske linije

y

c

T 1(y1,x1)

l2=const.

l1=const.

tangenta

+ys'

d

+x

T 2(y2,x2)

x

Slika 2.5: Prvi geodetski zadatak

Zadatak se rješava po ovim formulama:

yyy 12 , xxx 12 ,

2

1sindy , 2

1cosdx ,

2

1

2

1

2

1 c , 6

4 21 mmm

s

d m .

Konvergencija meridijana se računa po formuli navedenoj u odjeljku 2.2.

Za računanje veličine 2

1 i mjerila 2m i mm potrebne su približne koordinate točke koja se

računa, a te koordinate se izračunavaju po formulama:

0102 )( yyy , 0102 )( xxx ,

2

10 sin sy , 2

10 cos sx ,

gdje je

c 2

1

2

1

Page 12: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

12

2.5. Računanje duljine i azimuta geodetske linije iz pravokutnih koordinata

dviju točaka u ravnini

T 1

T 2

y 1

x1

y 2

x2

+ys'

d

+x

Slika 2.6: Drugi geodetski zadatak

6

4 21 mmm

s

d m , 22 yxd ,

2

11

2

1

2

1 c ,

1

22

1

2

1

2 c .

1

2

2

1 , azimuti geodetske linije u prvoj i drugoj točki

1

2

2

1 , smjerni kutovi u prvoj i drugoj točki

c konvergencija meridijana

1

2

2

1 , popravci za zakrivljenost projekcije geodetske linije u prvoj i drugoj točki

Page 13: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

13

2.6. Transformacija pravokutnih koordinata iz jednog koordinatnog

sustava u drugi

=const.

=const.

ekvator

L L0L'

l0 l0

l l'

T

T1

T0

x

x0

y0

y

x1=B0=x0 x2=B0'

T2

y0'

y'

x0'

y

x

Slika 2.7: Susjedni koordinatni sustavi

542

4

3242

2

22

2

322

2)185(

120

1)21(

6

1

2

1)1(

6

1' ztt

Nytt

Nyzt

Nzt

Nzy

442

4

3242

4

2342

4)38(

24

1)21(

12

1)5(

12

1yztt

Nyztt

Nyztt

N

542

4)4185(

120

1ytt

N

2222

3

422

3

22 )1(4

)95(24

)(2

' yztN

tzt

N

tyz

N

txx

422

3

322

3)35(

24)21(

6yt

n

tyzt

N

t

xy, -koordinate točke u sustavu iz kojeg se transformiraju točke,

',' xy -koordinate točaka u sustavu u koji se transformiraju točke,

1cos Nyz (pri prijelazu iz istočnog u zapadni sustav uzima se s negativnim

predznakom)

1 -širina točke F koja leži na srednjem meridijanu zadanog sustava i ima apscisu x ,

Page 14: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

14

3. Visual Basic

Visual Basic je Windows aplikacija za izradu programa prilagođenih korisniku.

Jedan je od najpoznatijih programskih jezika temeljenih na teoriji tzv. objektno orijentiranog

programiranja.

Proizvod je korporacije Microsoft, što jamči izvrsnu povezanost s drugim softverskim

proizvodima iste tvrtke, a dostupan je u tri verzije koje se razlikuju po svojim mogućnostima i

količini ugrađenih funkcija. To su :

-Learning edition

-Professional edition

-Enterprise edition

3.1. Objektno orijentirano programiranje

Kod Basica i Qbasica (kao i kod svih drugih tradicionalnih programskih jezika) izvršenje

programa počinje prvim napisanim redom izvršnog kôda i slijedi unaprijed definirani put,

pozivajući po potrebi potprograme. Programi se izvršavaju sekvencijalno, tj. naredbe se

izvršavaju u nizu jedna za drugom.

Kod programa upravljanim događajima (event-driven application), u koje se ubraja i Visual

Basic to je riješeno na drukčiji način. Kod njih također postoji početna točka programa ali od

tada se svi događaji koje uzrokuje korisnik predaju programu, koji na njih odgovara pozivom

kôda. Stoga redoslijed u kojem će se kôd izvršavati ovisi o tome koji događaj će se dogoditi,

što ovisi o tome što čini korisnik.

Kôd koji se poziva u Visual Basicu zove se procedura događaja. Procedura događaja je dio

programa koji se izvršava kad korisnik (mišem ili tipkovnicom) uzrokuje neki događaj.

To je zapravo osnovna ideja grafičkog korisničkog sučelja ( graphical user interface- GUI ) i

programiranja upravljanog događajima: korisnik upravlja događajima, odnosno određuje

smjer izvršavanja programa dok kôd odgovara na te događaje.

Kod strukturiranih programskih jezika (Basic, C, Pascal i dr.) kreiranje grafičkog korisničkog

sučelja je zahtijevalo pisanje velike količine programskog kôda, jer se samo tako moglo

definirati izgled, položaj i funkciju svakog elementa. Danas se to rješava mnogo lakše i

efikasnije tako da jednostavno dodajemo postojeće objekte na željeno mjesto na ekranu.

Pojedini objekti se povezuju u složenu cjelinu pomoću prozora koji se naziva forma (form).

Objekti koji se stavljaju na formu nazivaju se kontrolni objekti ili kontrole (controls).

Temeljne kontrole na koje nailazimo u svim Windows aplikacijama su:

-gumbi naredbi (command buttons)

-izborni gumbi (option buttons)

-kontrolni okviri (check boxes)

-linije pomicanja (scroll bars)

-okviri liste (list boxes) i sl.

Pojam objekt se odnosi na sve forme, kontrole i posebne objekte (npr. Printer, Screen i sl.)

Svaki objekt ima određena svojstva (Properties), a to su atributi pomoću kojih se utječe na

izgled i ponašanje objekta. Na objekte se primjenjuju postupci (Methods), npr. Postupak Move

pomiče formu ili kontrolu na koju se odnosi.

Page 15: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

15

Slika 3.1: Izgled sučelja Visual Basica 6.0

3.2. Struktura programa

Visual Basic ima razvojnu okolinu koja omogućava stvaranje formi i pisanje kôda. Program

se u Visual Basicu naziva projekt (datoteka s ekstenzijom .VBP), a sastoji se iz grafičkog

sučelja (forme i kontrole) i procedura događaja (oboje spremljeno u datoteke s

ekstenzijom .FRM). Kôd čine procedure događaja i moduli. Procedure događaja vežu se uz

događaj na nekoj kontroli ili formi i čine sastavni dio forme.

Za razliku od njih, moduli su dijelovi programa koji obično ne pripadaju nijednoj formi i

mogu se pozvati iz bilo kojeg dijela programa. Moduli su datoteke s ekstenzijom .BAS, što

asocira da sadrže Basic kôd. U modulima obično definiramo globalne konstante i varijable

(prepoznatljive u cijelom programu) te pišemo kôd za funkcije koje pozivamo više puta

tijekom izvođenja programa, da bismo izbjegli njihovo višestruko pisanje.

Pisanje programa odvija se u dva jednako važna koraka:

-stvaranje grafičkog sučelja

-pisanje programskog kôda

Prvi zadatak kod programiranja je stavljanje kontrola na formu (kontrole jedinstvene svim

Windows aplikacijama) a zatim slijedi pisanje odgovarajućeg kôda.

Page 16: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

16

4. Program Visual GAUSS

Visual GAUSS je napravljen na temelju postojećeg programa GAUSHN, izrađenog na

Geodetskom fakultetu 1992. god. u programskom jeziku QBASIC i modificiranog 2000. god.

Pri rješavanju zadatka nastojao sam zadržati strukturu postojećeg programa da bih što više

olakšao upotrebu onim korisnicima koji su se već koristili programom GAUSHN.

Program se sastoji iz deset logičkih cjelina:

1) početna forma sa osnovnim podacima o programu (tzv. splash screen)

2) forma sa ponuđenih šest zadataka

3) forma za računanje pravokutnih koordinata u ravnini i konvergencije meridijana iz

geografskih koordinata

4) forma za računanje geografskih koordinata i konvergencije meridijana iz

pravokutnih koordinata u ravnini

5) forma za računanje redukcije pravca i duljine

6) forma za računanje pravokutnih koordinata u ravnini iz duljine i azimuta geodetske

linije

7) forma za računanje duljine i azimuta geodetske linije iz pravokutnih koordinata u

ravnini

8) forma za transformaciju pravokutnih koordinata iz jednog sustava u drugi

9) forma za spremanje izračunatih podataka u odabranu datoteku

10) modul sa definiranim konstantama i varijablama te s nekoliko često korištenih

funkcija.

Svaki od tih dijelova, zahvaljujući načinu pisanja aplikacije u Visual Basicu, predstavlja

zasebnu logičku cjelinu koja je neovisna od ostatka programa te bi, uz minimalne preinake,

mogla zasebno ispravno raditi ili se koristiti u nekoj drugoj aplikaciji. Zbog toga će i sam

program biti objašnjen po tim cjelinama.

Svaki zadatak je riješen na gotovo identičan način, što olakšava korištenje programa, tako da

sve komandne gumbe vidimo na istom mjestu na svim formama a razlike su samo u podacima

koji se unose i koje dobijemo na kraju računanja.

Na početku svake forme vidimo samo lijevu stranu koja služi za unos podataka od strane

korisnika dok se desna pojavljuje tek nakon pritiska na gumb "Računaj".

Pri pomicanju između kontroli na formama koristimo se pokazivačem miša ili tipkom "Tab".

Pri ograničavanju unosa samo na znamenke koristio sam se istim programskim kôdom na

svim formama, koristeći ASCII-kôdove. Jedina loša strana takvog ograničavanja unosa je

nemogućnost korištenja razmaknice, entera i backspacea jer one nemaju određen ASCII-kôd

pa nisam bio u mogućnosti uključiti ih u dozvoljene znakove.

Pripadni programski kôd je:

If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 End If

To je riješeno pomoću If...Then petlje koja kontrolira da ASCII-kôd unešenog znaka nije

manji od ASCII-kôda znaka "0" ili veći od znaka "9".

Ako pokušamo unijeti bilo koji drugi znak, javi se poruka o grešci u standardnom Windows

obliku:

Page 17: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

17

Slika 4.1: Izgled poruke o grešci pri unosu

Sve forme zadataka su napravljene pomoću tri vrste kontrola:

1) komandne tipke- služe za izazivanje procedure nekog događaja, npr. procedura

događaja pritiska (klika) tipke "Kraj" prekida rad s programom

2) okviri teksta- služe za unos podataka od strane korisnika te prikaz izračunatih

vrijednosti

3) oznake (labels)- služe pobližem objašnjenju funkcije svake kontrole

Slika 4.2: Komandne tipke, okviri teksta i oznake

Sve kontrole su opremljene s pomoćnim tekstom (eng. tooltip text) koji služi za pojašnjavanje

svake pojedine kontrole na formama, a pojavljuje se nakon što ostavimo pokazivač miša da

miruje na određenoj kontroli.

Page 18: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

18

Slika 4.3: Izgled pomoćnog teksta

Budući da su matematičke formule preuzete gotovo u potpunosti iz programa GAUSHN, a

svode se na osnovne formule za računanja u Gauss-Krügerovoj projekciji koje su već

objašnjene, one neće biti navedene u objašnjenju zadataka.

Sam postupak računanja se pokreće nakon što smo unijeli sve neophodne vrijednosti te

pritisnuli tipku "Računaj".

4.1. Početna forma (splash screen)

Slika 4.4: Izgled početnog prozora

Page 19: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

19

Pri pokretanju programa pojavljuje se početni prozor s osnovnim podacima o programu.

Do glavnog dijela programa se dolazi pritiskom bilo koje tipke na tipkovnici ili pritiskom na

tipku miša, što je riješeno pomoću sljedećeg programskog kôda:

Private Sub Form_Click() izbor.Show Unload Me End Sub Private Sub Form_KeyPress(KeyAscii As Integer) izbor.Show Unload Me End Sub

Procedura Form_Click() znači pritisak bilo koje tipke a procedura Form_KeyPress(KeyAscii

As Integer) označava pritisak tipke miša. Naredba izbor.Show prikazuje formu nazvanu

"Izbor" dok naredba Unload Me briše početnu formu iz memorije.

Budući da se na formi nalazi nekoliko oznaka s tekstom, ista procedura mora biti napisana i za

njih, jer u protivnom klik mišem na njih ne bi izazvao željeni odgovor.

4.1.1. Popis kontrola na početnoj formi

Radi lakšeg čitanja, prije samog izlistavanja programskog kôda, navest ću popis kontrolâ s

njihovim imenima uz objašnjenja osnovnih naredbi.

Neću se upuštati u detaljno objašnjenje programa zbog toga što bi to zahtjevalo i objašnjenje

sintakse i velikog broja naredbi Visual Basica, što ne spada u temu ovog diplomskog rada.

Za to nema ni posebne potrebe jer je većina naredbi ista, ili barem slična, naredbama u

klasičnom BASIC-u, pa tok programa može pratiti svatko tko je programirao u BASIC-u.

Splash - naziv forme

Frame1 - okvir unutar kojeg se nalazi sav tekst

Label-Label4 - oznake pomoću koji je napisan tekst na formi

Na početku se vidi izraz "Option Explicit", koji znači da svaka varijabla i konstanta mora biti

definirana na početku a u svrhu transparentnijeg pisanja sintakse i smanjivanja mogućnosti

greški kod programiranja.

Svaka kontrola ima određen broj događaja, npr. click, dblclick (dvostruki klik), keypress

(pritisak tipke), mousemove (pokret miša na kontroli) i sl. Kod programiranja se pišu

procedure (možemo ih uvjetno nazvati potprogramima) za željeni događaj i to u ovakvom

obliku:

Private Sub Frame1_Click()

Nakon skupa naredbi procedura događaja završava s izrazom "End Sub".

Page 20: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

20

4.1.2. Programski kôd početne forme Option Explicit Private Sub Form_Click() izbor.Show Unload Me End Sub Private Sub Form_KeyPress(KeyAscii As Integer) izbor.Show Unload Me End Sub Private Sub Frame1_Click() izbor.Show Unload Me End Sub Private Sub Label1_Click() izbor.Show Unload Me End Sub Private Sub Label2_Click() izbor.Show Unload Me End Sub Private Sub Label3_Click() izbor.Show Unload Me End Sub Private Sub Label4_Click() izbor.Show Unload Me End Sub

Page 21: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

21

4.2. Forma "Izbor"

Slika 4.5: Izgled forme "Izbor"

Na ovoj formi su prikazani osnovni zadaci za računanje u Gauss-Krügerovoj projekciji

pomoću gumba izbora. Moguće je istovremeno odabrati samo jednu od opcija a izbor vršimo

dvostrukim pritiskom lijeve tipke miša ili jednim pritiskom na opciju te pritiskom na tipku

"Dalje", analogno kao u većini Windows aplikacija. Isto možemo napraviti pomoću

tipkovnice tako da strelicama namjestimo fokus na željenu opciju te pritisnemo tipku "Enter".

Programski kod je i za ovu formu prilično jednostavan, a osnovni dio je povezan s tipkom

"Dalje":

Private Sub dalje_Click() If Opcija1.Value = True Then zadatak1.Show ElseIf Opcija2.Value = True Then zadatak2.Show ElseIf Opcija3.Value = True Then zadatak3.Show ElseIf Opcija4.Value = True Then zadatak4.Show ElseIf Opcija5.Value = True Then zadatak5.Show ElseIf Opcija6.Value = True Then zadatak6.Show

Page 22: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

22

Else: MsgBox "Odaberite jednu od opcija prije nastavka programa", vbExclamation, "Upozorenje" Exit Sub End If izbor.Hide End Sub

Ako je jedna od opcija odabrana (ako je njena vrijednost istinita, odnosno true), prikazuje se

forma odgovarajućeg zadatka, u protivnom se prikazuje upozorenje da nije odabrana ni jedna

opcija i vraćamo se na formu "Izbor". Ukoliko je odabrana jedna od opcija prikazuje se forma

dotičnog zadatka, dok se forma "Izbor" sakriva (odlučio sam se za sakrivanje, umjesto

izbacivanja forme iz memorije, zbog toga što je moguće često mijenjati željeni zadatak, za to

nam treba forma "Izbor" a na ovaj način ona je uvijek aktivna u pozadini programa.

U slučaju dvostrukog pritiska lijeve tipke miša na jednu od opcija, program poziva proceduru

za slučaj pritiska tipke "Dalje", što također daje ispravan rezultat. Programski kôd za sve

opcije je analogan a ovdje navodim kôd za prvu opciju:

Private Sub Opcija1_DblClick() Call dalje_Click End Sub

Pritiskom na tipku "Kraj" završavamo rad s programom (isti rezultat postižemo pritiskom na

tipku "Esc") pomoću sljedećeg koda:

Private Sub kraj_Click() End End Sub

4.2.1. Popis kontrola na formi "Izbor"

Izbor - naziv forme

Frame1 - okvir

Label1 - oznaka s tekstom

Opcija1-Opcija6 - opcije za šest zadataka

Dalje - komandna tipka za nastavak rada s programom

Kraj - komandna tipka za kraj rada s programom

4.2.2. Programski kôd forme "Izbor"

Option Explicit Private Sub dalje_Click() If Opcija1.Value = True Then zadatak1.Show ElseIf Opcija2.Value = True Then zadatak2.Show ElseIf Opcija3.Value = True Then

Page 23: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

23

zadatak3.Show ElseIf Opcija4.Value = True Then zadatak4.Show ElseIf Opcija5.Value = True Then zadatak5.Show ElseIf Opcija6.Value = True Then zadatak6.Show Else: MsgBox "Odaberite jednu od opcija prije nastavka ", vbExclamation, "Upozorenje" Exit Sub End If izbor.Hide End Sub Private Sub kraj_Click() End End Sub Private Sub Opcija1_DblClick() Call dalje_Click End Sub Private Sub Opcija2_DblClick() Call dalje_Click End Sub Private Sub Opcija3_DblClick() Call dalje_Click End Sub Private Sub Opcija4_DblClick() Call dalje_Click End Sub Private Sub Opcija5_DblClick() Call dalje_Click End Sub Private Sub Opcija6_DblClick() Call dalje_Click End Sub

Page 24: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

24

4.3. Forma "Zadatak 1"

Ovaj dio programa služi za računanje pravokutnih koordinata u ravnini i konvergencije

meridijana iz geografskih koordinata.

Na početku rada s ovom, kao i sa svim ostalim formama, vidljiva je samo lijeva strana,

odnosno dio predviđen za unos podataka, te je na taj način olakšano snalaženje u programu.

Slika 4.6: Izgled lijeve strane forme "Zadatak 1" prije računanja

Vrijednosti se unose u okvire teksta (eng. text box) i to na način da je u okvir teksta predviđen

za ime točke dopušten unos svih znakova, dok je u ostalim okvirima dopušten unos samo

brojeva.

Iz praktičnih razloga sam podijelio unos stupnjeva, minuta, sekundi i decimala u posebne

okvire teksta, na taj način je moguće kontrolirati da su sve veličine u dozvoljenim granicama.

Tek nakon što smo unijeli sve neophodne vrijednosti za računanje možemo nastaviti s radom,

a ako pokušamo računati bez svih vrijednosti pojavit će se poruka o grešci nakon koje se

kursor postavlja na prvo nepopunjeno mjesto u formularu. Budući da ime točke nije

neophodan podatak možemo nastaviti s radom i bez njega.

Page 25: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

25

Slika 4.7: Izgled poruke o grešci pri unosu

Pripadni programski kôd je objašnjen na primjeru za unos sekundi geografske širine, te je

riješeno analogno za sve ostale. If...Then petlja služi za postavljanje fokusa na okvir teksta

koji nije ispunjen, u pripadnom primjeru na okvire teksta za stupnjeve i minute:

If Txtfistu.Text = "" Or txtfimin = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtfistu.Text = "" Then Txtfistu.SetFocus ElseIf txtfimin = "" Then txtfimin.SetFocus End If Exit Sub End If

Pri unosu podataka u svaki okvir teksta kontrolira se vrijednost unešenog broja, te ako ona

prelazi zadane granice pojavljuje se poruka o grešci nakon koje se dotični okvir teksta briše te

ponovo unosimo pripadnu vrijednost. Osnovna svrha ove kontrole je otkrivanje grubih

grešaka pri unosu podataka. Pripadni algoritam je objašnjen na primjeru za unos geografske

širine, dok se kod minuta, sekundi i decimala razlikuje samo u zadanim granicama.

If Val(Txtfistu.Text) < 0 Or Val(Txtfistu.Text) > 90 Then KeyAscii = 0 Txtfistu.Text = "" MsgBox "Geografska širina mora biti u rasponu od 0 do 90 stupnjeva", vbExclamation, "Upozorenje" Txtfistu.SetFocus End If Ako je vrijednost geografske širine manja od 0 ili veća od 90 briše se okvir teksta, ispisuje

poruka upozorenja te se na okvir teksta namjesti fokus radi ponovnog unosa.

Page 26: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

26

Slika4.8: Izgled poruke o grešci pri unosu neprimjerene geografske širine

Slika 4.9: Izgled forme "Zadatak 1" nakon računanja

Nakon unosa svih veličina i pritiska na gumb "Računaj" postaje vidljiva desna strana forme

na kojoj se nalaze izračunate vrijednosti te postaje aktivna i tipka "Spremi", koja je do tad bila

onemogućena.Taj dio je riješen pomoću svojstava (properties) objekata.

Svojstvo vidljivosti okvira Frame2 je na početku programa podešeno na vrijednost "False", a

mijenja se u istinitu vrijednost tek nakon što smo unijeli sve neophodne podatke za računanje

i pritisnuli tipku "Računaj".

Tipka "Spremi" nam postaje dostupna mijenjanjem svojstva "Enabled"(omogućen) na

analogan način. Dio programa koji nam to omogućava je sljedeći:

Frame2.Visible = True CmdSpremi.Enabled = True

Page 27: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

27

Nakon računanja dolazimo do dijela koji je praktički isti za sve zadatke pa će biti objašnjen

samo u ovom poglavlju.

Najvažnija je mogućnost spremanja u datoteku po vlastitom izboru, što se postiže pritiskom

na gumb "Spremi". Nakon toga se otvara prozor za pohranjivanje, koji omogućuje

pohranjivanje u već postojeću datoteku ili kreiranje nove, s vlastitim imenom i ekstenzijom te

na točno određeno mjesto i točno određeni medij za pohranu podataka.

Prozor za pohranjivanje će biti objašnjen u posebnom poglavlju, a ovdje slijedi samo

objašnjenje vezano uz prvi zadatak.

Programski kôd za rješavanje ove zadaće je sljedeći:

Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" On Error GoTo greška decfi = Val(Txtfisek) + Val(Txtfidec) / 10000 decla = Val(txtlasek) + Val(Txtladec) / 10000 fi = Txtfistu + "-" + txtfimin + "-" + decfi LA = Txtlastu + "-" + txtlamin + "-" + decla Spremanje.Label1.Caption = "Točka: " + Txtimetočke.Text Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "Fi= " + fi + " La= " + LA Spremanje.Label4.Caption = "Yp= " + Txtneredy.Text + " Xp= " + Txtneredx.Text Spremanje.Label5.Caption = "Y= " + Txtreducy.Text + " X= " + Txtreducx.Text Spremanje.Label6.Caption = "c= " + Txtkonvst.Text Spremanje.Label7.Caption = "RAČUNANJE PRAVOKUTNIH KOORDINATA U RAVNINI I" Spremanje.Label8.Caption = "KONVERGENCIJE MERIDIJANA IZ GEOGRAFSKIH KOORDINATA" Spremanje.Show greška: Exit Sub End Sub

Linije kôda "On Error GoTo greška" te "greška: Exit Sub" omogućavaju takozvano "hvatanje

grešaka", odnosno pri grešci izlazimo iz programa. Pritiskom na tipku "Obriši" se koristimo

kad želimo obrisati sve podatke koje smo unijeli za dotičnu točku, bilo kad tijekom rada na

formi, nakon čega se fokus postavlja na okvir teksta za unos imena točke. Taj gumb možemo

također koristiti nakon što smo izračunali željene vrijednosti ali ih ne želimo spremiti, već

hoćemo nastaviti računati sljedeće točke.

Tada, osim što briše unešene podatke, taj gumb ima zadaću skrivanja desne strane forme i

onemogućavanja korištenja gumba "Spremi".

To se postiže sljedećim linijama programskog kôda:

Page 28: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

28

Private Sub Cmdobriši_Click() Txtimetočke = "": Txtfistu = "": txtfimin = "": Txtfisek = "": Txtfidec = "" Txtlastu = "": txtlamin = "": txtlasek = "": Txtladec = "" Frame2.Visible = False Txtimetočke.SetFocus End Sub

Da bi se omogućilo korištenje istog prozora za spremanje u svih šest zadataka, a radi

jednostavnije i kraće sintakse, na formi "Spremanje" se nalazi osam praznih oznaka

(eng.label-kontrole koje omogućuju unos teksta od strane korisnika ili samog programa)

kojima se dodaje odgovarajući sadržaj, u zavisnosti od zadatka koji smo rješavali. U prvom

zadatku su oznakama dodijeljene ove vrijednosti: ime točke, Fi, La, Yp, Xp, Y, X, c.

Za primjer sa sl.3.8 podaci se pohranjuju u datoteku u ovom obliku:

Slika 4.10: Izgled spremljene datoteke u .txt formatu

Pritisak na tipku "Povratak" nas vraća na formu za odabir željenog zadatka, što se postiže

jednostavnim izrazom koji briše dotad aktivnu formu iz memorije a aktivira formu "Izbor":

Private Sub povratak_Click() Unload Me Izbor.Show End Sub

Tipka "Kraj" omogućuje prestanak rada s programom pomoću poznate naredbe "End":

Private Sub kraj_Click() End End Sub

Page 29: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

29

Na ovoj, kao i na svim sljedećim formama, po kontrolama se možemo kretati pomoću tipke

"Tab" i to tako da se fokus postavlja prvo na okvire teksta na lijevoj strani (okviri koji služe

unosu podataka), od imena točke naniže. Nakon toga se fokus postavlja redom na komandne

tipke "Računaj", "Spremi"(može dobiti fokus samo ako je aktivna), "Obriši", "Povratak" i

"Kraj" a ako pritisnemo ponovo tipku "Tab" počinjemo novi krug od okvira teksta za ime

točke. Na svim formama su također definirani i tzv. default (gumb za potvrdu) i cancel

( gumb za prekid), što znači da pritisak na tipku "Enter" na tipkovnici izaziva istu radnju kao i

pritisak na tipku "Računaj" na formi, a pritisak tipke "Cancel" na tipkovnici istu radnju kao

pritisak na tipku "Povratak" na formi. Kod ovog zadatka matematički postupak slijedi linearan

put, odnosno sve formule se nalaze u glavnom dijelu programa, jer se te formule koriste samo

u ovom zadatku pa nema potrebe za njihovim odvajanjem u modul (moduli se upotrebljavaju

za definiranje funkcija, varijabli i konstanti koje se koriste na više mjesta u programu da

bismo izbjegli višestruko pisanje identičnog programskog kôda).

4.3.1. Popis kontrola na formi "Zadatak 1"

Zadatak1 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label18 - nazivi oznaka na formi

Txtimetočke - okvir teksta za unos naziva točke

Txtfistu - okvir teksta za unos stupnjeva geografske širine

Txtfimin - okvir teksta za unos minuta geografske širine

Txtfisek - okvir teksta za unos sekundi geografske širine

Txtfidec - okvir teksta za unos decimala geografske širine

Txtlastu - okvir teksta za unos stupnjeva geografske dužine

Txtlamin - okvir teksta za unos minuta geografske dužine

Txtlasek - okvir teksta za unos sekundi geografske dužine

Txtladec - okvir teksta za unos decimala geografske dužine

Txtneredx - okvir teksta za ispis izračunate nereducirane koordinate X

Txtneredy - okvir teksta za ispis izračunate nereducirane koordinate Y

Txtreducx - okvir teksta za ispis izračunate reducirane koordinate X

Txtreducy - okvir teksta za ispis izračunate reducirane koordinate Y

Txtkonvst - okvir teksta za ispis konvergencije meridijana u stupnjevima

Rač - komandna tipka za računanje

Cmdspremi - komandna tipka za spremanje izračunatih vrijednosti

Cmdobriši - komandna tipka za brisanje lijeve strane forme

Povratak - komandna tipka za povratak na formu "Izbor"

Kraj - komandna tipka za kraj rada s programom

Na početku ove forme nema izraza "Option Explicit", jer u formulama ima jako puno varijabli

koje bi trebalo definirati, pa je bilo jednostavnije raditi bez tog izraza, pri čemu ne treba

definirati ni jednu varijablu.

Loša strana toga je što program ne bi javljao grešku u slučaju krivo napisane formule (npr. pri

množenju i dijeljenju s nulom) pa bi bilo jako teško pronaći grešku, međutim u ovom slučaju

je već postojao matematički dio programskog kôda za koji sam bio siguran da je ispravan, pa

ta opasnost nije postojala.

Page 30: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

30

4.3.2. Programski kôd forme "Zadatak 1"

Dim decfi As String Dim decla As String Dim i As Integer Private Sub Cmdobriši_Click() Txtimetočke = "": Txtfistu = "": txtfimin = "": Txtfisek = "": Txtfidec = "" Txtlastu = "": txtlamin = "": txtlasek = "": Txtladec = "" Frame2.Visible = False Txtimetočke.SetFocus End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" On Error GoTo greška decfi = Val(Txtfisek) + Val(Txtfidec) / 10000 decla = Val(txtlasek) + Val(Txtladec) / 10000 fi = Txtfistu + "-" + txtfimin + "-" + decfi LA = Txtlastu + "-" + txtlamin + "-" + decla Spremanje.Label1.Caption = "Točka: " + Txtimetočke.Text Spremanje.Label2.Caption = "Fi= " + fi + " La= " + LA Spremanje.Label3.Caption = "Yp= " + Txtneredy.Text + " Xp= " + Txtneredx.Text Spremanje.Label4.Caption = "Y= " + Txtreducy.Text + " X= " + Txtreducx.Text Spremanje.Label5.Caption = "c= " + Txtkonvst.Text Spremanje.Show greška: Exit Sub End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub kraj_Click() End End Sub Private Sub povratak_Click() Unload Me izbor.Show End Sub Private Sub Rač_Click() On Error GoTo greška

Page 31: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

31

Frame2.Visible = True fi = (Txtfistu + txtfimin / 60 + Txtfisek / 3600 + Txtfidec / 36000000) * r2 LA = (Txtlastu + txtlamin / 60 + txtlasek / 3600 + Txtladec / 36000000) k = 5 - (LA > 16.5) - (LA > 19.5) l0 = k * 3 DL = (LA - l0) * r2: L2 = DL * DL: L4 = L2 * L2 e2 = e * e: sf = Sin(fi): cf = Cos(fi): CF2 = cf * cf: CF3 = CF2 * cf t = Tan(fi): t2 = t * t: t4 = t2 * t2 eta = ec * cf: et2 = eta * eta: ET4 = et2 * et2 n = A / Sqr(1 - e2 * sf * sf) BX = (1 - e2) * (AO * fi - BO / 2 * Sin(2 * fi) + CO / 4 * Sin(4 * fi) - d00 / 6 * Sin(6 * fi)) * A y1 = n * cf y2 = n * CF3 * (1 - t2 + et2) / 6 Y3 = n * CF3 * CF2 * (5 - 18 * t2 + t4 + 14 * et2 - 58 * t2 * et2) / 120 x1 = n * sf * cf / 2 x2 = n * sf * CF3 * (5 - t2 + 9 * et2 + 4 * ET4) / 24 xp = BX + x1 * L2 + x2 * L4 yp = y1 * DL + y2 * L2 * DL + Y3 * L4 * DL x = m0 * xp y = m0 * yp + k * 1000000 + 500000 C1 = sf * CF2 * (1 + 3 * et2 + 2 * ET4) / 3 C2 = sf * CF2 * CF2 * (2 - t2) / 15 CR = sf * DL + C1 * L2 * DL + C2 * L4 * DL kr = CR xpd = Int(xp * 1000): ypd = Int(yp * 1000): xd = Int(x * 1000): yd = Int(y * 1000) konvergencija1 = radijustu(kr) Txtneredx.Text = xpd / 1000 Txtneredy.Text = ypd / 1000 Txtreducx.Text = xd / 1000 Txtreducy.Text = yd / 1000 Txtkonvst.Text = konvergencija1 Exit Sub greška: Frame2.Visible = False MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje!" If Txtimetočke = "" Then Txtimetočke.SetFocus ElseIf Txtfistu = "" Then Txtfistu.SetFocus ElseIf txtfimin = "" Then txtfimin.SetFocus ElseIf Txtfisek = "" Then Txtfisek.SetFocus ElseIf Txtfidec = "" Then Txtfidec.SetFocus ElseIf Txtlastu = "" Then Txtlastu.SetFocus ElseIf txtlamin = "" Then txtlamin.SetFocus ElseIf txtlasek = "" Then txtlasek.SetFocus

Page 32: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

32

ElseIf Txtladec = "" Then Txtladec.SetFocus End If End Sub Private Sub Txtfidec_GotFocus() i = 0 End Sub Private Sub Txtfidec_KeyPress(KeyAscii As Integer) i = i + 1 If Txtfistu.Text = "" Or txtfimin = "" Or Txtfisek.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtfistu.Text = "" Then Txtfistu.SetFocus ElseIf txtfimin = "" Then txtfimin.SetFocus ElseIf Txtfisek.Text = "" Then Txtfisek.SetFocus End If Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 4 Then Txtlastu.SetFocus Exit Sub End If End Sub Private Sub Txtfidec_LostFocus() If Txtfidec = "" Then Exit Sub If Txtfidec < 10 And i = 1 Then Txtfidec = Txtfidec * 1000 ElseIf Txtfidec < 10 And i = 2 Then Txtfidec = Txtfidec * 100 ElseIf Txtfidec < 10 And i = 3 Then Txtfidec = Txtfidec * 10 ElseIf Txtfidec < 100 And i = 2 Then Txtfidec = Txtfidec * 100 ElseIf Txtfidec < 100 And i = 3 Then Txtfidec = Txtfidec * 10 ElseIf Txtfidec < 1000 And i = 3 Then Txtfidec = Txtfidec * 10 End If End Sub Private Sub txtfimin_GotFocus()

Page 33: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

33

i = 0 If Val(Txtfistu.Text) < 0 Or Val(Txtfistu.Text) > 90 Then KeyAscii = 0 Txtfistu.Text = "" MsgBox "Geografska širina mora biti u rasponu od 0 do 90 stupnjeva", vbExclamation, "Upozorenje" Txtfistu.SetFocus End If End Sub Private Sub txtfimin_KeyPress(KeyAscii As Integer) i = i + 1 If Txtfistu.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" Txtfistu.SetFocus Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(txtfimin.Text) >= 6 Then KeyAscii = 0 txtfimin.Text = "" MsgBox "Minute moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then Txtfisek.SetFocus Exit Sub End If End Sub Private Sub Txtfisek_GotFocus() i = 0 End Sub Private Sub Txtfisek_KeyPress(KeyAscii As Integer) i = i + 1 If Txtfistu.Text = "" Or txtfimin = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtfistu.Text = "" Then Txtfistu.SetFocus ElseIf txtfimin = "" Then txtfimin.SetFocus End If Exit Sub

Page 34: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

34

End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(Txtfisek.Text) >= 6 Then KeyAscii = 0 Txtfisek.Text = "" MsgBox "Sekunde moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then Txtfidec.SetFocus Exit Sub End If End Sub Private Sub Txtfistu_GotFocus() i = 0 End Sub Private Sub Txtfistu_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 2 Then txtfimin.SetFocus Exit Sub End If End Sub Private Sub Txtladec_GotFocus() i = 0 End Sub Private Sub Txtladec_KeyPress(KeyAscii As Integer) i = i + 1 If Txtlastu.Text = "" Or txtlamin = "" Or txtlasek.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtlastu.Text = "" Then Txtlastu.SetFocus ElseIf txtlamin = "" Then txtlamin.SetFocus ElseIf txtlasek.Text = "" Then

Page 35: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

35

txtlasek.SetFocus End If Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 4 Then Rač.SetFocus Exit Sub End If End Sub Private Sub Txtladec_LostFocus() If Txtladec < 10 And i = 1 Then Txtladec = Txtladec * 1000 ElseIf Txtladec < 10 And i = 2 Then Txtladec = Txtladec * 100 ElseIf Txtladec < 10 And i = 3 Then Txtladec = Txtladec * 10 ElseIf Txtladec < 100 And i = 2 Then Txtladec = Txtladec * 100 ElseIf Txtladec < 100 And i = 3 Then Txtladec = Txtladec * 10 ElseIf Txtladec < 1000 And i = 3 Then Txtladec = Txtladec * 10 End If End Sub Private Sub txtlamin_GotFocus() i = 0 If Val(Txtlastu.Text) < 0 Or Val(Txtlastu.Text) > 180 Then KeyAscii = 0 Txtlastu.Text = "" MsgBox "Geografska duljina mora biti u rasponu od 0 do 180 stupnjeva", vbExclamation, "Upozorenje" Txtlastu.SetFocus End If End Sub Private Sub txtlamin_KeyPress(KeyAscii As Integer) i = i + 1 If Txtlastu.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" Txtlastu.SetFocus Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

Page 36: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

36

MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(txtlamin.Text) >= 6 Then KeyAscii = 0 txtlamin.Text = "" MsgBox "Minute moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then txtlasek.SetFocus Exit Sub End If End Sub Private Sub txtlasek_GotFocus() i = 0 End Sub Private Sub txtlasek_KeyPress(KeyAscii As Integer) i = i + 1 If Txtlastu.Text = "" Or txtlamin.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtlastu.Text = "" Then Txtlastu.SetFocus ElseIf txtlamin = "" Then txtlamin.SetFocus End If Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(txtlasek.Text) >= 6 Then KeyAscii = 0 txtlasek.Text = "" MsgBox "Sekunde moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then Txtladec.SetFocus Exit Sub End If End Sub

Page 37: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

37

Private Sub Txtlastu_GotFocus() i = 0 End Sub Private Sub Txtlastu_KeyPress(KeyAscii As Integer) i = i + 1 If Txtfidec.Text = "" Then KeyAscii = 0 MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtfistu.Text = "" Then Txtfistu.SetFocus ElseIf txtfimin = "" Then txtfimin.SetFocus ElseIf Txtfisek.Text = "" Then Txtfisek.SetFocus ElseIf Txtfidec.Text = "" Then Txtfidec.SetFocus End If Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(Txtlastu.Text) > 100 Then KeyAscii = 0 Txtlastu.Text = "" MsgBox "Geografska dužina mora biti u rasponu od 0 do 180 stupnjeva", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 3 Then txtlamin.SetFocus Exit Sub End If End Sub Private Sub txtneredx_Change() Cmdspremi.Enabled = True End Sub

Page 38: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

38

4.4. Forma "Zadatak 2"

Slika 4.11: Izgled forme "Zadatak 2"

Ova forma služi za računanje geografskih koordinata i konvergencije meridijana iz

pravokutnih koordinata u ravnini. Lijeva strana služi unosu podataka, a desna za prikaz

izračunatih podataka, uz poznati raspored komandnih tipki. I ovdje je primjenjen algoritam za

eliminaciju unosa svih znakova osim numeričkih ali, zbog potrebe unosa decimalnih brojeva,

u nešto složenijem obliku:

If KeyAscii = Asc(",") Then KeyAscii = Asc(".") If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then If KeyAscii = Asc(".") Then Exit Sub MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 txtreducx.SetFocus End If

Budući da Visual Basic koristi točku za obilježavanje decimalnog mjesta, a puno je

praktičnije koristiti zarez (zbog smještaja na numerički dio tipkovnice), omogućeno je i takvo

obilježavanje decimalnog mjesta pri čemu program pretvara unešeni zarez u točku.

Da program ne bi odbacio točku, kao i svaki drugi nenumerički znak, u slučaju njenog unosa

prekida se procedura koja testira karakter znaka te točka ostaje upisana.

Page 39: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

39

Ukoliko je unešen neki drugi znak, program se prekida i javlja se poruka o grešci koja je već

prikazana na slici 3.2.

Način rada na ovoj formi je identičan onom na formi "Zadatak 1", odnosno sve kontrolne

tipke imaju istu funkciju i gotovo identičan programski kôd. Jedina razlika vrijedna spomena

je u proceduri koju pokrećemo pritiskom na tipku "Računaj", gdje se matematičke formule

više ne nalaze sve u glavnom dijelu programa, već se one procedure koje koriste i druge

forme nalaze u posebnom modulu. To su sljedeće procedure: Sustav, Širfit, Fifi, Radijustu i

Konvergencija, one će biti objašnjene u poglavlju o modulu. Najprije pozivamo proceduru

"Sustav", koja služi za računanje adicione konstante za Y-koordinatu ( Yk = sustav * 1000000

+ 500000 ). Zatim pomoću procedura "Širfit" i "Fifi" računamo geografsku širinu točke dok

se geografska duljina računa u glavnom dijelu programa, a zatim ih pomoću funkcije

"Radijustu" pretvatramo iz kuta izraženog u radijanima u stupnjeve, minute i sekunde.

Na kraju pozivamo proceduru "Konvergencija" za računanje konvergencije meridijana nakon

čega ponovo pozivamo proceduru "Radijustu" te pretvaramo konvergenciju u kut izražen

stupnjevima, minutama i sekundama. U datoteku možemo spremiti naziv i koordinate točke,

geografsku širinu i dužinu te konvergenciju meridijana.

4.4.1. Popis kontrola na formi "Zadatak 2"

Zadatak2 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label12 - oznake za pobliže objašnjenje kontrola

Txtimetočke - okvir teksta za unos naziva točke

Txtreducxcijeli - okvir teksta za unos cjelobrojnog dijela reducirane koordinate X

Txtreducycijeli - okvir teksta za unos cjelobrojnog dijela reducirane koordinate Y

Txtreducxdec - okvir teksta za unos decimalnog dijela reducirane koordinate X

Txtreducydec - okvir teksta za unos decimalnog dijela reducirane koordinate Y

Txtreducx2 - okvir teksta za ispis reducirane koordinate X na desnoj strani

Txtreducy2 - okvir teksta za ispis reducirane koordinate Y na desnoj strani

Txtfi - okvir teksta za ispis izračunate geografske širine točke

Txtla - okvir teksta za ispis izračunate geografske dužine točke

Txtkonvst - okvir teksta za ispis izračunate konvergencije meridijana u dotičnoj točki

Rač - komandna tipka koja pokreće računanje

Cmdspremi - komandna tipka koja služi za spremanje izračunatih podataka

Cmdobriši - komandna tipka koja briše formu

Povratak - komandna tipka kojom se vraćamo na formu za izbor zadatka

Kraj - komandna tipka kojom prekidamo rad s programom

4.4.2. Programski kôd forme "Zadatak 2"

Dim vrijy As Variant Dim vrijx As Variant Dim i As Integer Public y: Public x Private Sub Cmdobriši_Click() Txtimetočke = "": txtreducxcijeli = "": txtreducycijeli = ""

Page 40: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

40

txtreducydec = "": txtreducxdec = "" Frame2.Visible = False Txtimetočke.SetFocus End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" On Error GoTo greška Spremanje.Label1.Caption = "Točka: " + Txtimetočke.Text Spremanje.Label2.Caption = "Y= " + txtreducycijeli + "." + txtreducydec + " X= " + txtreducxcijeli + "." + txtreducxdec Spremanje.Label3.Caption = "Fi= " + txtfi.Text Spremanje.Label4.Caption = "La= " + txtla.Text Spremanje.Label5.Caption = "c " + Txtkonvst.Text Spremanje.Show greška: Exit Sub End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub kraj_Click() End End Sub Private Sub povratak_Click() Unload Me izbor.Show End Sub Private Sub Rač_Click() Frame2.Visible = True If txtreducxcijeli = "" Or txtreducycijeli = "" Then Frame2.Visible = False Cmdspremi.Enabled = False MsgBox "Unesite sve vrijednosti", vbInformation, "Upozorenje!" If Txtimetočke = "" Then Txtimetočke.SetFocus ElseIf txtreducycijeli = "" Then txtreducycijeli.SetFocus ElseIf txtreducxcijeli = "" Then txtreducxcijeli.SetFocus End If

Page 41: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

41

Exit Sub End If y = Val(txtreducycijeli.Text) + Val(txtreducydec) / 1000 x = Val(txtreducxcijeli.Text) + Val(txtreducxdec) / 1000 yk = sustav(y) xp = x / m0 yp = (y - yk) / m0 Txtreducy2.Text = y Txtreducx2.Text = x Call širfit(xp, yp) fifi DL1 = 1 / (n * cf) DL2 = -(1 + 2 * t2 + et2) / (6 * n2 * n * cf) DL3 = (5 + 28 * t2 + 24# * t2 * t2) / (120 * n4 * n * cf) DL = DL1 * yp + DL2 * ypk * yp + DL3 * yp4 * yp LA = l0 + DL kr = fi širina = radijustu(kr) txtfi.Text = širina kr = LA dužina = radijustu(kr) txtla.Text = dužina konvergencija kr = c konv = radijustu(kr) If c < 0 Then Txtkonvst = "-" + konv Else Txtkonvst = konv End If Cmdspremi.Enabled = True Exit Sub End Sub Private Sub txtreducxcijeli_GotFocus() i = o End Sub Private Sub txtreducxcijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtreducxdec.SetFocus Exit Sub End If End Sub Private Sub txtreducxdec_GotFocus()

Page 42: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

42

i = 0 End Sub Private Sub txtreducxdec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then Rač.SetFocus Exit Sub End If End Sub Private Sub txtreducxdec_LostFocus() If txtreducxdec = "" Then Exit Sub If txtreducxdec < 10 And i = 1 Then txtreducxdec = txtreducxdec * 100 ElseIf txtreducxdec < 10 And i = 2 Then txtreducxdec = txtreducxdec * 10 ElseIf txtreducxdec < 100 And i = 2 Then txtreducxdec = txtreducxdec * 10 End If End Sub Private Sub txtreducycijeli_GotFocus() i = 0 End Sub Private Sub txtreducycijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtreducydec.SetFocus Exit Sub End If End Sub Private Sub txtreducydec_GotFocus() i = 0 End Sub Private Sub txtreducydec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje"

Page 43: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

43

KeyAscii = 0 i = i - 1 End If If i = 3 Then txtreducxcijeli.SetFocus Exit Sub End If End Sub Private Sub txtreducydec_LostFocus() If txtreducydec = "" Then Exit Sub If txtreducydec < 10 And i = 1 Then txtreducydec = txtreducydec * 100 ElseIf txtreducydec < 10 And i = 2 Then txtreducydec = txtreducydec * 10 ElseIf txtreducydec < 100 And i = 2 Then txtreducydec = txtreducydec * 10 End If End Sub

4.5. Forma "Zadatak 3"

Slika 4.14: Izgled forme "Zadatak 3"

Page 44: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

44

Forma trećeg zadatka služi za računanje redukcije pravca i dužine između dvije po

koordinatama poznate točke. Na lijevu stranu unosimo imena točaka i njihove pravokutne

koordinate u odgovarajuće okvire teksta te, nakon pritiska na tipku "Računaj", dobijemo

vrijednosti za dužinu geodetske linije i dužinu u ravnini te redukcije pravaca u prvoj i drugoj

točki. Da bi ovaj postupak dao točan rezultat, potrebno je provjeriti nalaze li se obje točke u

istom sustavu, što čini sljedeća procedura povezana s tipkom "Računaj":

If Abs(y2 - y1) > 500000 Then MsgBox "Točke nisu u istom sustavu", vbExclamation, "Upozorenje" Call Cmdobriši_Click Exit Sub Else y = y1 End If

Ukoliko je apsolutna razlika Y-koordinata veća od 500000, što znači da točke pripadaju

različitim sustavima, javlja se poruka o grešci i poziva se procedura za slučaj pritiska tipke

"Obriši" (obrišu se svi okviri teksta na lijevoj strani te se skriva desna strana forme).

Ukoliko je ΔY manji od 500000 imamo izraz "Y=Y1", što se koristi za računanje sustava,

pozivom procedure "Sustav" (isti rezultat bismo dobili da smo uvrstili Y2 umjesto Y1).

Slika 4.15:Izgled upozorenja ukoliko točke nisu u istom sustavu

Svi ostali dijelovi ove forme funkcioniraju identično kao na prethodnim pa neće biti ponovno

objašnjeni.

I ovdje prvu pozivamo proceduru "Sustav", radi određivanja sustava Gauss-Krügerove

projekcije, a nakon nje proceduru "Redužip", koja služi za računanje dužine geodetske linije,

dužine u ravnini i redukcije pravca.

Nakon računanja možemo spremiti slijedeće podatke u datoteku: pravokutne reducirane

koordinate obiju točaka, dužinu geodetske linije između točaka, dužinu u ravnini te azimute

normalnih presjeka u prvoj i drugoj točki.

Page 45: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

45

4.5.1. Popis komandi na formi "Zadatak 3"

Zadatak3 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label18 - oznake za pobliže objašnjenje kontrola

Txtimetočke - okvir teksta za unos naziva prve točke

Txtx1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate X prve točke

Txty1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate Y prve točke

Txtx1dec - okvir teksta za unos decimalnog dijela reduc. koordinate X prve točke

Txty1dec - okvir teksta za unos decimalnog dijela reduc. koordinate Y prve točke

Txtimetočke2 - okvir teksta za unos naziva druge točke

Txtx2cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate X druge točke

Txty2cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate Y druge točke

Txtx2dec - okvir teksta za unos decimalnog dijela reduc. koordinate X druge točke

Txty2dec - okvir teksta za unos decimalnog dijela reduc. koordinate Y druge točke

Txts - okvir teksta za ispis izračunate dužine geodetske linije

Txtd - okvir teksta za ispis izračunate dužine u ravnini

Txtomega1 - okvir teksta za ispis izračunatog azimuta normalnog presjeka u prvoj točki

Txtomega2 - okvir teksta za ispis izračunatog azimuta norm. presjeka u drugoj točki

Rač - komandna tipka koja pokreće računanje

Cmdspremi - komandna tipka koja služi za spremanje izračunatih podataka

Cmdobriši - komandna tipka koja briše formu

Povratak - komandna tipka kojom se vraćamo na formu za izbor zadatka

Kraj - komandna tipka kojom prekidamo rad s programom

4.5.2. Programski kôd forme "Zadatak 3"

Option Explicit Dim yp1: Dim XP1 Dim dn: Dim vrijx: Dim vrijy Dim i As Integer Private Sub cmdkraj_Click() End End Sub Private Sub Cmdobriši_Click() Txtimetočke1 = "": Txty1cijeli = "": Txtx1cijeli = "" TxtImeTočke2 = "": Txty2cijeli = "": Txtx2cijeli = "" txty1dec = "": txtx1dec = "": txty2dec = "": txtx2dec = "" Frame2.Visible = False Txtimetočke1.SetFocus End Sub Private Sub cmdpovratak_Click() izbor.Show Unload Me End Sub

Page 46: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

46

Private Sub cmdRačunaj_Click() If Txtx1cijeli = "" Or Txty1cijeli = "" Or Txtx2cijeli = "" Or Txty2cijeli = "" Then MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" Frame2.Visible = False Cmdspremi.Enabled = False If Txtimetočke1 = "" Then Txtimetočke1.SetFocus ElseIf Txty1cijeli = "" Then Txty1cijeli.SetFocus ElseIf Txtx1cijeli = "" Then Txtx1cijeli.SetFocus ElseIf TxtImeTočke2 = "" Then TxtImeTočke2.SetFocus ElseIf Txty2cijeli = "" Then Txty2cijeli.SetFocus ElseIf Txtx2cijeli = "" Then Txtx2cijeli.SetFocus End If Exit Sub End If y1 = Val(Txty1cijeli.Text) + Val(txty1dec) / 1000: y2 = Val(Txty2cijeli.Text) + Val(txty2dec) / 1000 x1 = Val(Txtx1cijeli.Text) + Val(txtx1dec) / 1000: x2 = Val(Txtx2cijeli.Text) + Val(txtx2dec) / 1000 If Abs(y2 - y1) > 500000 Then MsgBox "Točke nisu u istom sustavu", vbExclamation, "Upozorenje" Call Cmdobriši_Click Exit Sub Else y = y1 End If yk = sustav(y) yp1 = (y1 - yk) / m0: XP1 = x1 / m0 yp2 = (y2 - yk) / m0: xp2 = x2 / m0 Call redužip(yp1, XP1, yp2, xp2) dn = Sqr(dy * dy + dx * dx) s = dn / ds d = dn * 0.9999 Txts.Text = (Int(s * 1000)) / 1000 Txtd.Text = (Int(d * 1000)) / 1000 Txtomega1.Text = (Int(w12 * 10000)) / 10000 Txtomega2.Text = (Int(w21 * 10000)) / 10000 Frame2.Visible = True Cmdspremi.Enabled = True End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = ""

Page 47: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

47

Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" On Error GoTo greška Spremanje.Label1.Caption = "Točka 1: " + Txtimetočke1 + " Y1= " + Txty1cijeli.Text + "." + txty1dec + " X1= " + Txtx1cijeli.Text + "." + txtx1dec Spremanje.Label2.Caption = "Točka 2: " + TxtImeTočke2 + " Y2= " + Txty2cijeli.Text + "." + txty2dec + " X2= " + Txtx2cijeli.Text + "." + txtx2dec Spremanje.Label3.Caption = "s= " + Txts.Text + " d= " + Txtd.Text Spremanje.Label4.Caption = "w12= " + Txtomega1 Spremanje.Label5.Caption = "w21= " + Txtomega2 Spremanje.Show greška: Exit Sub End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub Txtx1cijeli_GotFocus() i = 0 End Sub Private Sub Txtx1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txtx1cijeli.SelText = "" End Sub Private Sub Txtx1cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtx1dec.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_GotFocus() i = 0 End Sub Private Sub txtx1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If

Page 48: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

48

If i = 3 Then TxtImeTočke2.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_LostFocus() If txtx1dec = "" Then Exit Sub If txtx1dec < 10 And i = 1 Then txtx1dec = txtx1dec * 100 ElseIf txtx1dec < 10 And i = 2 Then txtx1dec = txtx1dec * 10 ElseIf txtx1dec < 100 And i = 2 Then txtx1dec = txtx1dec * 10 End If End Sub Private Sub TxtX2cijeli_GotFocus() i = 0 End Sub Private Sub TxtX2cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txtx2cijeli.SelText = "" End Sub Private Sub TxtX2cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtx2dec.SetFocus Exit Sub End If End Sub Private Sub txtx2dec_GotFocus() i = 0 End Sub Private Sub txtx2dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then cmdRačunaj.SetFocus Exit Sub

Page 49: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

49

End If End Sub Private Sub txtx2dec_LostFocus() If txtx2dec = "" Then Exit Sub If txtx2dec < 10 And i = 1 Then txtx2dec = txtx2dec * 100 ElseIf txtx2dec < 10 And i = 2 Then txtx2dec = txtx2dec * 10 ElseIf txtx2dec < 100 And i = 2 Then txtx2dec = txtx2dec * 10 End If End Sub Private Sub TxtY1cijeli_GotFocus() i = 0 End Sub Private Sub TxtY1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txty1cijeli.SelText = "" End Sub Private Sub TxtY1cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txty1dec.SetFocus Exit Sub End If End Sub Private Sub Txty1dec_GotFocus() i = 0 End Sub Private Sub Txty1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then Txtx1cijeli.SetFocus Exit Sub End If End Sub

Page 50: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

50

Private Sub Txty1dec_LostFocus() If txty1dec = "" Then Exit Sub If txty1dec < 10 And i = 1 Then txty1dec = txty1dec * 100 ElseIf txty1dec < 10 And i = 2 Then txty1dec = txty1dec * 10 ElseIf txty1dec < 100 And i = 2 Then txty1dec = txty1dec * 10 End If End Sub Private Sub TxtY2cijeli_GotFocus() i = 0 End Sub Private Sub TxtY2cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txty2cijeli.SelText = "" End Sub Private Sub TxtY2cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txty2dec.SetFocus Exit Sub End If End Sub Private Sub txty2dec_GotFocus() i = 0 End Sub Private Sub txty2dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then Txtx2cijeli.SetFocus Exit Sub End If End Sub Private Sub txty2dec_LostFocus() If txty2dec = "" Then Exit Sub If txty2dec < 10 And i = 1 Then txty2dec = txty2dec * 100

Page 51: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

51

ElseIf txty2dec < 10 And i = 2 Then txty2dec = txty2dec * 10 ElseIf txty2dec < 100 And i = 2 Then txty2dec = txty2dec * 10 End If End Sub

4.6. Forma "Zadatak 4"

Slika 4.16: Izgled forme "Zadatak 4"

Ovaj zadatak služi za računanje pravokutnih koordinata u ravnini iz dužine i azimuta

geodetske linije. Potrebno je unijeti naziv i koordinate prve točke, dužinu i azimut geodetske

linije te naziv druge točke, nakon čega program računa reducirane koordinate druge točke.

Radi određivanja sustava i ovdje prvo pozivamo proceduru "Sustav", a nakon toga proceduru

"Drugatočka", u kojoj se nalaze formule za rješavanje većeg dijela ovog zadatka.

iz procedure "Drugatočka" pozivamo procedure "Širfit", "Konvergencija" i "Redužip".

Prilikom spremanja, u datoteku se spremaju sljedeći podaci: pravokutne reducirane koordinate

prve točke, dužina i azimut geodetske linije, te naziv i izračunate reducirane koordinate druge

točke.

Page 52: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

52

4.6.1. Popis komandi na formi "Zadatak 4"

Zadatak4 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label13 - oznake za pobliže objašnjenje kontrola

Txtimetočke - okvir teksta za unos naziva prve točke

Txtx1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate X prve točke

Txty1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate Y prve točke

Txtx1dec - okvir teksta za unos decimalnog dijela reduc. koordinate X prve točke

Txty1 dec - okvir teksta za unos decimalnog dijela reduc. koordinate Y prve točke

Txts - okvir teksta za unos izračunate dužine geodetske linije

Txtazstu - okvir teksta za unos stupnjeva azimuta geodetske linije

Txtazmin - okvir teksta za unos minuta azimuta geodetske linije

Txtazsek - okvir teksta za unos sekundi azimuta geodetske linije

Txtazdec - okvir teksta za unos decimala azimuta geodetske linije

Txtimetočke2 - okvir teksta za unos naziva druge točke

Txtimeračunate - okvir teksta za ispis naziva druge točke

Txtx2 - okvir teksta za ispis reducirane koordinate X druge točke

Txty2 - okvir teksta za ispis reducirane koordinate Y druge točke

Cmdrač - komandna tipka koja pokreće računanje

Cmdspremi - komandna tipka koja služi za spremanje izračunatih podataka

Cmdobriši - komandna tipka koja briše formu

Cmdpovratak - komandna tipka kojom se vraćamo na formu za izbor zadatka

Cmdkraj - komandna tipka kojom prekidamo rad s programom

4.6.2. Programski kôd forme "Zadatak 4"

Dim decimale As String Dim i As Integer Private Sub cmdkraj_Click() End End Sub Private Sub Cmdobriši_Click() Frame2.Visible = False Cmdspremi.Enabled = False Txtimetočke1.Text = "" Txty1cijeli.Text = "": txty1dec.Text = "" Txtx1cijeli.Text = "": txtx1dec.Text = "" Txts.Text = "" Txtazstu.Text = "" txtazmin.Text = "" txtazsek.Text = "" Txtazdec.Text = "" TxtImeTočke2.Text = "" Txtimetočke1.SetFocus End Sub

Page 53: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

53

Private Sub cmdpovratak_Click() izbor.Show Unload Me End Sub Private Sub cmdRač_Click() If Txty1cijeli = "" Or Txtx1cijeli = "" Or Txts = "" Or Txtazstu = "" Or txtazmin = "" Or txtazsek = "" Or Txtazdec = "" Then Frame2.Visible = False Cmdspremi.Enabled = False MsgBox "Unesite sve vrijednosti", vbExclamation, "Upozorenje" If Txtimetočke1 = "" Then Txtimetočke1.SetFocus ElseIf Txty1cijeli = "" Then Txty1cijeli.SetFocus ElseIf Txtx1cijeli = "" Then Txtx1cijeli.SetFocus ElseIf Txts = "" Then Txts.SetFocus ElseIf Txtazstu = "" Then Txtazstu.SetFocus ElseIf txtazmin = "" Then txtazmin.SetFocus ElseIf txtazsek = "" Then txtazsek.SetFocus Else: Txtazdec.SetFocus End If Exit Sub End If y = Val(Txty1cijeli) + Val(txty1dec) / 1000: x = Val(Txtx1cijeli) + Val(txtx1dec) / 1000: s = Val(Txts) ast = Val(Txtazstu): amin = Val(txtazmin): asekunde = Val(txtazsek): adec = Val(Txtazdec) asek = asekunde + adec / 10000 al = (ast + amin / 60 + asek / 3600) * r2 yp = 0: xp = 0 yk = sustav(y) yp1 = (y - yk) / m0: XP1 = x / m0 yp = yp1: xp = XP1 drugatočka yp2 = yp1 + dyp: xp2 = XP1 + dxp y2 = yp2 * m0 + yk: x2 = xp2 * m0 Frame2.Visible = True Cmdspremi.Enabled = True Txty2 = Int(y2 * 1000) / 1000: Txtx2 = Int(x2 * 1000) / 1000 TxtImeRačunate.Text = TxtImeTočke2.Text End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = ""

Page 54: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

54

Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" decimale = Val(Txtazdec) Spremanje.Label1.Caption = "Točka 1: " + Txtimetočke1 + " Y1= " + Txty1cijeli.Text + "." + txty1dec.Text + " X1= " + Txtx1cijeli.Text + "." + txtx1dec.Text Spremanje.Label2.Caption = "s= " + Txts.Text Spremanje.Label3.Caption = "A= " + Txtazstu.Text + "-" + txtazmin.Text + "-" + txtazsek.Text + "." + decimale Spremanje.Label4.Caption = "Točka 2: " + TxtImeTočke2.Text Spremanje.Label5.Caption = "Y2= " + Txty2.Text + " X2= " + Txtx2.Text Spremanje.Show End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub Txtazdec_GotFocus() i = 0 End Sub Private Sub Txtazdec_KeyPress(KeyAscii As Integer) i = i + 1 If Txtazstu.Text = "" Or txtazmin = "" Or txtazsek.Text = "" Then KeyAscii = 0 MsgBox "Unesite prvo stupnjeve, minute i sekunde!", vbExclamation, "Upozorenje" If Txtazstu.Text = "" Then Txtazstu.SetFocus ElseIf txtazmin = "" Then txtazmin.SetFocus ElseIf txtazsek.Text = "" Then txtazsek.SetFocus End If i = i - 1 Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 4 Then TxtImeTočke2.SetFocus Exit Sub End If End Sub Private Sub Txtazdec_LostFocus()

Page 55: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

55

If Txtazdec < 10 And i = 1 Then Txtazdec = Txtazdec * 1000 ElseIf Txtazdec < 10 And i = 2 Then Txtazdec = Txtazdec * 100 ElseIf Txtazdec < 10 And i = 3 Then Txtazdec = Txtazdec * 10 ElseIf Txtazdec < 100 And i = 2 Then Txtazdec = Txtazdec * 100 ElseIf Txtazdec < 100 And i = 3 Then Txtazdec = Txtazdec * 10 ElseIf Txtazdec < 1000 And i = 3 Then Txtazdec = Txtazdec * 10 End If End Sub Private Sub txtazmin_GotFocus() i = 0 End Sub Private Sub txtazmin_KeyPress(KeyAscii As Integer) i = i + 1 If Txtazstu.Text = "" Then KeyAscii = 0 MsgBox "Unesite prvo stupnjeve!", vbExclamation, "Upozorenje" Txtazstu.SetFocus i = i - 1 Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(txtazmin.Text) >= 6 Then KeyAscii = 0 txtazmin.Text = "" MsgBox "Minute moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then txtazsek.SetFocus Exit Sub End If End Sub Private Sub txtazsek_GotFocus() i = 0 End Sub Private Sub txtazsek_KeyPress(KeyAscii As Integer)

Page 56: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

56

i = i + 1 If Txtazstu.Text = "" Or txtazmin.Text = "" Then KeyAscii = 0 MsgBox "Unesite prvo stupnjeve i minute!", vbExclamation, "Upozorenje" If Txtazstu.Text = "" Then Txtazstu.SetFocus ElseIf txtazmin = "" Then txtazmin.SetFocus End If i = i - 1 Exit Sub End If If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If Val(txtazsek.Text) >= 6 Then KeyAscii = 0 txtazsek.Text = "" MsgBox "Sekunde moraju biti manje od 60", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 2 Then Txtazdec.SetFocus Exit Sub End If End Sub Private Sub Txtazstu_GotFocus() i = 0 End Sub Private Sub Txtazstu_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 End If If Val(Txtazstu.Text) > 35 Then KeyAscii = 0 Txtazstu.Text = "" MsgBox "Stupnjevi ne smiju biti veći od 360", vbExclamation, "Upozorenje" i = 0 Exit Sub End If If i = 3 Then txtazmin.SetFocus Exit Sub End If

Page 57: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

57

End Sub Private Sub Txts_KeyDown(KeyCode As Integer, Shift As Integer) Txts.SelText = "" End Sub Private Sub Txts_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(",") Then KeyAscii = Asc(".") If KeyAscii = Asc(".") Then Exit Sub If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 Txts.SetFocus End If vrijs = Val(Txts) If Len(vrijs) <= 11 Then Exit Sub Else MsgBox "Unijeli ste previše znamenki", vbExclamation, "Upozorenje" KeyAscii = 0 Txts = "" Txts.SetFocus End If End Sub Private Sub Txtx1cijeli_GotFocus() i = 0 End Sub Private Sub Txtx1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txtx1cijeli.SelText = "" End Sub Private Sub Txtx1cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtx1dec.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_GotFocus() i = 0 End Sub Private Sub txtx1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

Page 58: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

58

MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then Txts.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_LostFocus() If txtx1dec = "" Then Exit Sub If txtx1dec < 10 And i = 1 Then txtx1dec = txtx1dec * 100 ElseIf txtx1dec < 10 And i = 2 Then txtx1dec = txtx1dec * 10 ElseIf txtx1dec < 100 And i = 2 Then txtx1dec = txtx1dec * 10 End If End Sub Private Sub TxtY1cijeli_GotFocus() i = 0 End Sub Private Sub TxtY1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txty1cijeli.SelText = "" End Sub Private Sub TxtY1cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txty1dec.SetFocus Exit Sub End If End Sub Private Sub Txty1dec_GotFocus() i = 0 End Sub Private Sub Txty1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1

Page 59: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

59

End If If i = 3 Then Txtx1cijeli.SetFocus Exit Sub End If End Sub Private Sub Txty1dec_LostFocus() If txty1dec = "" Then Exit Sub If txty1dec < 10 And i = 1 Then txty1dec = txty1dec * 100 ElseIf txty1dec < 10 And i = 2 Then txty1dec = txty1dec * 10 ElseIf txty1dec < 100 And i = 2 Then txty1dec = txty1dec * 10 End If End Sub

4.7. Forma "Zadatak 5"

Slika 4.17: Izgled forme "Zadatak 5"

Forma petog zadatka se odnosi na računanje dužine i azimuta geodetske linije iz pravokutnih

koordinata u ravnini.

Page 60: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

60

Na formu unosimo sljedeće vrijednosti: nazive prve i druge točke te njihove reducirane

koordinate, od čega su Y,X-koordinate točaka neophodne veličine bez kojih ne možemo

računati, a nazivi točaka su opcionalni.

Nakon što unesemo sve podatke program provjerava jesu li točke u istom sustavu, u slučaju

da nisu javlja se poruka o grešci sadržaja već poznatog sa slike 3.14.

Ako su točke u istom sustavu, program određuje koji je to sustav pomoću procedure "Sustav",

nakon toga računa redukcije dužine i pravca pomoću procedure "Redužip", geografsku širinu

koja odgovara duljini luka srednjeg meridijana pomoću procedure "Širfit", konvergenciju

meridijana pomoću procedure "Konvergencija" te, nakon određivanja azimuta, proceduru

"Radijustu" za pretvaranje azimuta iz radijana u stupnjeve.

Pritiskom na tipku "Spremi" možemo spremiti sljedeće podatke: nazive prve i druge točke,

duljinu geodetske linije, duljinu u ravnini te azimute geodetske linije u tim točkama.

4.7.1. Popis komandi na formi "Zadatak 5"

Zadatak5 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label17 - oznake za pobliže objašnjenje kontrola

Txtimetočke1 - okvir teksta za unos naziva prve točke

Txtx1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate X prve točke

Txty1cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate Y prve točke

Txtx1dec - okvir teksta za unos decimalnog dijela reduc. koordinate X prve točke

Txty1dec - okvir teksta za unos decimalnog dijela reduc. koordinate Y prve točke

Txtimetočke2 - okvir teksta za unos naziva druge točke

Txtx2cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate X druge točke

Txty2cijeli - okvir teksta za unos cjelobrojnog dijela reduc. koordinate Y druge točke

Txtx2dec - okvir teksta za unos decimalnog dijela reduc. koordinate X druge točke

Txty2dec - okvir teksta za unos decimalnog dijela reduc. koordinate Y druge točke

Txts - okvir teksta za ispis izračunate dužine geodetske linije

Txtd - okvir teksta za ispis izračunate dužine u ravnini

Txta12 - okvir teksta za ispis azimuta geodetske linije u prvoj točki

Txta21 - okvir teksta za ispis azimuta geodetske linije u drugoj točki

Cmdrač - komandna tipka koja pokreće računanje

Cmdspremi - komandna tipka koja služi za spremanje izračunatih podataka

Cmdobriši - komandna tipka koja briše formu

Cmdpovratak - komandna tipka kojom se vraćamo na formu za izbor zadatka

Cmdkraj - komandna tipka kojom prekidamo rad s programom

4.7.2. Programski kôd forme "Zadatak 5"

Dim i As Integer Private Sub cmdkraj_Click() End End Sub Private Sub Cmdobriši_Click() Txtimetočke1 = "": TxtY1cijeli = "": Txtx1cijeli = "": Txty1dec = "": txtx1dec = ""

Page 61: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

61

TxtImeTočke2 = "": TxtY2cijeli = "": TxtX2cijeli = "": txty2dec = "": txtx2dec = "" Txtimetočke1.SetFocus Frame2.Visible = False Cmdspremi.Enabled = False End Sub Private Sub cmdpovratak_Click() izbor.Show Unload Me End Sub Private Sub cmdRač_Click() If TxtY1cijeli = "" Or Txtx1cijeli = "" Or TxtY2cijeli = "" Or TxtX2cijeli = "" Then Frame2.Visible = False Cmdspremi.Enabled = False MsgBox "Unesite sve vrijednosti", vbInformation, "Upozorenje!" If Txtimetočke1 = "" Then Txtimetočke1.SetFocus ElseIf TxtY1cijeli = "" Then TxtY1cijeli.SetFocus ElseIf Txtx1cijeli = "" Then Txtx1cijeli.SetFocus ElseIf TxtImeTočke2 = "" Then TxtImeTočke2.SetFocus ElseIf TxtY2cijeli = "" Then TxtY2cijeli.SetFocus Else TxtX2cijeli.SetFocus End If Exit Sub End If y1 = Val(TxtY1cijeli) + Val(Txty1dec) / 1000: x1 = Val(Txtx1cijeli) + Val(txtx1dec) / 1000 y2 = Val(TxtY2cijeli) + Val(txty2dec) / 1000: x2 = Val(TxtX2cijeli) + Val(txtx2dec) / 1000 If Abs(y2 - y1) > 500000# Then MsgBox "Točke nisu u istom sustavu", vbExclamation, "Upozorenje" Call Cmdobriši_Click Exit Sub End If y = y1 yk = sustav(y) yp1 = (y1 - yk) / m0: XP1 = x1 / m0 yp2 = (y2 - yk) / m0: xp2 = x2 / m0 Call redužip(yp1, XP1, yp2, xp2) d = Sqr(dy * dy + dx * dx) s = d / ds NI12 = (1 - (dx = 0)) * Atn(dy / (dx + (dx = 0) * ((dy = 0) - dy))) - pi * ((dy < 0) * (1 + Sgn(dx)) + (dx < 0)) NI21 = NI12 + pi + 2 * pi * (NI12 >= pi) yp = yp1: xp = XP1 Call širfit(xp, yp) konvergencija AL12 = NI12 + c + w12 / 3600 * r2

Page 62: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

62

AL12 = AL12 - 2 * pi * (AL12 < 0) yp = yp2: xp = xp2 Call širfit(xp, yp) konvergencija AL21 = NI21 + c + w21 / 3600 * r2 AL21 = AL21 - 2 * pi * (AL21 < 0) kr = AL12 prvi = radijustu(kr) txtalfa12 = prvi kr = AL21 drugi = radijustu(kr) txtalfa21 = drugi Txts.Text = (Int(s * 1000)) / 1000 dd = d * 0.9999 Txtd.Text = (Int(dd * 1000)) / 1000 TxtA12 = prvi: txtA21 = drugi Frame2.Visible = True Cmdspremi.Enabled = True End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = "" Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" Spremanje.Label1.Caption = "Točka 1: " + Txtimetočke1 + " Točka 2: " + TxtImeTočke2 Spremanje.Label2.Caption = "s = " + Txts.Text Spremanje.Label3.Caption = "d = " + Txtd.Text Spremanje.Label4.Caption = "A12 = " + TxtA12.Text Spremanje.Label5.Caption = "A21 = " + txtA21.Text + " " Spremanje.Show End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub Txtx1cijeli_GotFocus() i = 0 End Sub Private Sub Txtx1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) Txtx1cijeli.SelText = "" End Sub Private Sub Txtx1cijeli_KeyPress(KeyAscii As Integer) i = i + 1

Page 63: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

63

If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txtx1dec.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_GotFocus() i = 0 End Sub Private Sub txtx1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then TxtImeTočke2.SetFocus Exit Sub End If End Sub Private Sub txtx1dec_LostFocus() If txtx1dec = "" Then Exit Sub If txtx1dec < 10 And i = 1 Then txtx1dec = txtx1dec * 100 ElseIf txtx1dec < 10 And i = 2 Then txtx1dec = txtx1dec * 10 ElseIf txtx1dec < 100 And i = 2 Then txtx1dec = txtx1dec * 10 End If End Sub Private Sub TxtX2cijeli_GotFocus() i = 0 End Sub Private Sub TxtX2cijeli_KeyDown(KeyCode As Integer, Shift As Integer) TxtX2cijeli.SelText = "" End Sub Private Sub TxtX2cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0

Page 64: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

64

i = i - 1 End If If i = 7 Then txtx2dec.SetFocus Exit Sub End If End Sub Private Sub txtx2dec_GotFocus() i = 0 End Sub Private Sub txtx2dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then cmdRač.SetFocus Exit Sub End If End Sub Private Sub txtx2dec_LostFocus() If txtx2dec = "" Then Exit Sub If txtx2dec < 10 And i = 1 Then txtx2dec = txtx2dec * 100 ElseIf txtx2dec < 10 And i = 2 Then txtx2dec = txtx2dec * 10 ElseIf txtx2dec < 100 And i = 2 Then txtx2dec = txtx2dec * 10 End If End Sub Private Sub TxtY1cijeli_GotFocus() i = 0 End Sub Private Sub TxtY1cijeli_KeyDown(KeyCode As Integer, Shift As Integer) TxtY1cijeli.SelText = "" End Sub Private Sub TxtY1cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then

Page 65: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

65

Txty1dec.SetFocus Exit Sub End If End Sub Private Sub Txty1dec_GotFocus() i = 0 End Sub Private Sub Txty1dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then Txtx1cijeli.SetFocus Exit Sub End If End Sub Private Sub Txty1dec_LostFocus() If Txty1dec = "" Then Exit Sub If Txty1dec < 10 And i = 1 Then Txty1dec = Txty1dec * 100 ElseIf Txty1dec < 10 And i = 2 Then Txty1dec = Txty1dec * 10 ElseIf Txty1dec < 100 And i = 2 Then Txty1dec = Txty1dec * 10 End If End Sub Private Sub TxtY2cijeli_GotFocus() i = 0 End Sub Private Sub TxtY2cijeli_KeyDown(KeyCode As Integer, Shift As Integer) TxtY2cijeli.SelText = "" End Sub Private Sub TxtY2cijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 7 Then txty2dec.SetFocus Exit Sub End If

Page 66: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

66

End Sub Private Sub txty2dec_GotFocus() i = 0 End Sub Private Sub txty2dec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then TxtX2cijeli.SetFocus Exit Sub End If End Sub Private Sub txty2dec_LostFocus() If txty2dec = "" Then Exit Sub If txty2dec < 10 And i = 1 Then txty2dec = txty2dec * 100 ElseIf txty2dec < 10 And i = 2 Then txty2dec = txty2dec * 10 ElseIf txty2dec < 100 And i = 2 Then txty2dec = txty2dec * 10 End If End Sub

Page 67: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

67

4.8. Forma "Zadatak 6"

Slika 4.18: Izgled forme "Zadatak 6"

Ovaj dio programa služi za transformaciju pravokutnih koordinata iz jednog koordinatnog

sustava u susjedni sustav.

Na lijevoj strani se zadaje ime točke i pravokutne reducirane koordinate točke u jednom

sustavu, dok nakon računanja dobijemo nereducirane i reducirane koordinate u susjednom

sustavu. Prigodom računanja, a nakon pritiska tipke "Računaj", pozivamo samo proceduru

"Transformacija" koja sadrži najveći dio matematičkih računanja pri transformaciji koordinata.

Na ovoj formi se koriste, kao i na svim drugim: algoritam za ograničavanje unosa samo na

brojeve, za pretvaranje zareza u točku, za ograničavanje unosa koordinata na 11 znakova i

algoritam koji javlja grešku ako pokušamo računati bez svih neophodnih podataka.

Nakon pritiska na tipku "Spremi" spremamo podatke u datoteku po izboru u obliku koji je

prikazan na sljedećoj stranici.

Page 68: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

68

Slika 4.19: Izgled spremljene datoteke šestog zadatka

4.8.1. Popis kontrola na formi "Zadatak 6"

Zadatak6 - naziv forme

Frame1 - okvir na lijevoj strani forme

Frame2 - okvir na desnoj strani forme

Label1-Label12 - oznake za pobliže objašnjenje kontrola

Txtimetočke - okvir teksta za unos naziva točke

Txtreducxcijeli - okvir teksta za unos cjelobrojnog dijela reducirane koordinate X točke

Txtreducycijeli - okvir teksta za unos cjelobrojnog dijela reducirane koordinate Y točke

Txtreducxdec - okvir teksta za unos decimalnog dijela reducirane koordinate X točke

Txtreducydec - okvir teksta za unos decimalnog dijela reducirane koordinate Y točke

Txtimetočke2 - okvir teksta za ispis naziva točke

Txtneredx - okvir teksta za ispis nereducirane koordinate X točke

Txtneredy - okvir teksta za unos nereducirane koordinate Y točke

Txtreducy2 - okvir teksta za ispis izračunate reducirane koordinate u drugom sustavu

Txtreducx2 - okvir teksta za ispis izračunate reducirane koordinate u drugom sustavu

Cmdrač - komandna tipka koja pokreće računanje

Cmdspremi - komandna tipka koja služi za spremanje izračunatih podataka

Cmdobriši - komandna tipka koja briše formu

Cmdpovratak - komandna tipka kojom se vraćamo na formu za izbor zadatka

Cmdkraj - komandna tipka kojom prekidamo rad s programom

4.8.2. Programski kôd forme "Zadatak 6" Option Explicit Dim vrijx As Single Dim vrijy As Single Dim i As Integer Private Sub cmdkraj_Click() End

Page 69: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

69

End Sub Private Sub Cmdobriši_Click() Frame2.Visible = False Txtimetočke = "" txtreducxcijeli = "": txtreducxdec = "" txtreducycijeli = "": txtreducydec = "" Txtimetočke.SetFocus End Sub Private Sub cmdpovratak_Click() izbor.Show Unload Me End Sub Private Sub cmdRač_Click() If txtreducycijeli = "" Or txtreducxcijeli = "" Then Frame2.Visible = False Cmdspremi.Enabled = False MsgBox "Unesite sve vrijednosti", vbInformation, "Upozorenje!" If txtreducycijeli = "" Then txtreducycijeli.SetFocus Else txtreducxcijeli.SetFocus End If Exit Sub End If Frame2.Visible = True If txtreducxcijeli = "" Or txtreducycijeli = "" Then MsgBox "Unesite sve vrijednosti", vbInformation, "Upozorenje!" If Txtimetočke = "" Then Txtimetočke.SetFocus ElseIf txtreducxcijeli = "" Then txtreducxcijeli.SetFocus ElseIf txtreducycijeli = "" Then txtreducycijeli.SetFocus End If Exit Sub End If y = Val(txtreducycijeli) + Val(txtreducydec) / 1000 x = Val(txtreducxcijeli) + Val(txtreducxdec) / 1000 transformacija TxtImeTočke2 = Txtimetočke Txtneredy.Text = (Int(ypc * 1000)) / 1000 Txtneredx.Text = (Int(xpc * 1000)) / 1000 Txtreducy2.Text = (Int(yc * 1000)) / 1000 Txtreducx2.Text = (Int(xc * 1000)) / 1000 Cmdspremi.Enabled = True End Sub Private Sub Cmdspremi_Click() Spremanje.Label1.Caption = ""

Page 70: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

70

Spremanje.Label2.Caption = "" Spremanje.Label3.Caption = "" Spremanje.Label4.Caption = "" Spremanje.Label5.Caption = "" Spremanje.Label6.Caption = "" Spremanje.Label7.Caption = "" Spremanje.Label8.Caption = "" On Error GoTo greška Spremanje.Label1.Caption = "Točka: " + Txtimetočke.Text Spremanje.Label2.Caption = "Y= " + txtreducycijeli.Text + "." + txtreducydec + " X= " + txtreducxcijeli.Text + "." + txtreducxdec Spremanje.Label3.Caption = "Yp= " + Txtneredy.Text + " Xp= " + Txtneredx.Text Spremanje.Label4.Caption = "Transformirane koordinate :" Spremanje.Label5.Caption = "Yc= " + Txtreducy2 + " Xc= " + Txtreducx2 Spremanje.Show greška: Exit Sub End Sub Private Sub Form_Load() zvj = 0 End Sub Private Sub txtreducxcijeli_GotFocus() i = 0 End Sub Private Sub txtreducxcijeli_KeyDown(KeyCode As Integer, Shift As Integer) txtreducxcijeli.SelText = "" End Sub Private Sub txtreducxcijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 7 Then txtreducxdec.SetFocus Exit Sub End If End Sub Private Sub txtreducxdec_GotFocus() i = 0 End Sub Private Sub txtreducxdec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

Page 71: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

71

MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 End If If i = 3 Then cmdRač.SetFocus Exit Sub End If End Sub Private Sub txtreducxdec_LostFocus() If txtreducxdec = "" Then Exit Sub If txtreducxdec < 10 And i = 1 Then txtreducxdec = txtreducxdec * 100 ElseIf txtreducxdec < 10 And i = 2 Then txtreducxdec = txtreducxdec * 10 ElseIf txtreducxdec < 100 And i = 2 Then txtreducxdec = txtreducxdec * 10 End If End Sub Private Sub txtreducycijeli_GotFocus() i = 0 End Sub Private Sub txtreducycijeli_KeyDown(KeyCode As Integer, Shift As Integer) txtreducycijeli.SelText = "" End Sub Private Sub txtreducycijeli_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva!", vbExclamation, "Upozorenje" KeyAscii = 0 i = i - 1 Exit Sub End If If i = 7 Then txtreducydec.SetFocus Exit Sub End If End Sub Private Sub txtreducydec_GotFocus() i = 0 End Sub Private Sub txtreducydec_KeyPress(KeyAscii As Integer) i = i + 1 If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then MsgBox "Dozvoljen unos samo brojeva", vbExclamation, "Upozorenje" KeyAscii = 0

Page 72: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

72

i = i - 1 End If If i = 3 Then txtreducxcijeli.SetFocus Exit Sub End If End Sub Private Sub txtreducydec_LostFocus() If txtreducydec = "" Then Exit Sub If txtreducydec < 10 And i = 1 Then txtreducydec = txtreducydec * 100 ElseIf txtreducydec < 10 And i = 2 Then txtreducydec = txtreducydec * 10 ElseIf txtreducydec < 100 And i = 2 Then txtreducydec = txtreducydec * 10 End If End Sub

4.9. Forma "Spremanje"

Slika 4.20: Izgled forme "Spremanje"

Page 73: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

73

Forma "Spremanje" se koristi za spremanje izračunatih vrijednosti u datoteku po vlastitom

izboru. Nakon što smo uspješno izračunali bilo koji od šest zadataka aktivira se tipka

"Spremi", pomoću koje otvaramo prozor za spremanje.

Na njoj su nam ponuđene sljedeće kontrole, koje su posebno namijenjene za ovu svrhu:

okvir liste jedinica (koji služi za odabir tražene jedinice za pohranu podataka), okvir liste

imenika (odabir željenog imenika na dotičnoj jedinici), te okvir liste datoteka (namijenjen

odabiru datoteke unutar željenog imenika).

Pokušao sam, u granicama svojih mogućnosti, napraviti prozor za spremanje što sličniji

standardim prozorima u većini WINDOWS-utemeljenih aplikacija, tako da osim navedenih

kontrola imamo i okvir teksta "Ekstenzija" pomoću kojeg odabiremo s kakvom će se

ekstenzijom datoteka spremiti. U okviru liste datoteka se pojavljuju samo datoteke ekstenzije

koja je navedena u gorespomenutom okviru teksta, dok pomoću specijalnog znaka "*" ( u

obliku *.*) možemo izlistati sve datoteke, kao i u većini drugih standardnih aplikacija.

Osim navedenog na lijevoj strani se nalazi pet oznaka koje sadrže tekst koji će biti spremljen,

iznad okvira liste datoteka imamo prikazan put (path) datoteke a iznad okvira liste datoteka se

nalazi okvir teksta s imenom datoteke. Taj okvir teksta prikazuje prvu datoteku u listi, osim

ako korisnik ne klikne na jednu od datoteka u listi, kada taj okvir teksta poprima ime

novooznačene datoteke. Da bismo unijeli novo ime dovoljno je kliknuti u okvir teksta

predviđen za ime datoteke, pri čemu se briše postojeći tekst, te možemo unijeti novo ime.

Ako želimo podatke spremiti u postojeću datoteku dovoljno je dvostruko kliknuti na njeno

ime u okviru liste datoteka, što za sobom povlači proceduru za slučaj pritiska na tipku "U

redu".

U programu postoji potreba spremanja podataka sa šest različitih formi, a zbog veličine

programa (da ne bi svaka forma imala svoju posebnu formu za spremanje), ta je potreba

riješena na način koji je opisan u nastavku.

Na formi "Spremanje" postoji pet oznaka predviđenih za prikaz podataka koje ćemo spremiti.

Svaki od zadataka zasebno definira tekst koji je njemu bitan na te oznake, na taj način

prebacujemo potrebne podatke na formu "Spremanje" te ih sad možemo bez ikakvih problema

spremiti. Za slučaj da smo spremili više točaka u istu datoteku, a zbog čitkosti podataka, na

početak se sprema red zvjezdica a nakon njega računati podaci, i tako redom za svaku

sljedeću točku.

4.9.1. Popis komandi na formi "Spremanje"

Spremanje - naziv forme

Frmdatoteke - okvir u kojem se nalaze sve komande

Label1-label10 - oznake za opisni tekst

Drvjedinice - padajući okvir s popisom jedinica

Dirlista - okvir liste imenika

Fildatoteke - okvir liste jedinica

Txtimedatoteke - okvir teksta za unos imena datoteke

Txtext - okvir teksta za unos željene ekstenzije

Cmduredu - komandna tipka za potvrdu spremanja

Cmdodustani - komandna tipka za odustajanje od spremanja i zatvaranje prozora za

spremanje

Page 74: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

74

4.9.2. Programski kôd forme "Spremanje"

Public spr$ Public extenzija Private Sub CmdOdustani_Click() Spremanje.Tag = "" Spremanje.Hide End Sub Private Sub CmdUredu_Click() zvj = zvj + 1 On Error GoTo greška If Txtimedatoteke.Text = "" Then MsgBox "nema označene datoteke", 48, "Upozorenje" Exit Sub End If spr$ = Lbldir.Caption + Txtimedatoteke.Text + extenzija Spremanje.Tag = spr$ broj = FreeFile() Open Spremanje.Tag For Append As #broj Print #broj, Print #broj, If zvj > 1 Then GoTo dalje Print #broj, String(25, "*") Print #broj, Label7.Caption If Label8.Caption = "" Then GoTo dalje Print #broj, Label8.Caption dalje: Print #broj, Print #broj, Label1.Caption Print #broj, Label2.Caption Print #broj, Label3.Caption Print #broj, Label4.Caption If Label5.Caption <> "" Then Print #broj, Label5.Caption Else Close GoTo kraj End If If Label6.Caption <> "" Then Print #broj, Label6.Caption Else Close GoTo kraj End If Close kraj: Spremanje.Visible = False Exit Sub greška: MsgBox "Nije dozvoljeno upisivanje u datoteku", vbExclamation, "Upozorenje"

Page 75: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

75

Txtimedatoteke.Text = "" Exit Sub End Sub Private Sub Dirlista_Change() Fildatoteke.Path = Dirlista.Path If (Fildatoteke.ListCount > 0) Then Fildatoteke.ListIndex = 0 Else Txtimedatoteke.Text = "" End If Lbldir.Caption = Fildatoteke.Path + "\" End Sub Private Sub drvjedinice_Change() Dirlista.Path = drvjedinice.Drive End Sub Private Sub Fildatoteke_Click() Txtimedatoteke.Text = Fildatoteke.FileName extenzija = "" End Sub Private Sub Fildatoteke_DblClick() Txtimedatoteke.Text = Fildatoteke.FileName extenzija = "" Call CmdUredu_Click End Sub Private Sub Form_Load() drvjedinice.Drive = "c:" Dirlista.Path = "c:\" Lbldir.Caption = Dirlista.Path Txtext.Text = "*.txt" Txtimedatoteke.Text = Fildatoteke.FileName extenzija = "" End Sub Private Sub Txtext_Change() Fildatoteke.Pattern = Txtext.Text extenzija = Right$(Txtext.Text, 4) End Sub Private Sub Txtimedatoteke_GotFocus() Txtimedatoteke = "" End Sub Private Sub Txtimedatoteke_Keyup(KeyCode As Integer, Shift As Integer) extenzija = Right$(Txtext.Text, 4) End Sub

Page 76: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

76

4.10. Modul "Konstante"

Moduli u Visual Basicu sadrže programski kôd funkcija koje se pozivaju sa različitih mjesta u

programu, čime se pojednostavnjuje i skraćuje pisanje programa. Na početku se nalaze

definicije globalnih konstanti i varijabli, čije vrijednosti se mogu pozivati s bilo kojeg mjesta

unutar programa, pri čemu za varijable definiramo tip podataka (ako ne definiramo tip

podataka automatski mu se dodjeljuje tip Variant. Ostatak modula se sastoji iz funkcija

preuzetih iz programa GAUSHN, to su:

Radijustu - funkcija za pretvaranje kuta izraženog u radijanima u stupnjeve

Širfit - računanje geografske širine koja odgovara duljini luka srednjeg meridijana,

te veličina Nt ,, .

Fifi - računanje geografske širine

Konvergencija - računanje konvergencije meridijana

Sustav - određivanje sustava točke, konstante kY i geografske širine srednjeg

meridijana

Transformacija - transformacija koordinata točke iz jednog sustava u susjedni

Redužip - redukcija dužine i pravca

Srrad - računanje srednjeg radijusa

Drugatočka - Računanje pravokutnih koordinata druge točke iz pravokutnih koordinata

jedne točke, azimuta i duljine geodetske linije

4.10.1. Programski kôd modula "Konstante"

Option Explicit Global zvj Global Const A = 6377397.155 Global Const b = 6356078.96325 Global Const pi = 3.14159265358979 Global Const r1 = 180# / pi Global Const r2 = pi / 180# Global Const m0 = 0.9999 Global Const e = 8.16968303965053E-02 Global Const ec = 8.19708403176893E-02 Global Const AO = 1.00503730594646 Global Const BO = 5.04784913836498E-03 Global Const CO = 1.05637864667293E-05 Global Const d00 = 2.06333485024118E-08 Global br$: Global xp$: Global t: Global yk: Global et2 Global y1: Global y2: Global x1: Global x2 Global n2: Global fi1: Global fi: Global fi2: Global fi3 Global n: Dim e2: Global cf: Global y: Global x: Global k: Global l0 Dim ce: Dim f2: Dim f4: Global f6: Global f8: Global g Global sf: Global t2: Global eta: Global n4: Global ypk Global yp4: Dim c3: Dim c4: Global c: Dim c5: Global yp Dim ks: Dim md: Dim st: Dim mi: Dim se Dim yk1: Dim z: Dim z2: Dim z3: Dim z4: Dim z5: Dim yp3: Dim yp5 Dim t4: Dim q1: Dim q2: Dim q3: Dim q4: Dim q5: Dim q6: Dim q7 Dim g1: Dim g2: Dim g3: Dim g4: Dim g5 Global ypc: Global xpc: Global yc: Global xc: Global ysustava

Page 77: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

77

Dim rm: Dim rm2: Dim rm4: Dim om

Global s: Global d: Global w12: Global w21: Global dy: Global dx Global ds: Global xpm: Global ypm: Global om1: Global om2: Global r1s: Global k1 Global k2: Global k3: Global k4: Global ps1: Global ps2 Global astu: Global amin: Global asekunde: Global asek: Global adec: Global az Global yp1: Global XP1: Global al: Global q12: Global dyp0: Global dxp0 Global yp2: Global xp2: Global n12: Global dyp: Global dxp Public Function radijustu(ByVal kr) ks = Abs(kr * r1) + 1 / 72000000: st = Int(ks): md = (ks - st) * 60 mi = Int(md): se = Int((md - mi) * 600000) / 10000 radijustu = CStr(st) + "-" + CStr(mi) + "-" + CStr(se) End Function Public Sub širfit(xp, yp) ce = 111120.619606 * r1 f2 = 0.14388535813 f4 = 0.00021077857 f6 = 0.00000042311 f8 = 0.0000000009 g = xp / ce fi1 = g + (f2 * Sin(2 * g) + f4 * Sin(4 * g) + f6 * Sin(6 * g) + f8 * Sin(8 * g)) * r2 cf = Cos(fi1): e2 = e * e: sf = Sin(fi1) t = Tan(fi1): t2 = t * t eta = ec * cf: et2 = eta * eta n = A / Sqr(1 - e2 * sf * sf): n2 = n * n: n4 = n2 * n2 ypk = yp * yp: yp4 = ypk * ypk End Sub Public Sub fifi() fi2 = -t * (1 + et2) / (2 * n2) fi3 = t * (5 + 3 * t * t + 6 * et2 - 6 * t * t * et2) / (24 * n2 * n2) fi = fi1 + fi2 * ypk + fi3 * yp4 End Sub Public Sub konvergencija() c3 = t / n c4 = -t * (1 + t2 - et2) / (3 * n2 * n) c5 = t * (2 + 5 * t2 + 3 * t2 * t2) / (15 * n4 * n) c = c3 * yp + c4 * ypk * yp + c5 * yp4 * yp End Sub Public Function sustav(ByVal y) k = Int(y * 0.000001) sustav = k * 1000000 + 500000 l0 = k * 3 * r2 End Function Public Sub transformacija() yk = sustav(y)

Page 78: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

78

yk1 = (6 - (1 + (y < 6500000) * 2) * (k = 6)) * 1000000 + 500000 xp = x / m0 yp = (y - yk) / m0 Call širfit(xp, yp) z = yp - n * 3 * r2 * Sgn(yk1 - yk) * cf z2 = z * z: z3 = z2 * z: z4 = z3 * z: z5 = z4 * z yp3 = ypk * yp: yp5 = yp4 * yp t4 = t2 * t2 q1 = (1 - t2 + et2) * z3 / 6 + t2 * z * ypk / 2 q2 = (-1 - 2 * t2 - et2) * yp3 / 6 q3 = (5 - 18 * t2 + t4) * z5 / 10 q4 = (5 * t2 - t4) * z3 * ypk q5 = (-1 - t2 + 2 * t4) * z2 * yp3 q6 = (-8 * t2 - 3 * t4) * z * yp4 / 2 q7 = (5 + 18 * t2 + 4 * t4) * yp5 / 10 ypc = z + (q1 + q2) / n2 + (q3 + q4 + q5 + q6 + q7) / (12 * n4) g1 = xp + t * (z2 - ypk) / (2 * n) g2 = (5 - t2 + 9 * et2) * z4 / 24 g3 = (-1 + t2 - et2) * z2 * ypk / 4 g4 = (-1 - 2 * t2 - et2) * z * yp3 / 6 g5 = (5 + 3 * t2 + et2) * yp4 / 24 xpc = g1 + t * (g2 + g3 + g4 + g5) / (n2 * n) yc = ypc * m0 + yk1 xc = xpc * m0 End Sub Public Sub redužip(yp1, XP1, yp2, xp2) dy = yp2 - yp1: dx = xp2 - XP1 ypm = yp1 + dy / 2: xpm = XP1 + dx / 2 yp = yp1: xp = XP1 srrad om1 = om yp = yp2: xp = xp2 srrad om2 = om yp = ypm: xp = xpm srrad ds = (om1 + 4 * om + om2) / 6 r1s = r1 * 3600 k1 = r1s / (2 * rm2) k2 = r1s / (6 * rm4) k3 = r1s * ec * ec * Cos(fi) ^ 2 * Tan(fi) / (rm2 * rm) k4 = r1s / (12 * rm2) ps1 = k1 * dx * yp - k2 * ypk * yp * dx + k3 * ypk * dy ps2 = k4 * dy * dx w12 = ps1 - ps2 w21 = -(ps1 + ps2) End Sub Public Sub srrad() Call širfit(xp, yp) fifi

Page 79: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

79

rm = A * Sqr(1 - e2) / (1 - e2 * Sin(fi) ^ 2): rm2 = rm * rm: rm4 = rm2 * rm2 om = 1 + ypk / (2 * rm2) + yp4 / (24 * rm4) End Sub Public Sub drugatočka() Call širfit(xp, yp) konvergencija q12 = al - c dyp0 = s * Sin(q12): dxp0 = s * Cos(q12) yp2 = yp1 + dyp0: xp2 = XP1 + dxp0 Call redužip(yp1, XP1, yp2, xp2) n12 = al - c - w12 / 3600 * r2 d = s * ds dyp = d * Sin(n12): dxp = d * Cos(n12) End Sub

Page 80: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

80

5. Testiranje programa

Pri testiranju programa korišten je program GAUSHN, koji je poslužio kao predložak za

usporedbu izračunatih rezultata ovog programa. U ovom poglavlju je dan usporedni prikaz

rezultata oba programa. Pri nekim rezultatima dolazi do odstupanja od jednog milimetra ili

tisućinke sekunde, što se pojavljuje zbog različitih tipova podataka korištenih u programima.

GAUSHN koristi Integer tip podataka, koji se koristi s manjim brojem znamenki iza

decimalne točke, dok VisualGAUSS koristi Variant tip podataka, koji koristi veći broj.

Navedeni su samo rezultati usporedbe novog programa sa programom GAUSHN jer nema

potrebe za dodatnim objašnjenjima.

5.1. Testiranje prvog zadatka

Pri testiranju prvog zadatka korištene su dvije točke, za koje GAUSHN sprema podatke

računanja u datoteku u sljedećem obliku:

GAUSH1

RACUNANJE PRAVOKUTNIH KOORDINATA U RAVNINI I

KONVERGENCIJE MERIDIJANA IZ GEOGRAFSKIH KOORDINATA

1 fi= 45 44 14.8847 la= 15 40 23.5089

yp= 52387.758 xp= 5066612.011

y= 5552382.519 x= 5066105.350

c= 0 28 55.6335

2 fi= 46 28 36.1658 la= 16 11 33.0661

yp= 91568.439 xp= 5149243.022

y= 5591559.282 x= 5148728.098

c= 0 51 53.0940

Page 81: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

81

Rezultati računanja pomoću programa VisualGAUSS su sljedeći:

************************* RAČUNANJE PRAVOKUTNIH KOORDINATA U RAVNINI I

KONVERGENCIJE MERIDIJANA IZ GEOGRAFSKIH KOORDINATA

Točka: 1

Fi= 45-44-14.8847 La= 15-40-23.5089

Yp= 52387.758 Xp= 5066612.011

Y= 5552382.519 X= 5066105.349

c= 0-28-55.6335

*************************

Točka: 2

Fi= 46-28-36.1658 La= 16-11-33.0661

Yp= 91568.438 Xp= 5149243.022

Y= 5591559.281 X= 5148728.098

c= 0-51-53.094

Page 82: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

82

5.2. Testiranje drugog zadatka

Rezultati računanja pomoću programa GAUSHN:

GAUSH2

RACUNANJE GEOGRAFSKIH KOORDINATA I KONVERGENCIJE

MERIDIJANA IZ PRAVOKUTNIH KOORDINATA U RAVNINI

1 y= 5552382.519 x= 5066105.350

fi= 45 44 14.8847 la= 15 40 23.5089

c= 0 28 55.6335

2 y= 5591559.282 x= 5148728.098

fi= 46 28 36.1658 la= 16 11 33.0661

c= 0 51 53.0940

Rezultati dobiveni pomoću programa VisualGAUSS:

*************************

RAČUNANJE GEOGRAFSKIH KOORDINATA I KONVERGENCIJE

MERIDIJANA IZ PRAVOKUTNIH KOORDINATA U RAVNINI

Točka: 1

Y= 5552382.519 X= 5066105.350

Fi= 45-44-14.8847 La=15-40-23.5089

c= 0-28-55.6335

*************************

Točka: 2

Y= 5591559.282 X= 5148728.098

Fi= 46-28-36.1658 La=16-11-33.0661

c= 0-51-53.094

Page 83: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

83

5.3. Testiranje trećeg zadatka

Rezultati računanja iz programa GAUSHN:

GAUSH3

RACUNANJE REDUKCIJE PRAVCA I DUZINE

555 y1= 5455769.067 x1= 5038731.397

666 y2= 5427152.640 x2= 5067309.650

s= 40445.062 d= 40442.754

w12= -3.897 w21= 4.588

7 y1= 5500000.000 x1= 5050000.000

40 y2= 5500000.000 x2= 5050179.982

s= 180.000 d= 179.982

w12= 0.000 w21= 0.000

Rezultati računanja iz programa VisualGAUSS:

*************************

RAČUNANJE REDUKCIJE PRAVCA I DUŽINE

Točka 1: 555 Y1= 5455769.067 X1= 5038731.397

Točka 2: 666 Y2= 5427152.640 X2= 5067309.650

s= 40445.061 d= 40442.755

w12= -3.897 w21= 4.5882

*************************

Točka 1: 7 Y1= 5500000.000 X1= 5050000.000

Točka 2: 40 Y2= 5500000.000 X2= 5050179.982

s= 180 d= 179.982

w12= 0 w21= 0

Page 84: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

84

5.4. Testiranje četvrtog zadatka

Rezultati programa GAUSHN:

GAUSH4

RACUNANJE PRAVOKUTNIH KOORDINATA U RAVNINI

IZ DUZINE I AZIMUTA GEODETSKE LINIJE

555 y1= 5455769.067 x1= 5038731.397

s= 40445.062 alfa= 314 33 25.4042

666 y2= 5427152.640 x2= 5067309.650

7 y1= 5500000.000 x1= 5050000.000

s= 180.000 alfa= 0 0 0.0000

40 y2= 5500000.000 x2= 5050179.982

Rezultati programa VisualGAUSS:

*************************

RAČUNANJE PRAVOKUTNIH KOORDINATA U RAVNINI

IZ DUŽINE I AZIMUTA GEODETSKE LINIJE

Točka 1: 555 Y1= 5455769.067 X1= 5038731.397

s= 40445.062 A= 314-33-25.4042

Točka 2: 666 Y2= 5427152.639 X2= 5067309.65

*************************

Točka 1: 7 Y1= 5500000.000 X1= 5050000.000

s= 180 A= 0-0-0.0

Točka 2: 40 Y2= 5500000 X2= 5050179.982

Page 85: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

85

5.5. Testiranje petog zadatka

Rezultat programa GAUSHN:

GAUSH5

RACUNANJE DUZINE I AZIMUTA GEODETSKE LINIJE

IZ PRAVOKUTNIH KOORDINATA U RAVNINI

555 y1= 5455769.067 x1= 5038731.397

666 y2= 5427152.640 x2= 5067309.650

s= 40445.062 d= 40442.754

alfa12= 314 33 25.4042 alfa21= 134 17 32.3985

7 y1= 5500000.000 x1= 5050000.000

40 y2= 5500000.000 x2= 5050179.982

s= 180.000 d= 179.982

alfa12= 0 0 0.0000 alfa21= 180 0 0.0000

Rezultat programa VisualGAUSS:

*************************

RAČUNANJE DUŽINE I AZIMUTA GEODETSKE LINIJE

IZ PRAVOKUTNIH KOORDINATA U RAVNINI

Točka 1: 555 Y1=5455769.067 X1=5038731.397

Točka 2: 666 Y2=5427152.640 X2=5067309.650

d = 40442.755 s = 40445.061

A21 = 134-17-32.3985 A12 = 314-33-25.4042

*************************

Točka 1: 7 Y1=5500000.000 X1=5050000.000

Točka 2: 40 Y2=5500000.000 X2=5050179.982

d = 179.982 s = 180

A21 = 180-0-0 A12 = 0-0-0

Page 86: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

86

5.6. Testiranje šestog zadatka

Rezultati programa GAUSHN:

GAUSH6

TRANSFORMACIJA PRAVOKUTNIH KOORDINATA IZ JEDNOG

KOORDINATNOG SUSTAVA U SUSJEDNI SUSTAV

218 y= 5610821.171 x= 5067029.450

ypc= -122619.401 xpc= 5067757.254

yc= 6377392.861 xc= 5067250.478

11 y= 5600000.000 x= 5000000.000

ypc= -135935.599 xpc= 5001166.855

yc= 6364077.994 xc= 5000666.739

Rezultati programa VisualGAUSS:

*************************

TRANSFORMACIJA PRAVOKUTNIH KOORDINATA IZ JEDNOG

KOORDINATNOG SUSTAVA U SUSJEDNI SUSTAV

Točka: 218

Y= 5610821.171 X= 5067029.450

Yp= -122619.402 Xp= 5067757.254

Transformirane koordinate :

Yc= 6377392.86 Xc= 5067250.478

*************************

Točka: 11

Y= 5600000.000 X= 5000000.000

Yp= -135935.6 Xp= 5001166.855

Transformirane koordinate :

Yc= 6364077.994 Xc= 5000666.738

Page 87: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

87

6. Literatura

Borčić, B. (1976): Gauss-Krügerova projekcija meridijanskih zona, Sveučilišna naklada

Liber, Zagreb.

Craig, J.C. (1996): Microsoft Visual Basic 4.0:Programerska radionica, Znak, Zagreb.

Frančula, N. (2000): Kartografske projekcije, Geodetski fakultet Sveučilišta u Zagrebu,

Zagreb.

Page 88: Alen Ćosić PROGRAM U VISUAL BASICU ZA …tu su još i poglavlja o programskom jeziku Visual Basic, poglavlje s formulama za računanja u Gauss-Krügerovoj projekciji te testiranje

88

7. Sažetak

Gauss-Krügerova projekcija je službena kartografska projekcija u Republici Hrvatskoj.

Postoji šest osnovnih zadataka za računanja u toj projekciji, čije formule predstavljaju osnovu

programa VisualGAUSS. U njemu sam koristio matematičke izraze prilagođene računalnoj

obradi iz programa GAUSHN (napravljen za istu svrhu u programskom jeziku QBASIC).

Za izradu programa koristio sam programski jezik Visual Basic jer sam otprije poznavao

osnove rada u njemu.

Program je podijeljen u nekoliko zasebnih dijelova (formi) a to su: početna forma s osnovnim

podacima o programu, forma za odabir željenog zadatka, šest formi za računanja i forma za

spremanje rezultata računanja u datoteku.

Program in Visual Basic for computations in Transverse

Mercator Projection

Transverse Mercator Projection is the official map projection in the Republic of Croatia.

There are six basic tasks for the calculation in this projection, whose formulas represent the

basics of program VisualGAUSS. In that program I used mathematical expressions adapted

for computer processing from the program GAUSHN (made for the same purpose with

program language QBASIC). In creation of my program I used program language Visual

Basic in which I already had some basic knowledge.

Program is divided in a number of separate parts (forms) which are: startup form with some

basic data about the program, form for choosing the desired task, six forms for calculations

and the form for saving resuls of calculation in file.