Copyright © 2014, Janusz Bonarowski 1
Ćwiczenie VB6.00 Tablice, wstęp
Gdy rośnie liczba danych do przechowywania (i przetworzenia, analizy, ...) - pojawiają się nowe struktury danych (moŜna by powiedzieć nowe „pojemniki” na dane, bardziej pojemne niŜ zwykła zmienna) zwane tablicami.
Tablica moŜe przechowywać wiele danych.
• Wszystkie one będą tego samego typu,
• będą miały tę samą nazwę (nazwę tablicy),
a do poszczególnych danych zawartych w tablicy odwołujemy się za pomocą nazwy tablicy i indeksów (kolejnych numerów tych danych w tablicy: nazwa_tablicy(index)).
Tablice mogą być jednowymiarowe (np. wektor), dwuwymiarowe (np. szachownica) i wielowymiarowe (np.
trójwymiarowy prostopadłościan, ...).
Tworzenie tablicy
Tablicę tworzymy przez jej deklarowanie.
Tablicę deklarujemy tak jak zmienną,
• musimy określić jej nazwę,
• liczbę wymiarów,
• rozmiary tych wymiarów,
• typ danych w tablicy.
Elementy tablicy w kaŜdym wymiarze numerowane są od zera, 0.
Składniki deklaracji tablicy:
• Dim – słowo kluczowe,
• nazwa_tablicy - zasada ta sama jak przy tworzeniu nazwy zmiennej.
• liczba wymiarów – wynika z liczby elementów w nawiasie oddzielonych przecinkami.
nazwaTablicy(9) – tablica jednowymiarowa, nazwaTablicy(3, 5) – tablica dwuwymiarowa, nazwaTablicy(3,10,18) – tablica trójwymiarowa.
• rozmiary tych wymiarów – wartości liczb w nawiasie
nazwaTablicy(9) – jednowymiarowa o 10 elementach numerowanych od 0 do 9, nazwaTablicy(5, 4) dwuwymiarowa o 6 wierszach od 0 do 5 i 5 kolumnach od 0 do 4.
nazwaTablicy(3,10,19) – trójwymiarowa (jakby prostopadłościan) o 4 wierszach numerowanych od 0 do 3, 11 kolumnach numerowanych od 0 do 10 i 20 warstwach (poziomach) od 0 do 19.
Przykłady
• Dim studenci(14) As String
Tablica jednowymiarowa, przechowująca nazwiska UWAGA: 15 studentów.
Odwołanie do pierwszego elementu tablicy to: studenci(0).
• Dim przebieg(6) As Integer
tablica jednowymiarowa, 7 (siedmio) elementowa, przechowująca przebiegi dzienne samochodu w km, rejestrowane w kolejnych dniach tygodnia. Odwołanie do przebiegu w pierwszym dniu tygodnia to: przebieg(0).
• Dim Dane(5, 4) As Integer
tablica dwuwymiarowa, 6 (sześciu) wierszach i 5 (pięciu) kolumnach, przechowująca liczby całkowite, rys. 1.
Rysunek 1. Tablica Dane(5, 4) 6 wierszy i 5 kolumn;
element Dane(3,2) przechowuje wartość 16
Copyright © 2014, Janusz Bonarowski 2
Tablice statyczne, tablice dynamiczne
Tablice statyczne
Tablice deklarowane jak w przykładach powyŜszych:
Dim studenci(14) As String Dim przebieg(6) As Integer Dim Dane(5, 4) As Integer
nazywamy deklaracją statyczną tablic, posiadają one z góry określoną i niezmienną liczbę elementów – tablica studenci(14) ma 15 elementów, tablica przebieg(6) ma 7 elementów, a tablica Dane(5,4) ma 30 elementów (6 wierszy x 5 kolumn = 30).
Bywają jednak sytuacje, w których nie potrafimy z góry określić ile elementów będzie trzeba zgromadzić (przechowywać) podczas pracy programu - czyli nie wiemy jaki rozmiar tablicy trzeba zadeklarować.
Rozwiązaniem „brutalnym” moŜe być zadeklarowanie tablicy z nadmiarem.
Np. rozmiar tablicy przechowującej nazwiska studentów w pojedynczej grupie studenckiej moŜna przyjąć za 100, czyli deklaracja tablicy na nazwiska będzie miała postać:
Dim studenci(99) As String
Przyjmowanie takiej strategii (na wszelki wypadek zadeklarować większą tablicę) wiąŜe się jednak
z niepotrzebnym zwiększaniem rozmiaru pliku wykonawczego (exe), poniewaŜ deklarując tablicę 100 elemen- tową na stałe - powiększamy (na stałe) rozmiar zarezerwowanej dla programu pamięci na dane.
Aby uzyskać największy index tablicy naleŜy uŜyć funkcji UBound(studenci).
Funkcja ta zwraca liczbę elementów zawartych w tablicy – 1.
Dla tablic wielowymiarowych moŜemy uzyskać największy index w kaŜdym wymiarze.
Np. dla tablicy Dane(10, 7, 15) naleŜy posłuŜyć się funkcją UBound w następujący sposób:
UBound(Dane, 1) – zwraca 10, UBound(Dane, 2) – zwraca 7, UBound(Dane, 3) – zwraca 15,
Tablice dynamiczne - instrukcja ReDim i słowo kluczowe Preserve
Gdy nie znamy liczby elementów w tablicy moŜemy zadeklarować tablicę dynamiczną. Aby pracować z tablicą dynamiczną naleŜy
1. zadeklarować jej nazwę i typ, bez podawania rozmiaru, np.
Dim studenci() As String
2. a dalej w programie ustalić wielkość tablicy instrukcją ReDim, np. ustalenie wielkości tablicy na 20 elementów:
ReDim studenci(19) ‘Tablica zostanie opróŜniona ReDim Preserve studenci(19) ‘Tablica zachowa wartości
Przykład
Powiększ tablicę dynamiczną kolejno do 3 elementów i napełnij ją danymi: Jan, Adam, Piotr
Dim studenci() As String ReDim studenci(0)
studenci(0) = ”Jan”
ReDim studenci(1) studenci(1) = ”Adam”
ReDim studenci(2) studenci(2) = ”Piotr”
Dim studenci() As String ReDim studenci(0)
studenci(0) = ”Jan”
ReDim Preserve studenci(1) studenci(1) = ”Adam”
ReDim Preserve studenci(2) studenci(2) = ”Piotr”
Wersja zła!
KaŜda instrukcja ze słowem kluczowym ReDim powoduje utratę uprzednio umieszczonych w tablicy wszystkich danych, a kaŜdy element tablicy
otrzymuje wartość zero lub null.
Wersja dobra!
KaŜda instrukcja ReDim ze słowem kluczowym Preserve powoduje powiększenie tablicy
i zachowanie wartości uprzednio umieszczonych.
Copyright © 2014, Janusz Bonarowski 3 Jeśli potrafimy z góry określić nowy rozmiar tablicy wtedy zamiast krokowo powiększać jej rozmiar o 1 jak w przykładzie powyŜej, moŜna powiększyć tablicę jednym poleceniem:
Dim studenci() As String
ReDim studenci(0) studenci(0) = ”Jan”
ReDim Preserve studenci(2) ‘Preserve uŜyto aby zachować w tablicy ”Jan”
studenci(1) = ”Adam”
studenci(2) = ”Piotr”
Uwaga! Instrukcja ReDim nie wymaga podawania typu wartości.
Podajemy jedynie nowy maksymalny indeks.
Decyzja, którą wersję instrukcji ReDim wybrać (ze słowem lub bez słowa kluczowego Preserve) zaleŜy od tego, czy zamierzamy - czy nie zamierzamy opróŜniać tablicę przy zmianie jej wielkości.
Inną waŜną uwagą przy zwiększania rozmiaru tablic jest to, Ŝe zmianie moŜe ulegać tylko ostatni wymiar tablicy, tzn. tablicę Dane(3, 4, 5) moŜemy zwiększyć tylko do np. Dane(3, 4, 100).
Instrukcja: ReDim Dane(300, 4, 5) nie jest moŜliwa.