Andrzej Borowieckimatrix.ur.krakow.pl/~aborowiecki/skrypty/VisualBasic/... · 2011-05-14 · Po...

83
Andrzej Borowiecki Podstawy programowania w języku Visual Basic dla geodetów Kraków 2007

Transcript of Andrzej Borowieckimatrix.ur.krakow.pl/~aborowiecki/skrypty/VisualBasic/... · 2011-05-14 · Po...

Andrzej Borowiecki

Podstawy programowania w

języku Visual Basic dla geodetów

Kraków 2007

1

1. Wstęp

Język Visual Basic jest produktem firmy Microsoft i działa w środowisku Windows nie

tylko jako samodzielne narzędzie do tworzenia programów, ale jest teŜ narzędziem

wbudowanym w takie programy jak Word, Excel, Access czy MicroStation.

Za pomocą Visual Basica moŜna tworzyć programy działające samodzielnie (pliki *.exe)

oraz aplikacje wzbogacające istniejące oprogramowanie, np. w programie MicroStation

utworzono wiele tak zwanych nakładek dostosowujących ten program do szczególnych

potrzeb geodetów.

W niniejszej publikacji zaprezentowane zostaną tylko niektóre moŜliwości Visual Basica w

wersji zainstalowanej w programie Excel, ze szczególnym uwzględnieniem prostych zadań

geodezyjnych.

Bardzo szczegółowo opisany został pierwszy przykład obliczeń według twierdzenia

Pitagorasa. Rozdział ten polecamy początkującym programistom. Przedstawione tu sposoby

moŜna stosować we wszystkich następnych zadaniach, gdzie ze zrozumiałych względów

szczegółowe opisy nie powtarzają się.

2

2. Programowanie w języku Visual Basic

2.1. Wprowadzenie Programowanie w języku Visual Basic wymaga uruchomienia edytora, a następnie

najczęściej składa się z dwóch etapów:

- tworzenie formularza

- pisanie programu

2.2. Uruchamianie edytora programu Visual Basic w Excelu Z Menu programu Microsoft Excel wybieramy następujące opcje: Narzędzia Makro Edytor Visual Basic Na ekranie wyświetlany jest ekran edytora Visual Basic:

3

W oknie Project –VBAProject wyświetlane są informacje o nazwie skoroszytu (Zeszyt1), poniŜej standardowo wyświetlane są 3 arkusze. Programy w Visual Basicu wymagają zwykle utworzenia formularza uŜytkownika (UserForm). Aby go wstawić do programu naleŜy kliknąć myszą na ikonkę Insert UserForm. Po kliknięciu myszą na ikonkę Insert UserForm na ekranie wyświetlany jest czysty formularz o nazwie UserForm1 oraz paleta narzędzi Toolbox: W oknie Properties określa się właściwości obiektów.

4

2.3. Tworzenie formularza uŜytkownika (UserForm)

2.3.1. Umieszczanie napisu w nagłówku formularza : Umieścić napis w nagłówku formularza np. TWIERDZENIE PITAGORASA W tym celu naleŜy kliknąć myszą na formularz, a następnie w oknie właściwości Properties – UserForm1, w polu Caption wpisać tekst: TWIERDZENIE PITAGORASA . JeŜeli okno

Properties nie jest widoczne, naleŜy kliknąć na ikonkę

2.3.2. Ustawianie dla formularza domyślnej czcionki : W tym celu, w oknie właściwości Properties – UserForm1 klikamy myszą w polu Font i ustawiamy wybraną czcionkę:

5

2.3.3. Obiekty na formularzu Paleta Toolbox zawiera narzędzia do wstawiania obiektów na formularz. JeŜeli paleta Toolbox nie jest widoczna naleŜy kliknąć na ikonkę .

Opisane poniŜej obiekty wykorzystuje się najczęściej: - Label - napisy - TextBox - okienka tekstowe (okienka, do których wpisujemy teksty lub w których pojawiają się wyniki) . KaŜde okienko tekstowe powinno mieć swoją nazwę – przyjmijmy umowę, Ŝe nazwa ta winna kończyć się literą t . - CommandButton – przyciski polecenia - Image – pole grafiki

2.3.4. Dodawanie obiektów do ToolBox JeŜeli w ToolBox nie występuje jakiś obiekt np. tabelka vsFlexArray , trzeba uzupełnić zawartość ToolBox:

- kliknąć prawym klawiszem myszy na wolne miejsce wewnątrz ToolBox, - wybrać opcję: Additional Controls - zaznaczyć pole obok Formant VideoSoft FlexArray - kliknąć OK

6

- Po wykonaniu tych czynności ToolBox zawiera nową ikonkę VSFlexArray

Przykładowy widok tabelki VSFlexArray

7

2.3.5. Wstawianie obiektów na formularz Napisy Wstawić na formularz napis, np.: Obliczenie długości przeciwprostokątnej W tym celu z palety narzędziowej Toolbox wybieramy obiekt Label (czyli etykieta, napis) Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczony napis: W oknie Properties-Label1 w polu Caption wpisujemy tekst: Na formularzu pojawia się napis:

8

Okna tekstowe Wstawić na formularz okno tekstowe o nazwie at. W tym celu z palety narzędziowej Toolbox wybieramy obiekt TextBox: Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczone okienko tekstowe: W oknie Properties-TextBox1 w polu Name wpisujemy nazwę okienka np. at :

9

Wstawianie przycisków komend na formularz: Wstawić na formularz przycisk komend z napisem Oblicz. W tym celu z palety narzędziowej Toolbox wybieramy obiekt CommandButton: Na formularzu zaznaczamy miejsce, gdzie ma zostać umieszczony przycisk komend: W oknie Properties-CommandButton1 w polu Caption wpisujemy Oblicz :

10

Wstawianie tabelki

Wstawić na formularz tabelkę o nazwie tab1. W tym celu wybieramy z ToolBox ikonkę VSFlexArray

Następnie zaznaczamy na formularzu miejsce gdzie ma znaleźć się tabelka. W oknie Properties – vsFlexArray w polu (Name) wpisujemy nazwę tabeli np. tab1

11

Wstawianie grafiki w oknie Image:

W tym celu z palety narzędziowej Toolbox wybieramy obiekt Image: Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczona grafika:

W oknie Properties-Image1 w polu Picture wstawiamy nazwę rysunku np. wykonanego w programie Paint :

W polach PictureAlignment i PictureSizeMode naleŜy ustawić opcje 1.

12

Zmiana koloru dowolnego obiektu

Po zaznaczeniu kliknięciem myszy dowolnego obiektu na formularzu moŜemy w oknie jego właściwości Properties wybrać z Palety kolor tła – po angielsku BackColor:

ForeColor oznacza kolor liter jakie pojawią się na wybranym tle.

2.4. Obsługa zdarzeń Programowanie w języku Visual Basic sprowadza się do obsługi zdarzeń – to znaczy, Ŝe

działanie programu zaleŜy od tego co zrobi uŜytkownik.

KaŜdy obiekt umieszczony na formularzu moŜe mieć przypisaną jakąś funkcję lub procedurę.

Najczęściej procedury przypisuje się do przycisków komend . Kliknięcie myszą na taki

przycisk powoduje uruchomienie jakiejś procedury. W tym wypadku właśnie klikni ęcie

myszą jest zdarzeniem, na które program musi odpowiednio zareagować.

Ale istnieje teŜ wiele innych zdarzeń. Na przykład kiedy wpisujemy liczbę w okienku

tekstowym – zdarzeniem jest wyjście z tego okienka – czyli kliknięcie myszą gdziekolwiek

poza okienkiem. RównieŜ takie zdarzenie moŜe spowodować uruchomienie jakiejś procedury

– na przykład sformatowanie wpisanej liczby w taki sposób by zawierała dwa miejsca po

przecinku.

13

Listę moŜliwych zdarzeń moŜna obejrzeć kiedy klikniemy dwukrotnie myszą na obiekt wstawiony na formularzu. PoniŜej widoczny jest fragment listy zdarzeń dostępnej po kliknięciu na okienko tekstowe o nazwie t1: After update oznacza tu zakończenie edycji zawartości okienka, czyli kliknięcie myszą poza okienkiem. Pokazano tu przykład instrukcji formatującej zawartość okienka do dwóch miejsc po przecinku. Lista moŜliwych zdarzeń jest róŜna dla róŜnych obiektów. PoniŜej przedstawiono przykład zdarzeń dla przycisku komend. Procedury moŜna teŜ przypisywać do zdarzeń związanych z samym formularzem.

14

2.5. Podstawowe funkcje i operatory w języku Visual Basic

2.5.1. Typy zmiennych W Visual Basicu nie ma obowiązku deklarowania typów zmiennych. Wszystkie zmienne uŜywane w programie mają przypisany typ Variant – czyli zmieniający się. W pewnych sytuacjach jednak program wymaga by zmienna miała ściśle określony typ – dotyczy to na przykład zmiennych sterujących w instrukcji For – taka zmienna musi być liczbą całkowitą – np. Integer. Najczęściej stosowane typy zmiennych: Boolean logiczny: Tak lub Nie (True False) Byte liczby całkowite od 0-255 Integer liczby całkowite od –32 768 do 32 767; (% ) Long liczby całkowite od 2 147 483 648 do 2 147 483 647;(& ) Single liczby rzeczywiste od -3.402823E38 do -1.401298E-45 dla liczb ujemnych

i od 1.401298E-45 do 3.402823E38 dla liczb dodatnich; (!) Double liczby rzeczywiste od -1.79769313486231E308 do -4.94065645841247E-324

dla liczb ujemnych i od 4.94065645841247E-324 do 1.79769313486232E308 dla liczb dodatnich ; (#).

String zmienna tekstowa – zawiera dowolny tekst ($) Variant moŜe zawierać dowolny z wyŜej wymienionych typów i automatycznie

przekształcać jeden w drugi.

2.5.2. Deklarowanie typu zmiennej W celu deklarowania typów zmiennych stosuje się instrukcję Dim: Dim tekst as string Dim i as integer Dim x as double, y as double W instrukcji przypisania moŜna określić typ zmiennej uŜywając symboli podanych w nawiasach na końcu opisów dla poszczególnych typów: tekst$ =”napis” i% = 5 x# = 5397247.68

15

2.5.3. Instrukcja przypisania Najczęściej występującą instrukcją w programie jest instrukcja przypisania , która pozwala podstawić pod zmienną wynik obliczeń:

x = wyraŜenie W wyniku instrukcji przypisania obliczane jest wyraŜenie stojące po prawej stronie znaku "=" i obliczona wartość przypisywana jest wartości zmiennej stojącej po lewej stronie znaku "=".

2.5.4. Podstawowe operatory działań

- dodawanie + c=a+b - odejmowanie – d=e-f - mnoŜenie * b=a*e - dzielenie / f=c/b - potęgowanie ̂ d=a^c - pierwiastkowanie sqr c=sqr(a^2+b^2)

2.5.5. Funkcje matematyczne

- sinus Sin(alfa) x=d*Cos(alfa) - cosinus Cos(alfa) y=d*Sin(alfa) - tangens Tan(alfa) h=d*Tan(beta) - arcus tangens Atn(n ) alfa=Atn(y/x) - wartość bezwzględna Abs(n) b=Abs(x) - logarytm dziesiętny Log(n)/Log(10) l=log(y)/log(10) - logarytm naturalny Log(n) m=log(w) - ex Exp(x) c=Exp(d)

2.5.6. Definiowanie własnej funkcji (na przykładzie funkcji azymut). W geodezji bardzo często oblicza się azymut ze współrzędnych. Dlatego warto zdefiniować taką funkcję i wykorzystywać w wielu róŜnych programach. Z menu wybieramy opcje Insert Procedure a następnie wypełniamy okno dodawania procedury typu Function:

16

Następnie wpisujemy treść funkcji:

2.5.7. Zapisywanie funkcji w pliku Module: Bardzo często taka funkcja jak azymut jest wykorzystywana w róŜnych obliczeniach geodezyjnych i moŜe być stosowana jako składnik wielu programów. NaleŜy ją więc zapisać w pliku typu Module na przykład o nazwie Funkcje. Plik Module wstawiamy uŜywając opcji Insert Module Taki plik zapisany ma dysku moŜna dołączać do kaŜdego programu.

17

Następnie w oknie Properties-Module1 zmieniamy nazwę na przykład na Funkcje. Do tego modułu kopiujemy wybraną funkcję, po czym zapisujemy plik Funkcje na dysku, uŜywając opcji Export File Opcja Export File pojawia się kiedy klikniemy na moduł Funkcje prawym klawiszem myszy. Następnie określa się miejsce gdzie ma zostać zapisany moduł Funkcje:

18

2.5.8. Import pliku Funkcje typu Module: Kiedy tworzymy nowy program, w którym chcemy wykorzystać funkcje zapisane w pliku Funkcje, wtedy importujemy go klikając prawym klawiszem myszy w oknie Project-VBAProject i wybierając opcję Import File: Następnie określamy, który plik chcemy zaimportować:

19

Po wykonaniu tych czynności w oknie Project-VBAProject widoczny jest plik Funkcje zapisany w folderze Modules. Zawarte w nim funkcje moŜna wykorzystywać w nowym programie.

20

2.6. Funkcje związane z obsługą plików tekstowych

2.6.1. Określenie nazwy pliku tekstowego zawierającego współrzędne: Do tego celu najlepiej wykorzystać instrukcję InputBox Parametrami tej instrukcji są kolejno:

- tekst zachęty, - nagłówek okienka - domyślna nazwa pliku

plik = InputBox(tekst zachęty, nagłówek okienka, domyślna nazwa pliku) Na przykład: plik = InputBox("Podaj nazwe pliku ze wspolrzednymi punktów", "DANE", "F:\basic\dane.txt") Po wykonaniu tego polecenia na ekranie widzimy następujący obiekt:

Oczywiście nazwę pliku widoczną w okienku tekstowym moŜemy dowolnie zmieniać. Po czym naleŜy kliknąć myszą na przycisk OK . Wtedy wybrana nazwa pliku zostanie podstawiona pod zmienną plik .

21

2.6.2. Otwarcie pliku tekstowego JeŜeli chcemy czytać dane z pliku tekstowego, na przykład o nazwie plikd – otwieramy go do czytania (Input ) instrukcją:

Open plikd For Input As #1 JeŜeli chcemy zapisywać wyniki do pliku tekstowego, na przykład o nazwie plikw – otwieramy go do pisania (Output) instrukcją:

Open plikw For Output As #2

2.6.3. Czytanie danych z pliku tekstowego W dalszym ciągu programu kaŜdy otwarty plik jest identyfikowany przez swój numer. Na przykład instrukcja czytania danych z pliku o numerze 1 ma następujący wygląd:

Input #1, Nr, x, y

2.6.4. Pisanie wyników do pliku tekstowego Do zapisywania wyników w pliku tekstowym moŜna wykorzystać dwie instrukcje Write i Print :

Write #2, nr, x, y

Print #2, nr, x, y Sposób zapisywania danych w pliku przez te dwie instrukcje jest róŜny: Write:

"A",1000,1000 "B",2000,2000 "C",1000,2000

Print:

A 1000 1000 B 2000 2000 C 1000 2000

2.6.5. Zamykanie pliku tekstowego

KaŜdy plik tekstowy po wykorzystaniu naleŜy zamknąć instrukcją Close zawierającą numer tego pliku. Na przykład:

Close #1

22

2.6.6. Czytanie danych z pliku tekstowego o nieokreślonej długości: Instrukcja While Not EOF(n)… Wend

Pierwsza jej część: While Not EOF(1) oznacza: Dopóki Nie Koniec pliku (1). JeŜeli program nie natrafi na koniec pliku nr 1, wykonywane są dalsze instrukcje aŜ do linii zawierającej Wend, po czym program wraca na początek pętli do linii While Not EOF(1) . WaŜne jest, Ŝeby wewnątrz pętli While Not EOF(1) ... Wend znajdowała się instrukcja czytania z pliku INPUT #1, lista zmiennych na przykład:

Input #1, nr, x,y która czyta kolejne wiersze pliku tekstowego, co prowadzi w rezultacie do natrafienia na koniec pliku. Bez tej instrukcji pętla While Not EOF(1) ... Wend będzie działała w nieskończoność.

While Not EOF(1) ….. Input #1, nr, x,y … …

Wend

2.7. Instrukcje związane z tabelą: tab1.Cols = - określa liczbę kolumn w tabeli tab1.Rows = - określa liczbę wierszy w tabeli tab1.Col = - określa aktualną kolumnę w tabeli tab1.Row = - określa aktualny wiersz w tabeli tab1 = x - wstawia zmienną x do tabeli w miejscu określonym przez

aktualny wiersz i kolumnę y = tab1 - podstawia pod zmienną y zawartość tabeli określoną przez

aktualny wiersz i kolumnę

23

2.8. Instrukcje sterujące przebiegiem programu

2.8.1. Instrukcja If ... Then ... Else ... End If Znaczenie tych słów jest następujące : If – jeŜeli Then – wtedy Else – w przeciwnym wypadku End If – koniec instrukcji Zastosowanie instrukcji If oparte jest na sprawdzeniu jakiegoś warunku logicznego. JeŜeli ten warunek jest spełniony, wtedy wykonywane są polecenia umieszczone po słowie Then, na przykład:

If dx < 0 Then azym = azym + 200 JeŜeli dx jest mniejsze od 0 wtedy do obliczonego wcześniej azymutu azym naleŜy dodać 200. JeŜeli warunek nie jest spełniony – program nie wykonuje Ŝadnej czynności. W niektórych sytuacjach - jeŜeli (If ) warunek jest spełniony, wtedy (Then) program wykonuje jakieś czynności, a jeŜeli warunek nie jest spełniony, czyli w przeciwnym wypadku (Else) robi coś innego. Na przykład przy obliczaniu azymutu ze współrzędnych: If dx = 0 Then If dy > 0 Then azym = 100 - jeŜeli warunek dx=0 jest spełniony If dy < 0 Then azym = 300 Else azym = Atn(dy / dx) * 200 / Pi - jeŜeli warunek dx=0 nie jest spełniony(dx≠0) End If

2.8.2. Instrukcja powtarzania For ... To ... Next Zapis For i = 1 To pk oznacza: Dla i zmieniającego się od 1 do pk. Dla kaŜdej , kolejnej wartości i wykonywane są wszystkie instrukcje programu zawarte między linią For i linią Next i. Czyli zostaną one wykonane pk razy. For i = 1 To pk tab1.Row = i tab1 = i Next i Zmienną i nazywamy zmienną sterującą. Musi ona być zmienną całkowitą – typu integer.

24

2.8.3. Zmienne tablicowe Zmienne tablicowe, to zbiór zmiennych, które mają tę samą nazwę, a rozróŜniane są za pomocą indeksu. Inaczej mówiąc są to n-wymiarowe tabele liczb, a indeks (lub indeksy) wskazują połoŜenie danej liczby w tabeli. Wielkość i typ zmiennych w tabeli określamy za pomocą instrukcji Dim: Przykłady: Dim nazwa(20) as string tablica zmiennych tekstowych Dim x(20) as double, y(20) as double tablice zmiennych rzeczywistych

2.8.4. Zastosowanie instrukcji For do zmiennych tablicowych For i = 1 to 15 Write #2, nazwa(i),x(i),y(i) Next i PowyŜszy fragment programu powoduje zapisanie do pliku tekstowego #2, informacji o piętnastu punktach znajdujących się w zmiennych tablicowych: nazwa, x, y.

2.8.5. Czytanie danych z okienek tekstowych: Instrukcja Val (ang. Value – wartość liczbowa) pobiera tekst wpisany w okienku tekstowym zamienia go na liczbę i podstawia pod wartość zmiennej. JeŜeli na przykład zawartość okienka tekstowego at ma zostać podstawiona pod zmienną a zapisujemy to w następujący sposób:

a= Val(at.text)

2.8.6. Wyświetlanie wyniku obliczeń w okienku tekstowym W celu wyświetlenia wyniku w okienku tekstowym naleŜy zastosować instrukcję Format, która pozwala na określenie sposobu wyświetlania wartości, np. ustalenie liczby miejsc dziesiętnych. W celu umieszczenia wartości zmiennej c jako tekst w okienku tekstowym ct z dokładnością do dwóch miejsc po przecinku piszemy:

ct.text = Format(c,”0.00”)

25

2.8.7. Pisanie programu: Pisząc program naleŜy uwzględnić jego podstawowe części: Podstawowe części programu:

- czytanie danych - wykonywanie obliczeń - wyświetlanie, drukowanie lub zapisywanie wyników.

2.8.8. Przykład programu podzielonego na części: ‘ czytanie danych a= Val(at.text) b= Val(bt.text) ‘ obliczenia c = Sqr(a^2 + b^2) ‘ wyniki ct.text = Format(c,”0.00”) Program naleŜy wpisać w miejscu, w którym pojawi się kursor po dwukrotnym kliknięciu na przycisk Oblicz:

26

2.8.9. Symbol dziesiętny Bardzo waŜne jest, Ŝeby część dziesiętna liczby oddzielona była od całkowitej za pomocą kropki - . . Istotne jest Ŝeby w systemie komputera ustawić symbol dziesiętny jako kropkę. Z Panelu sterowania wybieramy opcję: Opcje regionalne i językowe:

Następnie w Opcjach regionalnych naciskamy przycisk Dostosuj:

27

Następnie ustawiamy kropkę jako Symbol dziesiętny: JeŜeli w pliku tekstowym zastosowany był przecinek, moŜna to łatwo zmienić stosując polecenia: Edycja Zaznacz wszystko i Edycja Zamień.

Po wpisaniu przecinka ” , ” w polu Znajdź, oraz kropki ” . ” w polu Zamień na, klikamy myszą na przycisk Zamień wszystko.

28

3. Przykład opracowania formularza dla twierdzenia Pitagorasa: Dane są długości boków przyprostokątnych a i b .

3.1. Obliczyć długość przeciwprostokątnej c gdy dane są długości a i b.

3.2. Proponowany docelowy wygląd formularza:

a

b

c 22 bac +=

29

3.3. Proponowana kolejność czynności przy tworzeniu formularza:

3.3.1. Umieszczanie napisu w nagłówku formularza : Umieścić napis w nagłówku formularza np. TWIERDZENIE PITAGORASA W tym celu naleŜy kliknąć myszą na formularz, a następnie w oknie właściwości Properties – UserForm1, w polu Caption wpisać tekst: TWIERDZENIE PITAGORASA . JeŜeli okno

Properties nie jest widoczne, naleŜy kliknąć na ikonkę

3.3.2. Ustawianie dla formularza domyślnej czcionki : W tym celu w oknie właściwości Properties – UserForm1 klikamy myszą w polu Font i ustawiamy wybraną czcionkę:

30

3.3.3. Wstawianie napisów na formularz Wstawić na formularz napis: Obliczenie długości przeciwprostokątnej W tym celu z palety narzędziowej Toolbox wybieramy obiekt Label (czyli etykieta, napis) Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczony napis: W oknie Properties-Label1 w polu Caption wpisujemy tekst: Na formularzu pojawia się napis:

31

W analogiczny sposób wstawiamy pozostałe napisy:

3.3.4. Wstawianie okienek tekstowych na formularz: W tym celu z palety narzędziowej Toolbox wybieramy obiekt TextBox:

32

Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczone okienko tekstowe: W oknie Properties-TextBox1 w polu Name wpisujemy nazwę okienka np. at : Analogicznie umieszczamy na formularzu pozostałe okienka tekstowe o nazwach bt i ct:

33

3.3.5. Wstawianie przycisków komend na formularz: W tym celu z palety narzędziowej Toolbox wybieramy obiekt CommandButton: Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczony przycisk komend: W oknie Properties-CommandButton1 w polu Caption wpisujemy Oblicz :

34

Analogicznie wstawiamy drugi przycisk komend z napisem KONIEC:

3.3.6. Zmiana koloru dowolnego obiektu Po zaznaczeniu kliknięciem myszy dowolnego obiektu na formularzu moŜemy w oknie jego właściwości Properties wybrać z Palety kolor tła – po angielsku BackColor: ForeColor oznacza kolor liter jakie pojawią się na wybranym tle.

35

3.3.7. Wstawianie grafiki w oknie Image:

W tym celu z palety narzędziowej Toolbox wybieramy obiekt Image: Na formularzu zaznaczamy miejsce gdzie ma zostać umieszczona grafika:

W oknie Properties-Image1 w polu Picture wstawiamy nazwę rysunku np. wykonanego w programie Paint :

W polach PictureAlignment i PictureSizeMode naleŜy ustawić opcje 1.

36

3.4. Wygląd arkusza po wykonaniu opisanych wyŜej czynności: Tak przygotowany formularz nie pozwala na razie wykonać Ŝadnych obliczeń. Brak w nim jeszcze programu.

3.5. Pisanie programu: Pisząc program naleŜy uwzględnić jego podstawowe części: Podstawowe części programu:

- czytanie danych - wykonywanie obliczeń - wyświetlanie, drukowanie lub zapisywanie wyników.

Do wpisywania programu wykorzystujemy przyciski komend. Aby pod przyciskiem umieścić polecenia programu naleŜy kliknąć dwukrotnie myszą na wybrany przycisk i w miejscu gdzie pojawi się kursor rozpocząć pisanie programu. Na przykład przycisk Koniec powinien zawierać tylko jedno polecenie: End

37

3.6. Opis przykładowego programu dla twierdzenia Pitagorasa:

3.6.1. Czytanie danych Czytanie danych moŜe wykorzystywać informacje wpisane w okienkach tekstowych, lub zapisane w pliku tekstowym na dysku, dyskietce lub innym nośniku. Opiszemy obecnie czytanie danych z okienek tekstowych: Instrukcja Val (ang. Value – wartość liczbowa) pobiera tekst wpisany w okienku tekstowym zamienia go na liczbę i podstawia pod wartość zmiennej. JeŜeli na przykład zawartość okienka tekstowego at ma zostać podstawiona pod zmienną a zapisujemy to w następujący sposób:

a= Val(at.text)

analogicznie podstawiamy pod zmienną b zawartość okienka bt:

b= Val(bt.text)

Instrukcje te moŜemy poprzedzić komentarzem (linia komentarza zaczyna się od apostrofu ‘ )

‘ czytanie danych

a= Val(at.text) b= Val(bt.text)

3.6.2. Obliczenia Wykonywanie obliczeń polega na stosowaniu instrukcji przypisania (podobnie jak to zrobiliśmy czytając dane). Po lewej stronie znaku równości jest nazwa zmiennej, a po prawej wyraŜenie, którego wartość ma być jej przypisana, na przykład: Aby obliczyć przeciwprostokątną z wzoru: piszemy:

c = Sqr(a^2 + b^2) gdzie: - Sqr oznacza pierwiastek kwadratowy (ang. Square Root)

- a^2 oznacza podniesienie wartości zmiennej a do potęgi 2.

22 bac +=

38

3.6.3. Wyświetlanie wyniku w okienku tekstowym

W celu wyświetlenia wyniku w okienku tekstowym naleŜy zastosować instrukcję Format, która pozwala na określenie sposobu wyświetlania wartości, np. ustalenie liczby miejsc dziesiętnych. W celu umieszczenia wartości zmiennej c w okienku tekstowym ct z dokładnością do dwóch miejsc po przecinku piszemy:

ct.text = Format(c,”0.00”)

3.7. Cały program: ‘ czytanie danych a= Val(at.text) b= Val(bt.text) ‘ obliczenia c = Sqr(a^2 + b^2) ‘ wyniki ct.text = Format(c,”0.00”) Program ten naleŜy wpisać w miejscu, w którym pojawi się kursor po dwukrotnym kliknięciu na przycisk Oblicz:

39

4. Przykładowe zadania geodezyjne:

4.1. Obliczenie długości boku ze współrzędnych:

Dane są współrzędne punktów A i B. Obliczyć długość boku AB.

22 yxd

YYy

XXx

AB

AB

AB

∆+∆=

−=∆−=∆

4.1.1. Proponowany wygląd formularza:

A

B

40

4.1.2. Program: ‘ czytanie danych XA=Val(xat.text)

YA=Val(yat.text) XB=Val(xbt.text) YB=Val(ybt.text)

‘ obliczenia dx=XB-XA dy=YB-YA d=Sqr(dx^2+dy^2) ‘ wyniki dt.text=Format(d,”0.00”)

41

4.2. Obliczenie długości boku i azymutu ze współrzędnych:

Dane są współrzędne punktów A i B. Obliczyć długość boku AB oraz azymut boku AB.

AB

ABAB

AB

AB

AB

XX

YYtgarc

yxd

YYy

XXx

−−=

∆+∆=

−=∆−=∆

α

22

4.2.1. Proponowany wygląd formularza:

A

B

ααααAB dAB

42

4.2.2. Program: ‘ czytanie danych XA=Val(xat.text)

YA=Val(yat.text) XB=Val(xbt.text) YB=Val(ybt.text)

‘ obliczenia dx=XB-XA dy=YB-YA d=Sqr(dx^2+dy^2) alfa=azymut(dy,dx) ‘ wyniki dt.text=Format(d,”0.00”) alt.text=Format(alfa,”0.0000”) W powyŜszym programie uŜyta została funkcja azymut(dy,dx). Aby korzystać w programie z funkcji naleŜy ją wcześniej zdefiniować.

4.2.3. Definiowanie funkcji: Z menu wybieramy opcje Insert Procedure a następnie wypełniamy okno dodawania procedury typu Function:

43

Następnie wpisujemy treść funkcji:

4.2.4. Instrukcja If ... Then ... Else ... End If W funkcji azymut wielokrotnie zastosowano instrukcję sterującą If ... Then...Else ... End If Znaczenie tych słów jest następujące : If – jeŜeli Then – wtedy Else – w przeciwnym wypadku End If – koniec instrukcji Zastosowanie instrukcji If oparte jest na sprawdzeniu jakiegoś warunku logicznego. JeŜeli ten warunek jest spełniony, wtedy wykonywane są polecenia umieszczone po słowie Then, na przykład:

If dx < 0 Then azym = azym + 200 JeŜeli dx jest mniejsze od 0 wtedy do obliczonego wcześniej azymutu azym naleŜy dodać 200. JeŜeli warunek nie jest spełniony – program nie wykonuje Ŝadnej czynności. W niektórych sytuacjach - jeŜeli (If ) warunek jest spełniony, wtedy (Then) program wykonuje jakieś czynności, a jeŜeli warunek nie jest spełniony, czyli w przeciwnym wypadku (Else) robi coś innego. Na przykład: If dx = 0 Then If dy > 0 Then azym = 100 - jeŜeli warunek dx=0 jest spełniony If dy < 0 Then azym = 300 Else azym = Atn(dy / dx) * 200 / Pi - jeŜeli warunek dx=0 nie jest spełniony(dx≠0) End If

44

4.2.5. Przykładowe rozwiązanie zadania:

4.2.6. Zapisywanie funkcji w pliku Module: Bardzo często taka funkcja jak azymut jest wykorzystywana w róŜnych obliczeniach geodezyjnych i moŜe być stosowana jako składnik wielu programów. NaleŜy ją więc zapisać w pliku typu Module na przykład o nazwie Funkcje. Taki plik zapisany ma dysku moŜna dołączać do kaŜdego programu. Plik Module wstawiamy uŜywając opcji Insert Module

45

Następnie w oknie Properties-Module1 zmieniamy nazwę na przykład na Funkcje. Do tego modułu kopiujemy wybraną funkcję, po czym zapisujemy plik Funkcje na dysku, uŜywając opcji Export File Opcja Export File pojawia się kiedy klikniemy na moduł Funkcje prawym klawiszem myszy. Następnie określa się miejsce gdzie ma zostać zapisany moduł Funkcje:

46

4.2.7. Import pliku Funkcje typu Module: Kiedy tworzymy nowy program, w którym chcemy wykorzystać funkcje zapisane w pliku Funkcje, wtedy importujemy go klikając prawym klawiszem myszy w oknie Project-VBAProject i wybierając opcję Import File: Następnie określamy, który plik chcemy zaimportować:

47

Po wykonaniu tych czynności w oknie Project-VBAProject widoczny jest plik Funkcje zapisany w folderze Modules. Zawarte w nim funkcje moŜna wykorzystywać w nowym programie.

48

4.3. . Obliczenie kąta ze współrzędnych jako róŜnicy dwóch azymutów

4.3.1. Proponowany wygląd formularza:

X

S

P

L

ααααSL

ααααSP ββββ

SL

SLSL

SP

SPSP

SLSP

XX

YYtgarc

XX

YYtgarc

−−=

−−=

−=

α

α

ααβ

49

4.3.2. Przypisanie programu do przycisków Do przycisków funkcyjnych przypisujemy program: Jak widać w obliczeniach uŜyto dwukrotnie funkcji azymut, z róŜnymi parametrami uzyskując dwa róŜne wyniki : alfap i alfal, co umoŜliwiło następnie obliczenie kąta beta.

4.3.3. Rozwiązanie przykładowego zadania:

50

4.4. Wyszukiwanie współrzędnych w pliku tekstowym

W omówionych powyŜej zadaniach współrzędne wpisuje się ręcznie do odpowiedniego okienka tekstowego. Jest to z wielu powodów niepraktyczne. Po pierwsze – wpisując współrzędną moŜna się pomylić, po drugie – licząc wiele podobnych zadań tracimy wiele czasu na wpisywanie danych. DuŜo wygodniej byłoby, gdyby współrzędne całego zbioru punktów znajdowały się w pliku tekstowym, a uŜytkownik wpisywałby tylko numer punktu , natomiast współrzędne program wyszukiwałby we wskazanym pliku.

4.4.1. Określenie nazwy pliku tekstowego zawierającego współrzędne: Do tego celu najlepiej wykorzystać instrukcję InputBox Parametrami tej instrukcji są kolejno:

- tekst zachęty, - nagłówek okienka - domyślna nazwa pliku

plik = InputBox(tekst zachęty, nagłówek okienka, domyślna nazwa pliku) Na przykład: plik = InputBox("Podaj nazwe pliku ze wspolrzednymi punktów", "DANE", "F:\basic\dane.txt") Po wykonaniu tego polecenia na ekranie widzimy następujący obiekt:

Oczywiście nazwę pliku widoczną w okienku tekstowym moŜemy dowolnie zmieniać. Po czym naleŜy kliknąć myszą na przycisk OK . Wtedy wybrana nazwa pliku zostanie podstawiona pod zmienną plik .

51

4.4.2. Otwarcie pliku tekstowego JeŜeli chcemy czytać dane z pliku tekstowego, na przykład plikd – otwieramy go do czytania (Input ) instrukcją:

Open plikd For Input As #1 JeŜeli chcemy zapisywać wyniki do pliku tekstowego, na przykład plikw – otwieramy go do pisania (Output) instrukcją:

Open plikw For Output As #2

W dalszym ciągu programu kaŜdy otwarty plik jest identyfikowany przez swój numer. Na przykład instrukcja czytania danych z pliku ma następujący wygląd:

Input #1, Nr, x, y

Do zapisywania wyników w pliku tekstowym moŜna wykorzystać dwie instrukcje Write i Print :

Write #2, nr, x, y

Print #2, nr, x, y Sposób zapisywania danych w pliku przez te dwie instrukcje jest róŜny: Write: "A",1000,1000 "B",2000,2000 "C",1000,2000 Print: A 1000 1000 B 2000 2000 C 1000 2000

4.4.3. Zamykanie pliku tekstowego

KaŜdy plik tekstowy po wykorzystaniu naleŜy zamknąć instrukcją Close zawierającą numer tego pliku. Na przykład:

Close #1

52

4.5. Obliczanie długości i azymutu ze współrzędnych

4.5.1. Przykładowy wygląd arkusza: W tym zadaniu nie musimy wprowadzać współrzędnych punktów A i B, zostaną one odczytane z pliku tekstowego, którego nazwę musimy określić. Następnie wpisujemy w kolumnie Nr - numery punktów, dla których mamy obliczyć długość i azymut.. Plik z danymi niech określa zmienna dane. Zmienna ta winna być dostępna w całym programie, dlatego naleŜy ją zadeklarować jako Public:

53

4.5.2. Źródło danych:

Do przycisku komend o tej nazwie przypisana jest jedna linia programu zawierająca instrukcję InputBox :

4.5.3. Szukaj współrzędnych:

Zastosowana tu została instrukcja While Not EOF(1) ... Wend.

54

4.5.4. Instrukcja While Not EOF Pierwsza jej część: While Not EOF(1) oznacza: Dopóki Nie Koniec pliku (1). JeŜeli program nie natrafi na koniec pliku nr 1, wykonywane są dalsze instrukcje aŜ do linii zawierającej Wend, po czym program wraca na początek pętli do linii While Not EOF(1) . WaŜne jest, Ŝeby wewnątrz pętli While Not EOF(1) ... Wend znajdowała się instrukcja Input #1, która czyta kolejne wiersze pliku tekstowego, co prowadzi w rezultacie do natrafienia na koniec pliku. Bez tej instrukcji pętla While Not EOF(1) ... Wend będzie działała w nieskończoność.

4.5.5. Program wpisany pod przyciskiem komend Oblicz:

‘ czytanie danych XA=Val(xat.text)

YA=Val(yat.text) XB=Val(xbt.text) YB=Val(ybt.text)

‘ obliczenia dx=XB-XA dy=YB-YA d=Sqr(dx^2+dy^2) alfa=azymut(dy,dx) ‘ wyniki dt.text=Format(d,”0.00”) alt.text=Format(alfa,”0.0000”)

4.5.6. Kolejność czynności przy rozwiązywaniu zadania:

- zapoznać się z nazwą i zawartością pliku z danymi oraz z treścią zadania: Nazwa – F:\Basic\dane2.txt Zawartość pliku:

2,100,150 5,100,400 4,240,382 6,400,100

NaleŜy obliczyć długość i azymut boku 2-5.

55

- wprowadzić nazwę zbioru z danymi W tym celu naleŜy kliknąć na przycisk komend Źródło danych i w okienku tekstowym wpisać nazwę pliku tekstowego z danymi, wraz ze ścieŜką dostępu, a następnie zatwierdzić to klikając myszą na OK. - w kolumnie Nr wpisać numery punktów i klikn ąć przycisk SZUKAJ WSPÓŁRZĘDNYCH

- klikn ąć na przycisk OBLICZ: Program ten ma tę zaletę, Ŝe współrzędne punktów A i B moŜna teŜ wpisać ręcznie do okienek. Wtedy klikamy tylko na przycisk Oblicz.

56

4.6. Obliczenie pola trójkąta z wzoru Herona Dane są długości trzech boków trójkąta a, b i c. Obliczyć pole tego trójkata P. Wzory:

4.6.1. Proponowany wygląd formularza: W tym programie dane wpisujemy ręcznie do odpowiednich okienek.

a

c

b

)()()(

2

bsbsassP

cbas

−⋅−⋅−⋅=

++=

57

4.6.2. program wpisany pod przyciskiem OBLICZ:

4.6.3. widok formularza po rozwiązaniu przykładowego zadania

58

4.7. Obliczenie pola trójkąta ze współrzędnych pobieranych z pliku

4.7.1. Proponowany wygląd formularza:

A B

C

)))(())(((5.0 CABABACA XXYYXXYYP −−−−−=

59

4.7.2. Źródło danych:

Do przycisku komend o tej nazwie przypisana jest jedna linia programu:

4.7.3. Szukaj współrzędnych

60

4.7.4. Oblicz:

4.7.5. Kolejność czynności:

- określić źródło danych - wpisać numery punktów - wyszukać współrzędne - obliczyć pole

4.7.6. Wygląd formularza po obliczeniu przykładowego zadania:

61

4.8. Obliczanie pola wieloboku ze współrzędnych:

Niniejszy program ma obliczać pole dowolnego wieloboku, realizując wzór Gaussa:

gdzie n jest liczbą punktów na obwodzie wieloboku. JeŜeli w trakcie obliczeń dojdziemy do punktu początkowego, wtedy i+1>n i zamiast i+1 przyjmujemy we wzorze wartość 1.

4.8.1. Proponowany wygląd formularza:

pt

Tab1

polet Nazwy które naleŜy nadać obiektom są wpisane na rysunku: tab1, pt, polet.

∑=

++ −=n

iiiii XYYXP

111 )(

2

1

62

4.8.2. Wstawianie okna tabelki na formularzu: JeŜeli w ToolBox nie występuje obiekt vsFlexArray trzeba uzupełnić zawartość ToolBox:

- kliknąć prawym klawiszem myszy na wolne miejsce wewnątrz ToolBox, - wybrać opcję: Additional Controls - zaznaczyć pole obok Formant VideoSoft FlexArray - kliknąć OK

- Po wykonaniu tych czynności ToolBox zawiera nową ikonkę VSFlexArray

63

4.8.3. Wprowadź współrzędne:

Private Sub CommandButton1_Click() Dim i As Integer pk = Val(pt) tab1.Cols = 4 tab1.Rows = pk + 1 tab1.Col = 1 tab1.Row = 0 tab1 = "Nr" tab1.Col = 2 tab1 = "X" tab1.Col = 3 tab1 = "Y" tab1.Col = 0 For i = 1 To pk tab1.Row = i tab1 = i Next i End Sub W powyŜszej procedurze zastosowano pętlę For ... To ... Next. W tym przykładzie zmienna sterująca i zmienia się od 1 do pk. Dla kaŜdej , kolejnej wartości i wykonywane są wszystkie instrukcje programu zawarte między linią For i linią Next i. Czyli zostaną one wykonane pk razy. Instrukcja Dim i As Integer definiuje typ zmiennej i jako Integer czyli liczbę całkowitą.

4.8.4. Instrukcje związane z tabelą: tab1.Cols = - określa liczbę kolumn w tabeli tab1.Rows = - określa liczbę wierszy w tabeli tab1.Col = - określa aktualną kolumnę w tabeli tab1.Row = - określa aktualny wiersz w tabeli tab1 = x - wstawia zmienną x do tabeli w miejscu określonym przez

aktualny wiersz i kolumnę y = tab1 - podstawia pod zmienną y zawartość tabeli określoną przez

aktualny wiersz i kolumnę

64

4.8.5. OBLICZ pole Private Sub CommandButton3_Click() pole = 0 For i = 1 To pk tab1.Row = i tab1.Col = 2 xi = tab1 tab1.Col = 3 yi = tab1 If i < pk Then tab1.Row = i + 1 tab1.Col = 2 xip1 = tab1 tab1.Col = 3 yip1 = tab1 Else tab1.Row = 1 tab1.Col = 2 xip1 = tab1 tab1.Col = 3 yip1 = tab1 End If pole = pole + (xi * yip1 - yi * xip1) Next i pole = Abs(pole) / 2 polet.Text = Format(pole, "0.0000") End Sub

4.8.6. Funkcja Abs Funkcja Abs w wierszu:

pole = Abs(pole) / 2

oznacza wartość bezwzględną.

65

4.8.7. Przebieg obliczeń: - uruchamiamy program - w oknie Liczba punktów wpisujemy ile jest punktów na obwodzie wieloboku:

- klikamy myszą na przycisk Wprowadź współrzędne po czym numery punktów i współrzędne wpisujemy do tabeli:

- następnie klikamy myszą na przycisk OBLICZ pole:

66

4.9. Czytanie z pliku danych do obliczenia pola wieloboku Program ten wykonuje obliczenia tego samego zadania co opisany powyŜej, jednak danych nie wprowadzamy ręcznie do tabeli, tylko wczytujemy je z pliku tekstowego.

4.9.1. Proponowany wygląd formularza:

4.9.2. Dane do zadania: Numery i współrzędne punktów leŜących na obwodzie wieloboku, dla którego mamy obliczyć pole winny być zapisane w pliku tekstowym, który moŜemy utworzyć korzystając z programu Notatnik . Na przykład dla czworoboku, plik ten ma następującą formę: 2 100 150 5 100 400 4 240 382 6 400 100 Plik z danymi zapisany jest np. jako a:\dane4.txt .

67

4.9.3. Wprowadź współrzędne: Private Sub CommandButton1_Click() Dim i As Integer tab1.Cols = 4 tab1.Rows = 1 tab1.Col = 1 tab1.Row = 0 tab1 = "Nr" tab1.Col = 2 tab1 = "X" tab1.Col = 3 tab1 = "Y" plik = InputBox("Podaj nazwe pliku ze wspolrzednymi punktów", "DANE", "a;\dane4.txt") r = 1 Open plik For Input As #1 While Not EOF(1) Input #1, Nr, x, y r = r + 1 tab1.Rows = r tab1.Row = r - 1 tab1.Col = 1 tab1 = Nr tab1.Col = 2 tab1 = x tab1.Col = 3 tab1 = y Wend Close #1 pt.Text = r - 1 pk = r - 1 tab1.Col = 0 For i = 1 To pk

tab1.Row = i tab1 = i

Next i End Sub

68

Wiersze procedury zawarte między:

While Not EOF(1) – dopóki nie koniec pliku nr 1 oraz

Wend pozwalają na odczytanie kolejnych wierszy z pliku tekstowego za pomocą instrukcji:

Input #1, nr, x, y . Wczytane wartości są wstawiane w odpowiednich komórkach tabeli. Równocześnie liczona jest liczba wczytanych punktów r i zwiększana jest liczba wierszy tabeli tab1.rows:

r=r+1 tab1.Rows = r

4.9.4. Obliczenie pola z pliku Private Sub CommandButton3_Click() pole = 0 For i = 1 To pk tab1.Row = i tab1.Col = 2 xi = Val(tab1) tab1.Col = 3 yi = Val(tab1) If i < pk Then tab1.Row = i + 1 tab1.Col = 2 xip1 = Val(tab1) tab1.Col = 3 yip1 = Val(tab1) Else tab1.Row = 1 tab1.Col = 2 xip1 = Val(tab1) tab1.Col = 3 yip1 = Val(tab1) End If pole = pole + (xi * yip1 - yi * xip1) Next i pole = Abs(pole) / 2 polet.Text = Format(pole, "0.0") End Sub

69

4.10. Obliczenie średniej arytmetycznej dla dowolnej liczby pomiarów W okienku Liczba pomiarów wpisuje się odpowiednią wartość. Następnie naleŜy kliknąć na przycisk Wprowadź wyniki pomiarów . Wpisuje się liczby tylko w kolumnie L . Reszta tabeli ma zostać wyliczona przez komputer. W pierwszej kolejności program określa się wartość x0 jako najmniejszą z podanych pomiarów L . Następnie oblicza wartości l i jako róŜnicę (L i – x0) ∗∗∗∗ 100 . Równocześnie liczy sumę l i . Poprawka niewiadomej obliczana jest z wzoru: Wartość średniej to:

n

lx ∑=∆

1000

xxx

∆+=

70

PoniŜej podano procedury przypisane do przycisków Wprowadź wyniki pomiarów i OBLICZ średnią.

4.10.1. Wprowadź wyniki pomiarów:

71

4.10.2. OBLICZ średnią:

72

Dokończenie zadania – ocena dokładności: Tę część pozostawiamy czytelnikowi do samodzielnego opracowania. Aby zadanie dokończyć naleŜy obliczyć całą zawartość tabeli:

dx=sumal/n

vi = dx – li

sumav

vv=v*v

sumavv następnie błąd średni pomiarów: i błąd średni wyrównanej niewiadomej (czyli średniej):

1

][

−=

n

vvm

n

mmx =

73

4.11. Wyrównanie punktu węzłowego w niwelacji

Private Sub CommandButton1_Click() 'Przygotowanie tabelki lc = Val(lct) : lc2 = lc + 5 : tab1.Rows = lc2 : tab1.Cols = 12 tab1.Row = 0 tab1.Col = 1 : tab1 = "R" tab1.Col = 2 : tab1 = "dh" tab1.Col = 3 : tab1 = "d" tab1.Col = 4 : tab1 = "W" tab1.Col = 5 : tab1 = "l" tab1.Col = 6 : tab1 = "p" tab1.Col = 7 : tab1 = "pl" tab1.Col = 8 : tab1 = "v" tab1.Col = 9 : tab1 = "pv" tab1.Col = 10 : tab1 = "pvv" tab1.Col = 11 : tab1 = "pll" tab1.Col = 0 For i = 1 To lc tab1.Row = i : tab1 = i Next i tab1.Row = lc + 1 : tab1 = "Sumy" tab1.Row = lc + 2 : tab1 = "Xo" tab1.Row = lc + 3 : tab1 = "dx" tab1.Row = lc + 4 : tab1 = "X" End Sub

74

Private Sub CommandButton3_Click() 'Obliczenie przybliŜonych wysokości’ For i = 1 To lc tab1.Row = i : tab1.Col = 1 : r = Val(tab1) tab1.Col = 2 : dh = Val(tab1) w = r + dh tab1.Col = 4 : tab1 = Format(w, "0.000") Next i End Sub Private Sub CommandButton4_Click() 'warto ść Xo tab1.Row = 1: tab1.Col = 4: x0 = Val(tab1) For i = 1 To lc tab1.Row = i: temp = Val(tab1): If temp < x0 Then x0 = temp Next i tab1.Row = lc + 2: tab1.Col = 1: tab1 = Format(x0, "0.000") End Sub Private Sub CommandButton5_Click() ‘wyrównanie wysoko ści punktu tab1.Col = 1 : tab1.Row = lc + 2 : x0 = Val(tab1) sumap = 0 : sumapl = 0 For i = 1 To lc 'obliczenie wag tab1.Row = i : tab1.Col = 3 : d = Val(tab1) : p = 1 / d tab1.Col = 6 : tab1 = Format(p, "0.00") sumap = sumap + p 'obliczenie wyrazów wolnych tab1.Col = 4 : r = Val(tab1) : l = r - x0 tab1.Col = 5 : tab1 = Format(l, "0.000") pl = p * l : tab1.Col = 7 : tab1 = Format(pl, "0.000") sumapl = sumapl + pl Next i tab1.Row = lc + 1 : tab1.Col = 5 : tab1 = Format(sumap, "0.000") tab1.Col = 7 : tab1 = Format(sumapl, "0.000") 'obliczenie poprawki dx dx = sumapl / sumap : tab1.Col = 1 : tab1.Row = lc + 3 : tab1 = Format(dx, "0.000") ‘obliczenie wyrównanej wysoko ści x = x0 + dx : tab1.Row = lc + 4 : tab1 = Format(x, "0.000") End Sub

75

5. Wstawianie do tabeli danych w oparciu o plik tekstowy zawierający numery i współrzędne punktów.

5.1. Czytanie z pliku tekstowego współrzędnych wybranych punktów

5.1.1. Plik tekstowy z danymi Na dysku lub innym nośniku musi znajdować się plik tekstowy z danymi zapisanymi w formacie: Nr X Y .

Jak widać plik ten ma nazwę nrxy2.txt . Trzeba tę nazwę wraz z lokalizacją pliku zapami.ętać, gdyŜ będzie potrzebna w programie. W pliku ze współrzędnymi moŜe znajdować się nawet kilkaset punktów. Chodzi nam o to, Ŝeby wystarczyło w programie podać numer punktu, a program sam odnajdzie i pobierze współrzędne.

76

5.1.2. Symbol dziesiętny Bardzo waŜne jest, Ŝeby część dziesiętna liczby oddzielona była od całkowitej za pomocą kropki - . . Istotne jest Ŝeby w systemie komputera ustawić symbol dziesiętny jako kropkę. Z Panelu sterowania wybieramy opcję: Opcje regionalne i językowe:

Następnie w Opcjach regionalnych naciskamy przycisk Dostosuj:

77

Następnie ustawiamy kropkę jako Symbol dziesiętny: JeŜeli w pliku tekstowym zastosowany był przecinek, moŜna to łatwo zmienić stosując polecenia: Edycja Zaznacz wszystko i Edycja Zamień.

Po wpisaniu przecinka ” , ” w polu Znajdź, oraz kropki ” . ” w polu Zamień na, klikamy myszą na przycisk Zamień wszystko.

78

5.1.3. Formularz:

5.1.4. Procedura uruchomienia W momencie uruchamiania programu wykonywane są instrukcje przypisane do formularza. Aby je wpisać klikamy dwukrotnie na formularz:

79

Po wykonaniu procedury uruchomienia formularz ma następujący wygląd: W kolumnie Nr wpisujemy numery punktów i naciskamy przycisk Wyszukaj współrzędne. Do tego przycisku przypisana jest następująca procedura:

80

1. WSTĘP.................................................................................................................................. 1

2. PROGRAMOWANIE W J ĘZYKU VISUAL BASIC ...................................................... 2

2.1. WPROWADZENIE.............................................................................................................. 2 2.2. URUCHAMIANIE EDYTORA PROGRAMU V ISUAL BASIC W EXCELU.................................... 2 2.3. TWORZENIE FORMULARZA UśYTKOWNIKA (USERFORM) ................................................. 4

2.3.1. Umieszczanie napisu w nagłówku formularza : ....................................................... 4 2.3.2. Ustawianie dla formularza domyślnej czcionki : ..................................................... 4 2.3.3. Obiekty na formularzu.............................................................................................. 5 2.3.4. Dodawanie obiektów do ToolBox ............................................................................ 5 2.3.5. Wstawianie obiektów na formularz ......................................................................... 7

2.4. OBSŁUGA ZDARZEŃ ........................................................................................................ 12 2.5. PODSTAWOWE FUNKCJE I OPERATORY W JĘZYKU V ISUAL BASIC ................................... 14

2.5.1. Typy zmiennych ...................................................................................................... 14 2.5.2. Deklarowanie typu zmiennej .................................................................................. 14 2.5.3. Instrukcja przypisania ............................................................................................ 15 2.5.4. Podstawowe operatory działań .............................................................................. 15 2.5.5. Funkcje matematyczne ........................................................................................... 15 2.5.6. Definiowanie własnej funkcji (na przykładzie funkcji azymut). ............................. 15 2.5.7. Zapisywanie funkcji w pliku Module:..................................................................... 16 2.5.8. Import pliku Funkcje typu Module:....................................................................... 18

2.6. FUNKCJE ZWIĄZANE Z OBSŁUGĄ PLIKÓW TEKSTOWYCH................................................. 20 2.6.1. Określenie nazwy pliku tekstowego zawierającego współrzędne: ......................... 20 2.6.2. Otwarcie pliku tekstowego ..................................................................................... 21 2.6.3. Czytanie danych z pliku tekstowego ....................................................................... 21 2.6.4. Pisanie wyników do pliku tekstowego .................................................................... 21 2.6.5. Zamykanie pliku tekstowego................................................................................... 21 2.6.6. Czytanie danych z pliku tekstowego o nieokreślonej długości: Instrukcja While Not EOF(n)… Wend 22

2.7. INSTRUKCJE ZWIĄZANE Z TABELĄ: ................................................................................. 22 2.8. INSTRUKCJE STERUJĄCE PRZEBIEGIEM PROGRAMU......................................................... 23

2.8.1. Instrukcja If ... Then ... Else ... End If ................................................................ 23 2.8.2. Instrukcja powtarzania For ... To ... Next............................................................ 23 2.8.3. Zmienne tablicowe.................................................................................................. 24 2.8.4. Zastosowanie instrukcji For do zmiennych tablicowych........................................ 24 2.8.5. Czytanie danych z okienek tekstowych:.................................................................. 24 2.8.6. Wyświetlanie wyniku obliczeń w okienku tekstowym ............................................. 24 2.8.7. Pisanie programu:.................................................................................................. 25 2.8.8. Przykład programu podzielonego na części: ......................................................... 25 2.8.9. Symbol dziesiętny ...................................................................................................26

3. PRZYKŁAD OPRACOWANIA FORMULARZA DLA TWIERDZENIA PITAGORASA:...................................................................................................................... 28

3.1. OBLICZYĆ DŁUGOŚĆ PRZECIWPROSTOKĄTNEJ C GDY DANE SĄ DŁUGOŚCI A I B. ............. 28 3.2. PROPONOWANY DOCELOWY WYGLĄD FORMULARZA: .................................................... 28 3.3. PROPONOWANA KOLEJNOŚĆ CZYNNOŚCI PRZY TWORZENIU FORMULARZA:.................... 29

3.3.1. Umieszczanie napisu w nagłówku formularza : ..................................................... 29 3.3.2. Ustawianie dla formularza domyślnej czcionki : ................................................... 29 3.3.3. Wstawianie napisów na formularz ......................................................................... 30

81

3.3.4. Wstawianie okienek tekstowych na formularz: ...................................................... 31 3.3.5. Wstawianie przycisków komend na formularz: ...................................................... 33 3.3.6. Zmiana koloru dowolnego obiektu......................................................................... 34 3.3.7. Wstawianie grafiki w oknie Image: ........................................................................ 35

3.4. WYGLĄD ARKUSZA PO WYKONANIU OPISANYCH WYśEJ CZYNNOŚCI:............................. 36 3.5. PISANIE PROGRAMU: ...................................................................................................... 36 3.6. OPIS PRZYKŁADOWEGO PROGRAMU DLA TWIERDZENIA PITAGORASA: ........................... 37

3.6.1. Czytanie danych ..................................................................................................... 37 3.6.2. Obliczenia............................................................................................................... 37 3.6.3. Wyświetlanie wyniku w okienku tekstowym ........................................................... 38

3.7. CAŁY PROGRAM: ............................................................................................................ 38

4. PRZYKŁADOWE ZADANIA GEODEZYJNE: ................. ........................................... 39

4.1. OBLICZENIE DŁUGOŚCI BOKU ZE WSPÓŁRZĘDNYCH:....................................................... 39 4.1.1. Proponowany wygląd formularza:......................................................................... 39 4.1.2. Program: ................................................................................................................ 40

4.2. OBLICZENIE DŁUGOŚCI BOKU I AZYMUTU ZE WSPÓŁRZĘDNYCH: .................................... 41 4.2.1. Proponowany wygląd formularza:......................................................................... 41 4.2.2. Program: ................................................................................................................ 42 4.2.3. Definiowanie funkcji: ............................................................................................. 42 4.2.4. Instrukcja If ... Then ... Else ... End If ................................................................ 43 4.2.5. Przykładowe rozwiązanie zadania:........................................................................ 44 4.2.6. Zapisywanie funkcji w pliku Module:..................................................................... 44 4.2.7. Import pliku Funkcje typu Module:....................................................................... 46

4.3. . OBLICZENIE KĄTA ZE WSPÓŁRZĘDNYCH JAKO RÓśNICY DWÓCH AZYMUTÓW............... 48 4.3.1. Proponowany wygląd formularza:......................................................................... 48 4.3.2. Przypisanie programu do przycisków .................................................................... 49 4.3.3. Rozwiązanie przykładowego zadania: ................................................................... 49

4.4. WYSZUKIWANIE WSPÓŁRZĘDNYCH W PLIKU TEKSTOWYM ............................................. 50 4.4.1. Określenie nazwy pliku tekstowego zawierającego współrzędne: ......................... 50 4.4.2. Otwarcie pliku tekstowego ..................................................................................... 51 4.4.3. Zamykanie pliku tekstowego................................................................................... 51

4.5. OBLICZANIE DŁUGOŚCI I AZYMUTU ZE WSPÓŁRZĘDNYCH............................................... 52 4.5.1. Przykładowy wygląd arkusza: ................................................................................ 52 4.5.2. Źródło danych: ....................................................................................................... 53 4.5.3. Szukaj współrzędnych: ........................................................................................... 53 4.5.4. Instrukcja While Not EOF...................................................................................... 54 4.5.5. Program wpisany pod przyciskiem komend Oblicz: .............................................. 54 4.5.6. Kolejność czynności przy rozwiązywaniu zadania: ............................................... 54

4.6. OBLICZENIE POLA TRÓJKĄTA Z WZORU HERONA............................................................ 56 4.6.1. Proponowany wygląd formularza:......................................................................... 56 4.6.2. program wpisany pod przyciskiem OBLICZ:......................................................... 57 4.6.3. widok formularza po rozwiązaniu przykładowego zadania ................................... 57

4.7. OBLICZENIE POLA TRÓJKĄTA ZE WSPÓŁRZĘDNYCH POBIERANYCH Z PLIKU.................... 58 4.7.1. Proponowany wygląd formularza:......................................................................... 58 4.7.2. Źródło danych: ....................................................................................................... 59 4.7.3. Szukaj współrzędnych............................................................................................. 59 4.7.4. Oblicz: .................................................................................................................... 60 4.7.5. Kolejność czynności: .............................................................................................. 60 4.7.6. Wygląd formularza po obliczeniu przykładowego zadania: .................................. 60

82

4.8. OBLICZANIE POLA WIELOBOKU ZE WSPÓŁRZĘDNYCH:.................................................... 61 4.8.1. Proponowany wygląd formularza:......................................................................... 61 4.8.2. Wstawianie okna tabelki na formularzu: ................................................................. 62 4.8.3. Wprowadź współrzędne: ........................................................................................ 63 4.8.4. Instrukcje związane z tabelą: ................................................................................. 63 4.8.5. OBLICZ pole .......................................................................................................... 64 4.8.6. Funkcja Abs............................................................................................................ 64 4.8.7. Przebieg obliczeń: .................................................................................................. 65

4.9. CZYTANIE Z PLIKU DANYCH DO OBLICZENIA POLA WIELOBOKU ..................................... 66 4.9.1. Proponowany wygląd formularza:......................................................................... 66 4.9.2. Dane do zadania: ................................................................................................... 66 4.9.3. Wprowadź współrzędne: ........................................................................................ 67 4.9.4. Obliczenie pola z pliku ........................................................................................... 68

4.10. OBLICZENIE ŚREDNIEJ ARYTMETYCZNEJ DLA DOWOLNEJ LICZBY POMIARÓW.............. 69 4.10.1. Wprowadź wyniki pomiarów:............................................................................... 70 4.10.2. OBLICZ średnią:.................................................................................................. 71

4.11. WYRÓWNANIE PUNKTU WĘZŁOWEGO W NIWELACJI..................................................... 73

5. WSTAWIANIE DO TABELI DANYCH W OPARCIU O PLIK TEK STOWY ZAWIERAJ ĄCY NUMERY I WSPÓŁRZ ĘDNE PUNKTÓW ........................................ 75

5.1. CZYTANIE Z PLIKU TEKSTOWEGO WSPÓŁRZĘDNYCH WYBRANYCH PUNKTÓW ................ 75 5.1.1. Plik tekstowy z danymi ........................................................................................... 75 5.1.2. Symbol dziesiętny ...................................................................................................76 5.1.3. Formularz: ............................................................................................................. 78 5.1.4. Procedura uruchomienia........................................................................................ 78