wykład z podstawy programowania.doc

(223 KB) Pobierz
#W procedurze umieszczonej wewnątrz zakresu tablicy instrukcja ReDim może służyć do zmiany liczby wymiarów, definiowania liczby elementów oraz definiowania górnego i dolnego ograniczenia dla każdego z wymiarów

#W procedurze umieszczonej wewnątrz zakresu tablicy instrukcja ReDim może służyć do zmiany liczby wymiarów, definiowania liczby elementów oraz definiowania górnego i dolnego ograniczenia dla każdego z wymiarów. Instrukcja ReDim może być stosowana do zmiany tablicy dynamicznej dowolnie często. Każda jednak taka operacja powoduje utratę isniejących danych w tablicy. Aby powiększyć tablicę i zachować jej dotychczasowe dane, należy użyć polecenia ReDim Preserze. Na przykład, poniższa instrukcja powiększa tablicę varTab o 10 elementów bez utraty bieżących wartości oryginalnych elementów.

 

#ReDim Preserze warta(UBound(VarTab)+10)

 

#Uwaga stosując słowo kluczowe Preerve dla tablicy dynamicznej można zmienić jedynie górne ograniczenie ostatniego wymiaru, nie można jednak zmienić liczby wymiarów. Można również używać zmiennych.

 

Kod programu może być umieszczony w jednym z modułów VB:

module formy

module standardowym

module klasy.

 

Public Z=true <= dostępna dla wszystkich procedur w projekcie Deklarowania przez Public

              Modul Y=100 <= dostępna dla wszystkich procedur w module, deklarowana przez Dim lub Private w General Declaration modułu

                            Procedura lub funkcja X=10 <= Dostępna jedynie we wnętrzy procedury lub funkcji. Zmienna deklarowana poprzez Dim we wnętrzu procedury

 

Zmienne publiczne zadeklarowane w module formy muszą być poprzedzone nazwą formy gdy są wywoływane przez procedurę innej formy (frmForm1.Z)

 

PRZEKAZYWANIE ARGUMENTÓW

#Wszystkie argumenty są przekazywane do procedury przez odwołanie, chyba że zostanie to określone inaczej. Metoda ta jest efektywna , fyż czas przekazywania w ten sposób wszystkich argumentów jest taki sam i zajmują one tę samą wielkość pamięci (4 bajty) wewnątrz procesy niezależnie od typu danych.

 

#Jeżeli w deklaracji procedury zostanie dodane słowo kluczowe ByVal, wskazany argument będzie przekazywany przez wartość. Argumenty przekazywane przez wartość zajmują w procedurze od 2 do 16 bajtów, zależnie od typu danych argumentów. Większe typy danych (np. String i Wariant) są przekazywane przez wartość nieco dłużej niż małe.

Przekazanie argumentu przez wartość powoduje skopiowanie oryginalnej zmiennej. Zmiany dokonane w arugmencie wewnątrz procedury nie są odzwierciedlane w oryginalnej zmiennej.


#Ponieważ ByVal tworzy kopię argumentu, pozwala to przekazać zmienną typu Wariant do funkcji. Nie można przekazywać zmiennej typu wariant przez odwołanie, jeśli procedura deklarująca argument przyjmuje inny typ danych.

 

PRZEKAZYWANIE ARGUMENTÓW PRZYKŁAD

              Function Silnia (ByVal MojaZm As Integer)              ‘Deklaracja funkcji

MojaZm = MojaZm – 1

If MojaZm = 0 then

              Silnia = 1

              Exit Function

End If

Silnia = Silnia (MojaZm) * (MojaZm + 1)

End Function

‘wywołanie funkcji Silnia dla zmiennej S.

              S=5

              Debug.Print Silnia(S)                                           ‘wyświetla 120(5!)

              Debug .Print S                                                        `wyświetla 5

 

Gdyby nie dodano słowa ByVal w deklaracji funkcji w tym przykładzie zwróci się zamiast 120, 0.

 

ARGUMENTY OPCJONALNE PROCEDYRY LUB FUNKCJI

#Argument opcjonalny musi być poprzedzony słowem kluczowym Optional. Umieszcza się go na końcu listy argumentów. Mają one zawsze typ Wariant, którego nie można zmienić. Np. – obliczanie średniej 2 lub 3:

              Function Avg(licz1, licz2, Optional licz3)

              Dim ileLiczb As Integer

              ileLiczb = 3

              If IsMissing(licz2) Then licz3 = : ileLiczb = ileLiczb – 1

              Avg = (licz1 + licz2 + licz3)/ileLiczb

              End Function

 

#Występująca tu funkcja isMissing(licz3) ustala, czy argument opcjonalny został przekazany procedurze (ma wartość ….

 

Funkcja MsgBox()

#Składnia

ZmiennaCalkowita = MsgBox( strWiadomość [,[intRodzzj] _ [,strTytul]])

 

# obowiązkowy argument – strWiadomość – zawierający treść komunikatu, do 1024 znaków. powinien być pisany w jednej linii Można go rozdzielić na pojedyncze linie za pomocą znaków Chr(13), Chr(10)

 

#argumenty opcjonalne:

              #intRodzaj – suma wartości z tabel sterujących (sterowanie bitowe)

              #strTytul – łańcuch wyświetlany na pasku nazwy

 

#wartości zwracane przez funkcję MsgBox() – zmienna całkowita:

              1 - cbOK

              2 – vbCancel (anuluj)

              3 – vbAbort (przerwij)

              4 – vbRetry (Ponów próbę)

              5 – vbIgnore (ignoruj)

              6 – vbYes (tak)

              7 – vbNo (nie)

 

 

 

 

FUNKCJA MSGBOX()

intRodzaj – suma wartości z table sterujących (sterowanie bitowe):

VbOKonly – 0 – wyświetla przycisk OK.

VbOKCancel – 1 – wyświetla przycisk OK. i Anuluj

VbAbort – AbortRetryIgnore – 2 – wyświetla przerwij ponów ignoruj

VbYesNoCancel – 3 – wyświetla tak nie anuluj

VbYesNo – 4 – wyświetla Tak Nie

VbRetryCancel – 5 – wyświetla Ponów Anuluj

VbCritical – 16 - …

 

#Kolejność argumentów można zmienić ale wówczas należy poprzedzić je nazwą, np.:

  MsgBox title: = tyt, promet: = pytanie, buttons: = przyciski

 

sub KomTakNie()

  Dim pytanie As String, tyt As String, przyciski As Integer, _

  wybPrzycisk As Integer

  pytanie = “Czy chcesz zachować skoroszyt” & Chr(13) & Chr(10)

  pytanie = pytanie & „pod nazwą” „Marysia.xls””” & Chr(13) & Chr(10)_
  & „Jeśli tak, to przygotuj czysty dysk”

  ‘przyciski = vbYesNo = vbQuestion + vbDefaultButton1

  przyciski = 36 ‘+ 4096 ‘ przyciski = 4 + 32 + 0

  tyt = „Zapisz skoroszyt”

  wybPrzycisk = MsgBox(Titr:=tyt…

 

FUNKCJA InputBox()

złuży żeby pobierać od użytkownika dane

#Skłądnia

              strZmienna = ImpetBox( strPytanie [, [str tytul] _

              [,strDomyslne] [,intXpoz, intYpoz]])

#jeden obowiązkowy argument – strPytanie – zawierający traść komunikatu (max. 1024 znaki)

 

#argumenty opcjonalne:

strTytul – łańcuch wyświetlany na pasku nazwy

strDomyslne – domyślna wartość odpowiedzi, którą możńa zaakceptować lub zmienić

intXpoz, intYpoz – dokładna pozycja okna na formularzu, w ….

 

INSTRUKCJA WARUNKOWA

If TestPorównujący Then

              Jedna lub wiele instrukcji

   End If

If TestPorównujący Then instrukcja

If TestPorównujący Then

              jenda lub wiele instrukcji

Else

              jedna lub wiele instrukcji

End If

 

 

 

Instrukcje zagnieżdżone

W przypadku instrukcji zagnieżdżonych lepiej używać struktury:

If warunek1 Then

              instrukcje, gdy warunek1 jest prawdziwy

ElseIf warunek2 Then

              instrukcje, gdy warunek2 jest prawdziwy

ElseIf warunek3 Then

              instrukcje, gdy warunek3 jest prawdziwy

………

Else

              instrukcje, gdy wszystkie warunki są fałszywe

End If

 

INSTRUKCJA Selekt Case

#Skłądnia

Select Case wyrażenie

              Case wartość (lub ewartości oddzielone przecinkami)

                            Jedna lub wiele instrukcji

              Case Is relacja

                            Jedna lub wiele instrukcji

              Case wyrażenie1 To wyrażenie2

                            jedna lub wiele instrukcji

              Case Else

                            jedna lub wiele instrukcji

  End Select

 

 

PĘTLE             

Pętle są zbiorem instrukcji które należy wykonać wielokrotnie. Program dykuje ile razy pętla ta wykona zawarty w niej blok instrukcji i jakie mają być warunki zakończenia jej działania. Pętle są przydatne np. przy wielokrotnm przetwarzaniu złożonych danych

Dwie podstawowe struktury to:

Do … loop (nie wiemy ile razy ma się wykonać)

For … Next (kiedy wiemy ile razy chcemy taką pętlę wykonać)

 

Pętla Do … Loop

 

Do

If warunek Then Exit Do

instrukcje

Loop 

 

Wpisane w pętli instrykcje poprzedza instrukcja warunkowa. Pozostałe instrukcje są wykonywane tak długo, aż spełniony warunek narzucony w instrukcji warunkowej. Wówczas następuje opuszczenie pętli.

 

Pętla Do Until .. Loop

 

Do Until warunek pętli

              instrukcje

              loop

 

Wyjście z pętli następuje w chwili, gdy wpisany warunek przyjmuje wartość True.

 

Pętla Chile … Loop

 

Do Chile warunek pętli

              jedna lub wiele instrukcji

  Loop

 

Pętla Do Chile .. Loop to pętla, w której wpisane instrukcje powtarzane są dopóki dany warunek ma wartość True.

 

---------braki

OPERATORY LOGICZNE

And If(a>b) And(c<d)

Or If(a>b) Or(c<d)

Not If Not(strAns = “tak”)

 

Nawiasy okrągłe () mogą być używane aby zmienić kolejność wykonywania działań. Działania zawarte w nawiasach zawsze są wykonywane przed działaniami poza nawiasami. Wewnątrz nawiasów obowiązuje kolejność wykonywania działań zgodna z priorytetami.

Operator Łączenia łańcuchów (&) nie jest operatorem arytmetycznym ale ma swój priorytet i występuje za wszystkimi operatorami arytmetycznymi i przed operatorami logicznymi.

Operator Like ma taki priorytet jak wszystkie operatory porówniania

Operator Is ..


TRSTOWANIE APLIKACJI

W tworzonej aplikacji zazwyczaj znajduje się wiele błędów. Błędy składniowe są łatwe do poprawienia, ponieważ Visual Basic sam je sygnalizuje. Część jest wykrywana już w czasie pisania kodu programu, a część przy próbie skomplowania. Błędy wykonania ujawniają się dopiero podczas wykonywania programu.

Najtrudniejsze do zlokalizowania są błędy logiczne, ponieważ nie są sygnalizowane przez Visual Basic. Wynikają one z błędu programisty. Dla Visual Basic są poprawionymi instrukcjami, natomiast aplikacja nie działa zgodnie z założeniami programisty.

 

Najlepszym sposobem na wykrycie błędów jest uruchomienie aplikacji. Visual Basic dostarcza narzędzia, które pomagają śledzić zachowanie aplikacji podczas działania. Jednym z takich narzędzi jest Debugger. Daje on możliwość śledzenia wszystkich szczegółów pracy programu i kontrolowanie wartości zminnych.

Visual Basic zapewnia szeroki asortyment narzędzi do wykrywania błędów i cech, które pomagają zlokalizować i poprawić błędy w kodzie: Tryb przerwania/edycji programu.


Tryb przerwania zatrzymuje uruchomioną aplikację, ale pozostawia jej bieżące zminne i ustawienia właściwości. Jest jakby zaprezentowaniem stanu programu w określonej chwili podczas jego działania. W trybie przerwania można zbadać i zmienić bieżące wartości i właściwości, wprowadzić znaczne modyfikacje kodu i określi jakie instrukcje aplikacji będą uruchomione jako następne. Po zakończeniu edycji, można kontynuować uruchomienie programu. Ta bardzo przydatna ch…

 

Wyrażenie Watch

Wyrażenia Watch umożliwiają monitorowani wartości określonych zmiennych, właściwości i wyrażeń w czasie działania programu. Wyrażenia Watch są wyświetlone w obszarze Watch okna Debug w trybie przerwania (poza wyrażeniami Watch, które pojawiają się w ich własnym okienku dialogowym). Można przerwać wykonanie programu, kiedy wyrażenie Watch ulega zmianie lub ma wartość True.

Aby dodać wyrażenie Watch do programu należy:

W czasie projektowania lub podczas trybu przerwania wybrać z menu Debug, Add Watch, aby otworzyć okienko dialogowe Add Watch.

W okienku tekstowym Expression należy wpisać zmienną, właściwość lub wyrażenie, które ma być obserwowane.

{Resume powoduje powrót do wiersza który wygenerował błąd}

Przy pomocy mechanizmów obsługi wyjątków możemy obsługiwać wyjątki w tym również możemy obsługiwać błędy które powstają prz…}

 

Obsługa błędów

On Error Go To etykieta

Przy pomocy Err.Raise możemy generować błędy programowe.

 

PRACA Z PLIKAMI

Plik (file) to zbiór powiązanych ze sobą danych. Rozróżnia się pliki tekstowe składające się z łańcuchów znaków typu ASCII, oraz pliki binarne dostępne tylko dla niektórych programów i narzędzi systemowych. Do operacji na plikach i folderach wykorzystywane są funkcje:
# CurDir[(dysk)] – zwraca ścieżkę dla bieżącego folderu na podanym dysku lub bez podania argumentu – na dysku biężącym.

Dir[(nazwa_ścieszki)] – pozwala sprawdzić czy dany plik lub folder istnieje.

# FileLen (nazwa_ścieżki) – sprawdza wielkości pliku w bajtach. chcąc sprawdzić wielkość kilku plików można zsumować je przy użyciu pętli Do…loop, np.:

Dim plik As String

Dim suma As Long

plik  = Dir(“d;\*.*”) ‘pliki z rozszerzeniem.d;;, lub wszystkie pliki

  Dir(„d:\*.*”)

suma = 0

Do Chile plik <>””

suma = suma + FileLen(„d;\” & plik)

plik = Dir

Loop 

‘Debug.Print „Suma bajtów =” & ….

 

#GetAtrt(nazwa_ścieżki) – sprawdzanie atrybutów pliku. Funkcja zwraca wynik typu Integer, jako jedna lub sumę stałych określających atrybuty.

Do sprawdzenia atrybutów używany jest operator and. porównujący wartości zwrócona przez funkcję GetrAttr z wartością odpowiedniej stałej.

#SetAttr nazwa_ścieżki, atrybuty – ustawienie atrybutów, np.: SetAttr

#ChDrive dysk – zmiana bieżącego dysku

# ChdDir ścieżka – zmiana bieżącego katalogu bez zmiany bieżącego dysku.

 

[Nie musimy pamiętać bo zawsze mamy pod ręką naszą przeglądarkę obiektów gdzie są wszystkie funkcje.]

 

DOSTĘP DO PLIKU

# Dostęp sekwencyjny – stosowany do plików tekstowych w których dane nie są zachowane w ustalonym porządku Posiadają trzy tryby pracy: Input – czytanie z pliku, Outpit – pisanie do nowego pliku (lub nadpisanie poprzednich wartości), oraz Appena – dopisywanie na końcu do isniejącego pliku.

#Dostęp swobodny – stosowany do plików tekstowych,  w których dane zachowane są w rekordach o ustalonej wielkości i polach oddzielonych przecinkami. Mają tylko jeden tryb – Random

# Dostęp binarny – stosowany do plików graficznych i innych . Można je otworzyć tylko w trybie Binary.

              Open strFilename [For Mode] As [#] intFileNumber

gdzie:

strFilename – nazwa pliku (typu string) wraz ze ściężką dostępu

Mode – operacje wykonywane w zależności od rodzaju dostępu do pliku

[#] – znak opcjonalny,

int FileNumber – liczna całkowita z zakresu 1 do 255 łącząca otwarty plik z określoną liczbą. Numer pliku nazywany jest kanałem pliku.

Kolejny wolny numer pliku zwraca funkcja FreeFile ().

[Oczywiście możemy sobie otwierać kilku plików jednocześnie]

 

OTWIERANIE PLIKU W RÓŻNYCH TRYBACH

Otwieranie w trybie sekwencyjnym

Open „TESTFILE” For Input AS #1

Otwieranie w trybie binarnym tylko do zapisu

Open TESTFILE” For Binary Avvess Write As #1

Otwieranie w trybie swobodnym poprzedzone definicją rekordu

Type Rekord 1Define user – defined type.

              ID As Integer

              Name As String * 20

End Type


Dim MyRecorf As Recon  ` dejkaracja

Open TESTFILE” For Random As #1 Len = Len(MyRecord)

Funkcja Len podaje liczbę bajtów potrzebnych do zapisu zmienej

Otwieranie bez możliwości dostępu do innych procesów

Open TESTFILE” For Binary Access Read Lock Read As #1

[przy otwieraniu pliku w trybie swobodnym musimy określić jaka jest długość w bajtach pliku. czyli przy otwieraniu pliku w trybie random musimy określić koniecznie parametr określony przez wartość Len który musi być równy długości rekordu liczonym w bajtach.

Żeby się nie pomylić można użyć właśnie tej funkcji Len która działa na zmiennej MyRecord obliczając długość tego rekordu i ustawia ją jako zmienną len naszego zbioru

Te bajty są zapisywane jeden za drugim czyli ktoś kto odczytuje i nie zna struktury rekordu nie może odczytać (lub będzie miał trudność) plik

Jeżeli otworzymy plik to on przestaje być dostępny dla innych procesów ale możemy tą dostępnością sterować przy pomocy Shared (współdzielenia) Umożliwia to dwóm procesom uruchomionym jednocześnie korzystać z jednego pliku

...

Zgłoś jeśli naruszono regulamin