05 Zlozone typy danych cwiczenia przygotowujace


V. Złożone typy danych i wyliczenia stałych
Poprzednie ćwiczenia wykorzystywały zmienne takich typów, które pozwalają przechowywać je-
dynie pojedynczą wartość  liczbę całkowitą, albo rzeczywistą, znak, wartość logiczną. Jednak nawet
najprostsze zjawisko, przedmiot czy osoba wymagajÄ… do opisu zestawu danych. Do przedstawienia
położenia punktu na płaszczyznie potrzeba dwóch współrzędnych, do przedstawienia wydajności
pracy zespołu w ciągu miesiąca  kilkudziesięciu liczb. Kolejne ćwiczenie pokaże trudności pojawia-
jące się w programowaniu z użyciem większych zestawów danych.
Ćwiczenie 44
Zaprojektować aplikację pozwalającą zapamiętać wartości pięciu liczb i obliczyć ich
sumę, a także wypisać pierwsze trzy w kolejności odwrotnej do tej, w jakiej zostały
wprowadzone.
1. Utwórz Projekt_044 aplikacji konsolowej.
2. Zadeklaruj sześć zmiennych typu Double, pięć do przechowywania wartości podanych
przez użytkownika, jedną do przechowywania sumy tych liczb.
3. Zaprogramuj:
ć% pobranie od użytkownika pięciu liczb,
ć% obliczenie oraz wyświetlenie w konsoli sumy wprowadzonych wartości,
ć% wyświetlenie trzech liczb wprowadzonych jako pierwsze, ale w kolejności odwrot-
nej niż zostały wprowadzone.
4. Sprawdz działanie aplikacji.
Przykład działania programu przedstawiono poniżej:
Rysunek 19: Projekt_044 w działaniu.
Bardzo przydatna byłaby możliwość wykorzystania konstrukcji pętli w ćwiczeniu 44. Pojedyncze
zmienne nie pozwalajÄ… na takie skonstruowanie programu. Stosunkowo prosta sytuacja zostanie
skomplikowana w kolejnym ćwiczeniu.
Ćwiczenie 45
Zaprojektować aplikację pozwalającą zapamiętać imiona i wzrosty pięciu osób oraz
obliczyć średni wzrost grupy, a także wypisać dane pierwszych trzech osób w kolejności
odwrotnej do tej, w jakiej zostały wprowadzone.
1. Utwórz Projekt_045 aplikacji konsolowej.
2. Zadeklaruj:
ć% pięć zmiennych typu String do przechowywania imion podawanych przez użyt-
kownika,
ć% sześć zmiennych typu Double, pięć do przechowywania wzrostów podanych przez
użytkownika, jedną do przechowywania średniej wartości tych liczb.
3. Zaprogramuj:
ć% pobranie od użytkownika pięciu imion i wzrostów,
ć% obliczenie oraz wyświetlenie w konsoli średniej wprowadzonych wzrostów,
ć% wyświetlenie danych trzech osób wprowadzonych jako pierwsze, ale w kolejności
odwrotnej niż zostały wprowadzone.
4. Sprawdz działanie aplikacji.
Przykład działania programu przedstawiono poniżej:
Rysunek 20: Projekt_045 w działaniu.
Również w ćwiczeniu 45. wskazane byłoby wykorzystanie pętli. W tym przypadku dodatkowe
obciążenie dla programującego to dwa zestawy danych, nad którymi musi zapanować. Oba problemy
zostały rozwiązane w języku Visual Basic 2010 poprzez zmienne typu strukturalnego oraz zmienne
tablicowe.
V.1. Typ strukturalny
Imię i wzrost podawane przez użytkownika w ćwiczeniu 45. dotyczyły jednej osoby. Przykład,
z celowo rozbudowanymi nazwami, pokazuje deklaracje zmiennych służących do przechowywania
imienia i wzrostu osoby numer 1:
Dim strOsoba1ImiÄ™ As String
Dim dblOsoba1Wzrost As Double
Wspólny dla obu zmiennych fragment nazwy,  aż prosi , żeby (używając języka algebry)  wycią-
gnąć go przed nawias . Takim nawiasem w Visual Basic 2010 jest deklaracja typu strukturalnego
składająca się ze słów kluczowych Structure & End Structure. Przekształcając powyższy
przykład do deklaracji typu strukturalnego możemy napisać:
Structure Osoba1
Dim strImiÄ™ As String
Dim dblWzrost As Double
End Structure
Po takiej deklaracji słowo Osoba1 jest nazwą nowego typu. Można go stosować wszędzie tam,
gdzie dopuszczalne jest stosowanie innych typów wprowadzonych do tej pory, zatem możliwa jest
deklaracja zmiennej takiego typu:
Dim osoDrybals As Osoba1
Co oznacza powyższa deklaracja? Zanim nastąpi odpowiedz na to pytanie, konieczne jest obja-
śnienie budowy nowego typu. Tak, jak inne typy (Integer, Double, Char, Boolean) typ Osoba1 jest
wzorcem, według którego zmiennym będzie przydzielana pamięć operacyjna. Ustala on również spo-
sób interpretowania zawartości pamięci operacyjnej przydzielonej zmiennej takiego typu.
Deklaracja typu Osoba1 zawiera deklaracje dwóch zmiennych strImię i dblWzrost. W odniesie-
niu do typu strukturalnego zmienne te nazywamy polami. Powiemy zatem, że  typ strukturalny Oso -
ba1 ma dwa pola: strImię typu String oraz dblWzrost typu Double . Wielkość typu strukturalnego (licz-
ba bajtów pamięci do przechowywania zmiennej tego typu) pozwala na przechowywanie wszystkich
pól.
Wracając do deklaracji zmiennej osoDryblas można napisać, że zmiennej tej zostanie przydzie-
lona taka ilość pamięci operacyjnej jaka wynika z wielkości typu Osoba1.
Do pól zmiennej odwołujemy się (pobieramy, lub ustalamy ich wartość) łącząc nazwę zmiennej i
nazwÄ™ pola kropkÄ…:
osoDryblas.strImię = "Bożydar"
SumaWzrostów += osoDryblas.dblWzrost
Przed przejściem do kolejnego ćwiczenia zapoznającego z metodyką definiowania typu struktu-
ralnego należy dodać, że deklaracja typu strukturalnego musi występować na poziomie przestrzeni
nazw albo modułu, natomiast nie może być zawarta w metodzie (np. procedurze Main).
Ćwiczenie 46
Zaprojektować aplikację definiującą typ strukturalny DaneOsobowe o trzech polach:
ImiÄ™ i Nazwisko typu String oraz RokUrodzenia typu Integer.
1. Utwórz Projekt_046 aplikacji konsolowej.
2. Zdefiniuj w module Module1 nowy typ strukturalny o nazwie DaneOsobowe, w tym celu:
ć% ustaw kursor tekstowy w pustym wierszu pomiędzy początkiem modułu, a począt-
kiem procedury Main  jest to część deklaracyjna modułu,
ć% wpisz słowo kluczowe Structure i dodaj po spacji nazwę nowego typu  DaneOso-
bowe,
ć% naciśnij Enter i zauważ, że edytor dokończył deklarację typu dodając słowa klu-
czowe End Structure, kursor tekstowy znajduje siÄ™ wewnÄ…trz bloku deklaracji.
3. Zadeklaruj w typie DaneOsobowe pola wymienione w zadaniu.
Przykład.
Structure DaneOsobowe
Dim ImiÄ™, Nazwisko As String
Dim RokUrodzenia As Integer
End Structure
4. Skompiluj projekt.
W projekcie Projekt_046 obok wcześniej zdefiniowanych typów pojawił się nowy typ DaneOso-
bowe. Podlega on tym samym prawom, które posiadają inne typy. W szczególności możliwe jest de-
klarowanie zmiennych takiego typu. Pokazuje to kolejne ćwiczenie.
Ćwiczenie 47
Zadeklarować w procedurze Main zmienną daoOsoba1 typu DaneOsobowe.
W trakcie deklarowania zmiennej daoOsoba1, po wpisaniu słowa kluczowego As, pojawiła się li-
sta dostępnych w danym kontekście elementów, a wśród nich nowy typ DaneOsobowe. Fakt ten ko-
lejny raz potwierdza ogromną użyteczność środowiska. Kolejne ćwiczenie pokazuje w jaki sposób
ustalać wartości pól zmiennej oraz pobierać te wartości.
Ćwiczenie 48
Zaprogramować pobieranie od użytkownika danych osobowych oraz wyświetlanie ich w
innym formacie.
1. Zaprogramuj:
ć% wyświetlenie w konsoli zachęty do wprowadzenia przez użytkownika imienia.
ć% pobranie i przypisanie podanej przez użytkownika wartości do pola Imię zmiennej
daoOsoba1, w tym celu:
ª% wpisz nazwÄ™ zmiennej  daoOsoba1  i dopisz kropkÄ™; zauważ, że lista do-
stępnych w tym kontekście elementów zawiera również nazwę pola Imię,
ª% wybierz z listy, lub wpisz nazwÄ™ pola, ImiÄ™,
ª% dokoÅ„cz instrukcjÄ™ przypisania w poznany wczeÅ›niej sposób;
Przykład.
daoOsoba1.ImiÄ™ = Console.ReadLine
ć% pobranie i przypisanie polu Nazwisko zmiennej daoOsoba1 nazwiska pobranego
od użytkownika; posłuż się schematem przedstawionym przy pobieraniu imienia,
ć% pobranie i przypisanie polu RokUrodzenia zmiennej daoOsoba1 liczby pobranej
od użytkownika,
ć% wyświetlenie danych zawartych w zmiennej daoOsoba1 w formacie:
Osoba: Imię Nazwisko urodziła się w roku RokUrodzenia.
Przykład.
Console.WriteLine("Osoba: {0} {1} urodziła się w roku {2}.", _
daoOsoba1.ImiÄ™, daoOsoba1.Nazwisko, daoOsoba1.RokUrodzenia)
2. Sprawdz działanie aplikacji.
Ustalanie wartości pól i pobieranie z nich danych realizuje się tak, jak dla zwykłych zmiennych,
jednak ze względu na to, że są polami zmiennej typu strukturalnego konieczne jest podawanie opisu
składającego się z nazwy zmiennej i nazwy pola połączonych kropką. Powstałą w ten sposób nazwę
pola nazywa się nazwą kwalifikowaną. Dodać należy, że pole struktury może być również typu struk-
turalnego, jak w poniższym przykładzie:
Structure OsobaPomierzona
Dim Osoba As Osoba1
Dim Wzrost, Waga As Double
End Structure
Typ OsobaPomierzona zawiera pole Osoba typu strukturalnego Osoba1. Po utworzeniu zmien-
nej tego typu:
Dim Bramkarz As OsobaPomierzona
ustalenie imienia wymagać będzie rozszerzenia notacji:
Bramkarz.Osoba.ImiÄ™ = "Waldemar"
W ten sposób odwołujemy się do pola Imię, które jest polem pola Osoba, które jest polem
zmiennej Bramkarz. Zapis taki, chociaż niezwykle czytelny  uwidoczniona jest pełna przynależność
pól  jest jednak dosyć pracochłonny. Należy sobie uzmysłowić, że typ pola Osoba może zawierać
więcej niż jedno, dwa, czy trzy pola, a w takim przypadku konieczne będzie wielokrotne powtórzenie
sekwencji Bramkarz.Osoba. Można tego uniknąć stosując konstrukcję wiążącą With & End With.
Poniższy przykład obrazuje jej użycie w celu ustalenia wartości wszystkich pól zmiennej Bramkarz,
z jednoczesnym pokazem możliwości zagnieżdżania (po prawej stronie pokazany jest zapis tradycyj-
ny):
With Bramkarz
Bramkarz.Osoba.ImiÄ™ = "Waldemar"
With .Osoba
Bramkarz.Osoba.Nazwisko = "Szeroki"
.ImiÄ™ = "Waldemar"
Bramkarz.Osoba.RokUrodzenia = 2010
.Nazwisko = "Szeroki"
Bramkarz.Wzrost = 221.5
.RokUrodzenia = 2010
Bramkarz.Waga = 98.5
End With
.Wzrost = 221.5
.Waga = 98.5
End With
Każdy element objęty konstrukcją wiążącą With i poprzedzony kropką odnosi się do zmiennej
(pola), której nazwa pojawia się po słowie With. Chociaż trudno w to uwierzyć, kod zródłowy przed-
stawiony po lewej stronie zawiera o kilkanaście procent mniej znaków, co oznacza, że programista
używający konstrukcji With może napisać kod zródłowy szybciej niż ten, który jej nie stosuje. Przy
większej liczbie pól struktury oszczędności rosną. Kolejne ćwiczenie polegać będzie na zastosowaniu
konstrukcji With w projekcie Projekt_046.
Ćwiczenie 49
Zastosować konstrukcję With w kodzie zródłowym Projekt_046.
1. Dodaj pusty wiersz przed wierszem, w którym pobierane jest imię i ustaw w nim kursor
tekstowy.
2. Utwórz konstrukcję With dla zmiennej daoOsoba1, w tym celu:
ć% wpisz słowo kluczowe With rozpoczynające konstrukcję i po spacji dopisz nazwę
zmiennej,
ć% naciśnij Enter i zauważ, że edytor dokończył konstrukcję dopisując słowa End
With, a kursor znajduje siÄ™ wewnÄ…trz bloku konstrukcji With.
3. Przenieś wszystkie instrukcje występujące poniżej wiersza ze słowami End With do wnę-
trza konstrukcji With i pozostaw zaznaczenie tego fragmentu kodu zródłowego.
4. Usuń wszystkie wystąpienia tekstu daoOsoba1 z zaznaczonego tekstu, w tym celu:
ć% rozwiń menu Edit (Edycja) i zapoznaj się z jego poleceniami,
ć% postaraj się zapamiętać ikony oraz skróty klawiaturowe poleceń: Quick Find
(Szybkie odnajdywanie) oraz Quick Replace (Szybka zamiana),
ć% uruchom polecenie Quick Replace, pojawia się okno dialogowe Find and Replace
(Znajdz i zamień), rozpoznaj jego elementy, w tym:
ª% listÄ™ rozwijanÄ… Find what (Co znalezć)  sÅ‚uży do wprowadzenia ciÄ…gu znaków
poszukiwanych w tekście; lista zapamiętuje wcześniej poszukiwane ciągi zna-
ków;
ª% listÄ™ rozwijanÄ… Replace with (ZastÄ…p tym)  sÅ‚uży do wprowadzenia ciÄ…gu zna-
ków, którym ma zostać zastąpiony ciąg odszukany; lista zapamiętuje wcześniej
wpisane ciągi znaków;
ª% listÄ™ rozwijanÄ… Look in (Szukaj w), pozwala ustalić zakres przeszukiwanego
tekstu:
" Current document  Bieżący dokument,
" Selection  Zaznaczony obszar,
" All open documents  Wszystkie otwarte dokumenty,
" Current Project  Bieżący projekt,
" Entire Solution  Całe rozwiązanie,
" Current block ( Main )  bieżący blok ( Main ), jest to opcja dynamiczna,
tekst wyświetlany w nawiasie zależy od położenia kursora tekstowego i
przedstawia blok kodu, w którym znajduje się kursor,
ª% przycisk Replace All (ZastÄ…p wszystko)  sÅ‚uży do uruchomienia wyszukiwania
i zamiany wszystkich odnalezionych we wskazanym zakresie tekstu ciągów
znaków;
ć% wprowadz do pola listy Find what tekst: daoOsoba1,
ć% wyczyść pole Replace with,
ć% uruchom wyszukiwanie i zamianę przyciskiem Replace All,
ć% zamknij komunikat o liczbie wykonanych zamian i zamknij okno Find and Replace
przyciskiem Close.
5. Sprawdz działanie aplikacji.
Konstrukcja wiążąca nie wpływa na kod wykonywalny stanowi jedynie ułatwienie i przyspiesza
pracÄ™ programisty.
Typ strukturalny stosuje się wtedy, kiedy występuje potrzeba utworzenia zestawu, logicznie po-
łączonych, wielkości różnych typów  imię i nazwisko z wagą i wzrostem osoby.
Jeżeli wielkości są tego samego typu to można je przechowywać w zmiennych tablicowych.
V.2. Zmienne tablicowe
Jeśli pewien uczeń otrzyma zadanie notowania temperatury powietrza przez pięć dni o godzinie
7:00, to zapewne narysuje tabelkę podobną do przedstawionej poniżej:
Temperatura
powietrza
Dzień
o godzinie 7:00
[ºC]
1
2
3
4
5
Warto zauważyć, że wszystkie liczby, które zostaną wpisane do pustych komórek tej tabeli re-
prezentują  temperaturę. Programowe przechowywanie wartości temperatur, na podstawie zdoby-
tych wcześniej umiejętności, realizowalibyśmy deklarując pięć zmiennych, np.:
Dim Temperatura0, Temperatura1, Temperatura2, Temperatura3, Temperatura4 As Double
(Pierwszą zmienną celowo nazwano Temperatura0, aby uprościć dalsze objaśnienia.) Ponow-
nie, taki zapis, aż się prosi o  wyciągnięcie przed nawias słowa Temperatura. Język Visual Basic
2010 umożliwia takie działanie poprzez zmienne tablicowe. W odniesieniu do powyższego przykładu
deklaracja przyjmie następującą postać:
Dim Temperatura(4) As Double
Co oznacza ta deklaracja? Oznacza ona zarezerwowanie miejsca w pamięci operacyjnej dla
zmiennej o nazwie Temperatura, która składa się z pięciu, numerowanych od zera, elementów typu
Double. Numer każdego elementu nazywa się jego indeksem. Do elementu tablicy można się odwo-
łać używając jej nazwy i indeksu. Przykładowo, chcąc przypisać wartość do trzeciego elementu tabli-
cy użyjemy następującej instrukcji:
Temperatura(2) = 23.5
Indeks 2 jest indeksem trzeciego elementu tablicy, gdyż indeksem pierwszego elementu jest
zero, a drugiego  jeden. Elementy tablicy  zwane komórkami  mogą być dowolnego (ale wszystkie
jednakowego) typu. Tablicę taką, jaką opisano w przykładzie nazywa się tablicą jednowymiarową.
Kolejne ćwiczenie polegać będzie na wykorzystaniu tablicy jednowymiarowej do zrealizowania ćwi-
czenia.
Ćwiczenie 50
Zaprojektować aplikację realizującą zadanie ćwiczenia 44. w oparciu o tablicę
jednowymiarowÄ….
1. Utwórz Projekt_050 aplikacji konsolowej.
2. Zadeklaruj zmienną dblSuma typu Double o wartości początkowej 0.
3. Zadeklaruj zmienną tablicową Liczby o pięciu komórkach typu Double, w tym celu:
ć% wpisz w zwykły sposób deklarację zmiennej Liczby typu Double, a następnie do-
daj po słowie Liczby liczbę 4 objętą w nawiasy okrągłe.
Przykład.
Liczby(4) As Double
4. Zadeklaruj zmienną intLicznik typu Integer, posłuży jako zmienna sterująca pętlą.
5. Skonstruuj pętlę For ze zmienną sterującą intLicznik zmieniającą się od 0 do 4, a w niej
zaprogramuj:
ć% wyprowadzenie do konsoli tekstu zachęcającego do wprowadzenia liczby,
ć% pobranie i przypisanie wprowadzonej przez użytkownika wartości do komórki ta-
beli o indeksie równym wartości zmiennej sterującej pętlą  intLicznik,
Przykład.
Liczby(intLicznik) = CDbl(Console.ReadLine)
ć% zwiększenie wartości zmiennej dblSuma o wartość przechowywaną w komórce ta-
beli o indeksie równym wartości zmiennej sterującej pętlą.
Przykład.
dblSuma += Liczby(intLicznik)
6. Zaprogramuj, po zakończeniu pętli, wyświetlenie wartości zmiennej dblSuma.
7. Skonstruuj pętlę For ze zmienną sterującą intLicznik zmieniającą się od 2 do 0 z prze-
skokiem równym -1, a w niej zaprogramuj wyprowadzenie do konsoli wartości z komórki
tabeli o indeksie równym wartości zmiennej sterującej pętlą  intLicznik.
Przykład.
Console.WriteLine(Liczby(intLicznik))
8. Sprawdz działanie aplikacji. Porównaj długość kodu procedury Main ćwiczeń 44. i 50.
Występuje skrócenie kodu zródłowego tym większe im większa jest krotność wykonania pętli.
Ponadto widać, że pewne działania programu można parametryzować.
Tablice wielowymiarowe, najprostszy przypadek  tablica dwuwymiarowa
Załóżmy, że uczeń notujący temperatury powietrza otrzyma ponownie to samo zadanie, jednak
tym razem ma notować temperaturę co 12 godzin (o 7:00 i 19:00). Prawdopodobnie przygotuje sobie
nowÄ… tabelkÄ™:
Temperatura powietrza [ºC]
Dzień
7:00 19:00
1
2
3
4
5
Ponownie, wszystkie puste komórki zostaną wypełnione wartościami tego samego typu  tem-
peraturami. Jednak tym razem tabela posiada dwie kolumny. Aatwo obliczyć, że potrzebne byłoby 10
zmiennych  Temperatura_1_7, Temperatura_1_19, & , Temperatura_5_7, Temperatura_5_19. Przy-
kładowe nazwy zmiennych zostały utworzone ze słowa  Temperatura , numeru dnia i numeru godziny
połączonych znakiem podkreślenia. Wykorzystanie tych zmiennych wymagałoby dużego nakładu
pracy programisty, a kod zródłowy nie posiadałby żadnej elastyczności  jakiekolwiek zmiany wyma -
gałyby panowania nad wszystkimi zmiennymi.
Rozwiązanie opisanego problemu, to zmienna tablicowa o dwóch wymiarach (można je koja-
rzyć z wierszami i kolumnami, osiami układu współrzędnych itp.). Jej deklaracja wygląda następują-
co:
Dim Temperatura(4, 1) As Double
Co oznacza ta deklaracja? Oznacza ona zarezerwowanie miejsca w pamięci operacyjnej dla
zmiennej o nazwie Temperatura, która składa się z dziesięciu elementów typu Double. Zmienna za-
wiera pięć grup po dwie komórki w każdej grupie. Każda komórka dostępna jest poprzez nazwę
zmiennej oraz indeks grupy, do której należy i indeks, który posiada w grupie. Jeśli indeks grupy sko -
jarzymy z wierszem, a indeks w grupie z kolumną, to można napisać, że komórka dostępna jest po-
przez nazwę zmiennej tablicowej oraz indeks wiersza i indeks kolumny. Przykładowo, chcąc przypi-
sać wartość temperatury w trzecim dniu (indeks wiersza 2) o godzinie 19:00 (indeks kolumny 1), uży-
jemy następującej instrukcji:
Temperatura(2, 1) = 23.5
Podobnie chcąc wyprowadzić wartość porannej temperatury czwartego dnia użyjemy następu-
jÄ…cej instrukcji:
Console.WriteLine("Temperatura o godz. {0}, w {1} dniu wynosiła: {2}", "7:00", 4, _
Temperatura(3, 0))
Przed przejściem do tablic o większej liczbie wymiarów warto sobie uzmysłowić fakt, że tabelka
ucznia mogła mieć inną postać:
Dzień
1 2 3 4 5
7:00
Temperatura
powietrza [ºC]
19:00
Odzwierciedleniem programowym takiej tabeli będzie deklaracja:
Dim Temperatura(1, 4) As Double
Chcąc przypisać wartość do komórki przechowującej temperaturę wieczorną czwartego dnia
użyjemy instrukcji:
Temperatura(1, 3) = 22.5
W tym przypadku pierwszy indeks odnosi siÄ™ do  wiersza temperatur , a drugi do  kolumn dni .
Wybór organizacji zmiennej tablicowej zależy od przyzwyczajeń programisty i konkretnego zadania.
Jednak należy pamiętać, że deklaracja jednoznacznie ustala liczbę wierszy i kolumn zmiennej tabli-
cowej. Kolejne ćwiczenie polegać będzie na zadeklarowaniu zmiennej tablicowej dwuwymiarowej do
przechowywania imion i nazwisk 10 osób.
Ćwiczenie 51
Utworzyć projekt ze zmienną tablicową pozwalającą przechowywać imiona i nazwiska
10 osób.
1. Utwórz Projekt_051 aplikacji konsolowej.
2. Zadeklaruj w procedurze Main zmienną tablicową strGodności o 10 wierszach i 2 kolum-
nach komórek typu String.
Przykład.
Dim strGodności(9, 1) As String
Zadeklarowana tablica pozwala przechowywać po dwa łańcuchy tekstowe o indeksach 0
(dla imienia) i 1 (dla nazwiska) w dziesięciu wierszach, o indeksach od 0 do 9. W kolejnym ćwiczeniu
tablica zostanie wykorzystana do przechowywania danych pobranych od użytkownika.
Ćwiczenie 52
Zaprogramować pobranie od użytkownika 10 imion i nazwisk, a następnie wyświetlenie
w konsoli tylko tych imion i nazwisk, które zajmują w zmiennej komórki wierszy o
nieparzystych indeksach, kolejność wyświetlania powinna być odwrotna do kolejności
wprowadzania.
1. Zadeklaruj zmienną sterującą pętlą, samodzielnie dobierz odpowiedni typ i zbuduj nazwę
zmiennej, która niesie informację o typie i przeznaczeniu zmiennej.
2. Skonstruuj pętlę For ze zmienną sterującą pętlą (zadeklarowaną wcześniej  patrz
punkt 1.) zmieniajÄ…cÄ… siÄ™ od 0 do 9 i zaprogramuj w niej:
ć% wyświetlenie zachęty do wprowadzenia przez użytkownika kolejnego imienia,
ć% pobranie wprowadzonego imienia i przypisanie go komórce o indeksie 0 leżącej w
wierszu o indeksie zgodnym z wartością zmiennej sterującej pętlą,
Przykład (założono, że zmienna sterująca pętlą została nazwana intNumerOsoby).
strGodności(intNumerOsoby, 0) = Console.ReadLine
ć% wyświetlenie zachęty do wprowadzenia przez użytkownika kolejnego nazwiska,
ć% pobranie wprowadzonego nazwiska i przypisanie go komórce o indeksie 1 leżącej
w wierszu o indeksie zgodnym z wartością zmiennej sterującej pętlą,
Przykład (założenie o nazwie zmiennej sterującej pętlą, jak w poprzednim przykładzie).
strGodności(intNumerOsoby, 1) = Console.ReadLine
3. Skonstruuj kolejną pętlę For ze zmienną sterującą zmieniającą się od 9 do 1 z przesko-
kiem -2 i zaprogramuj w niej wyświetlenie w konsoli imienia i nazwiska przechowywa-
nych w komórkach wiersza o indeksie zgodnym z wartością zmiennej sterującej pętlą.
Przykład (założenie, jak w poprzednich przykładach).
Console.WriteLine("Osoba w wierszu nr {0} to {1} {2}", intNumerOsoby, _
strGodności(intNumerOsoby, 0), strGodności(intNumerOsoby, 1))
4. Sprawdz działanie aplikacji.
Wykonanie ćwiczenia 52. bez użycia zmiennych tablicowych wymagałoby ogromnego nakładu
pracy przy deklarowaniu zmiennych, organizacji wprowadzania i wyprowadzania danych.
Tablica zadeklarowana w ćwiczeniu 51. pozwala przechowywać imię i nazwisko. Załóżmy, że
projekt powinien przechowywać również imię ojca oraz nazwisko rodowe matki. Wyobrażając sobie
dokument z odpowiednimi rubrykami łatwo dojść do wniosku, że deklaracja odpowiedniej zmiennej
będzie wyglądać następująco:
Dim Osoby(9, 3) As String
W każdym wierszu można będzie przechować imię (indeks kolumny 0), nazwisko (1), imię
ojca (2), nazwisko rodowe matki (3). Liczba kolumn odpowiada liczbie danych wprowadzanych w jed-
nym wierszu. Liczba wierszy odpowiada liczbie obiektów, o których chcemy przechowywać informa-
cje.
Załóżmy, że przechowywane w tablicy wartości, to dane członków zespołu sportowego. Pro-
blem pojawi się, gdy będziemy chcieli przechować takie same dane dla pewnej liczby drużyn. Roz-
wiązaniem są w takim przypadku tablice trójwymiarowe.
Tablice wielowymiarowe, przypadek ogólny
Jeśli wyobrazimy sobie zmienną strGodności zadeklarowaną w ćwiczeniu 51. jako tabelę
na kartce papieru i uznamy, że to lista zawodników zespołu sportowego, to kartki z tabelami do prze -
chowywania danych innych zespołów będą wyglądały identycznie (10 wierszy 2 kolumny). Kładąc
wypełnione kartki jedną nad drugą (w stos) otrzymujemy model tablicy trójwymiarowej. Deklaracja ta-
kiej tablicy, przy założeniu, że chcemy przechowywać dane 5 zespołów, wygląda następująco:
Dim strZespoły(4, 9, 1) As String
Deklaracja ta oznacza, że zmienna będzie przechowywać w pięciu wierszach, o indeksach od 0
do 4, odpowiadających kolejnym zespołom, po 10 kolumn, po dwie komórki w każdej kolumnie. Wy-
świetlenie imienia pierwszego zawodnika trzeciej drużyny uzyskamy stosując instrukcję:
Console.WriteLine(strZespoły(2, 0, 0))
Liczba dwa (2) odpowiada indeksowi trzeciego zespołu, pierwsze zero odpowiada pierwszemu
zawodnikowi w zespole, drugie zero jest indeksem imienia.
Można dodawać wymiary do zmiennej tablicowej wykorzystując ogólną postać deklaracji:
Dim TablicaWielowymiarowa(OstatniIndeksPierwszegoWymiaru, OstatniIndeksDrugiegoWymiaru,
& , OstatniIndeksPrzedostatniegoWymiaru, OstatniIndeksOstatniegoWymiaru) As Typ
Należy przy tym pamiętać, że wielkość rezerwowanej dla takiej zmiennej pamięci operacyjnej,
rośnie tak, jak iloczyn zakresów indeksów. Przykładowo dla tablicy czterowymiarowej o 10. indeksach
w każdym wymiarze i typie przechowywanych danych wymagającym 1 bajta pamięci, na przechowy-
wanie danych potrzebne będzie 104=10000 bajtów. Kolejne ćwiczenie poświęcone jest utworzeniu i
wykorzystaniu zmiennej tablicowej czterowymiarowej.
Ćwiczenie 53
Zaprojektować aplikację pozwalającą na przechowywanie danych o liczebności rodzin
zamieszkujących położone po dwóch stronach ulicy, cztery jednakowe (dwa po każdej
stronie ulicy), dwukondygnacyjne budynki o dwóch mieszkaniach na każdej kondygnacji.
Zmienna tablicowa przechowująca dane powinna uwzględniać stronę ulicy, numer
budynku po danej stronie ulicy, numer kondygnacji i numer mieszkania na kondygnacji.
Program po wprowadzeniu danych o liczbie rodzin powinien wyświetlić sumaryczną
liczbę mieszkańców osiedla.
1. Utwórz Projekt_053 aplikacji konsolowej.
2. Zadeklaruj zmienną tablicową intMieszkańcy o czterech wymiarach i elementach typu In-
teger.
3. Zadeklaruj cztery zmienne sterujące pętlami For.
4. Zadeklaruj zmienną intWszyscy typu Integer o wartości początkowej 0, posłuży do obli-
czenia sumarycznej liczby mieszkańców.
5. Skonstruuj pętlę For, w której zmienna sterująca zmienia się od 0 do 1 tak, jak strony uli-
cy, a wewnątrz pętli:
ć% skonstruuj zagnieżdżoną pętlę For, w której zmienna sterująca zmienia się od 0 do
1 tak, jak numery domów po każdej stronie ulicy, a wewnątrz pętli:
ª% skonstruuj zagnieżdżonÄ… pÄ™tlÄ™ For, w której zmienna sterujÄ…ca zmienia siÄ™ od
0 do 1 tak, jak numery kondygnacji w budynku, a wewnątrz pętli:
" skonstruuj zagnieżdżoną pętlę For, w której zmienna sterująca zmienia się
od 0 do 1 tak, jak numery mieszkań na danej kondygnacji, w pętli zaprogra-
muj:
ć% wyświetlenie informacji o mieszkaniu w następującym formacie (wyko-
rzystaj konstrukcję warunkową, aby wyświetlić prawidłowe określenie
strony ulicy i kondygnacji - parter/piętro):
Mieszkanie nr 2 na parterze bloku nr 1 po lewej stronie ulicy.
Uwaga. Lewa strona ulicy ma indeks 0, prawa  1, pierwszy blok po każdej stronie ulicy ma in-
deks 0, drugi  1, parter każdego bloku ma indeks 0, pierwsze piętro  1.
ć% pobranie liczby mieszkańców mieszkania, o którym wyświetlono infor-
mację i przypisanie go do odpowiedniej komórki tabeli,
ć% zwiększenie wartości zmiennej intWszyscy o pobraną wcześniej liczbę
mieszkańców.
6. Zaprogramuj, po zakończeniu wszystkich pętli, wyświetlenie informacji o liczbie miesz-
kańców osiedla.
7. Sprawdz działanie aplikacji.
Rysunek 21: Projekt_053 w działaniu.
Zmienna zadeklarowana jako tablicowa posiada ważne właściwości przydatne podczas progra-
mowania. Są one omówione w kolejnym podpunkcie.
Przydatne cechy zmiennej tablicowej
Deklarowane w poprzednich ćwiczeniach tablice posiadały taką wielkość, jaka wynikała z dekla-
racji. Można jednak zadeklarować zmienną tablicową bez podawania zakresu jej indeksów:
Dim ZmiennaTablicowa() As Typ
Deklaracja taka wskazuje jedynie, że zmienna jest zmienną tablicową, nie posiada ona jednak
komórek, które mogłyby być wykorzystane do przechowywania wartości.
Aby zadeklarować w ten sposób tablicę wielowymiarową, np. trójwymiarową, należy użyć dekla-
racji:
Dim TablicaTrojwymiarowa( , , ) As Typ
Jeśli, w którymkolwiek momencie wykonania programu okaże się, że konieczna jest zmiana
rozmiaru wcześniej zadeklarowanej tablicy, należy posłużyć się następującą deklaracją:
ReDim ZmiennaTablicowa(NowyOstatniIndeks)
Deklaracja zmienia rozmiar tablicy ZmiennaTablicowa tak, aby maksymalny indeks miał wartość
NowyOstatniIndeks. Można również zmieniać rozmiar tablic wielowymiarowych podając nowe warto-
ści maksymalne indeksów dla każdego wymiaru. Należy jednak pamiętać, że użycie deklaracji
ReDim powoduje utworzenie nowej tablicy w miejscu poprzedniej i ustalenie wartości wszystkich ko-
mórek tablicy na wartość domyślną typu komórki (0 dla typów liczbowych, False dla logicznych itd.).
Możliwa jest zmiana wielkości ostatniego wymiaru tablicy z zachowaniem wartości przechowy-
wanych w tablicy. Należy użyć deklaracji ReDim ze słowem kluczowym Preserve (Zachowaj):
ReDim Preserve ZmiennaTablicowa(NowyOstatniIndeks)
W przypadku tablic wielowymiarowych należy podać indeksy maksymalne, wymiarów poprze-
dzających zmieniany, takie same, jak w pierwotnej deklaracji tablicy (Dim). Wielkość wymiaru można
zmniejszać (odzyskując pamięć operacyjną) lub zwiększać. Kolejne ćwiczenie pokazuje przykłady
zastosowania wymienionych deklaracji dla jednowymiarowej zmiennej tablicowej.
Ćwiczenie 54
Zaprojektować aplikację ze zmienną tablicową intLiczby o elementach typu Integer.
Aplikacja powinna pobrać od użytkownika liczbę elementów, które tablica ma
przechowywać i dostosować jej rozmiar, pobrać liczby od użytkownika i wyświetlić je w
odwrotnej kolejności, pobrać od użytkownika nową (większą) liczbę elementów tablicy i
zmienić jej rozmiar tak, aby nie utracić wprowadzonych wcześniej danych, a następnie
pobrać brakujące dane i wyświetlić wszystkie w kolejności odwrotnej do kolejności
wprowadzania.
1. Utwórz Projekt_054 aplikacji konsolowej.
2. Zadeklaruj zmiennÄ… tablicowÄ… intLiczby o elementach typu Integer.
Przykład.
Dim intLiczby() As Integer
lub (nawiasy po nazwie typu określają typ tablicowy)
Dim intLiczby As Integer()
3. Zadeklaruj zmienną intPoczątkowaLiczbaElementów typu Integer, posłuży do przecho-
wywania pobranej od użytkownika liczby elementów zmiennej tablicowej intLiczby.
4. Pobierz od użytkownika wartość zmiennej intPoczątkowaLiczbaElementów.
5. Zmień wielkość zmiennej tablicowej intLiczby.
Przykład.
ReDim intLiczby(intPoczątkowaLiczbaElementów - 1)
Uwaga. Liczba elementów jest większa o 1 niż wartość maksymalnego indeksu, i odwrotnie 
maksymalny indeks jest o 1 mniejszy niż liczba elementów.
6. Zadeklaruj zmienną sterującą pętlą.
7. Skonstruuj pętlę pobierającą od użytkownika liczby i przypisującą je do odpowiednich ko-
mórek zmiennej tablicowej intLiczby.
8. Zaprogramuj wyświetlenie liczb przechowywanych w zmiennej tablicowej w odwrotnej
kolejności niż były wprowadzone.
9. Zadeklaruj zmienną intKońcowaLiczbaElementów typu Integer, posłuży do przechowy-
wania pobranej od użytkownika nowej liczby elementów tablicy.
10.Pobierz od użytkownika nową wartość zmiennej intKońcowaLiczbaElementów.
11. Zmień wielkość zmiennej tablicowej intLiczby tak, aby nie utracić przechowywanych w
niej wartości.
Przykład.
ReDim Preserve intLiczby(intKońcowaLiczbaElementów - 1)
12.Skonstruuj pętlę pobierającą od użytkownika brakujące liczby i przypisującą je do odpo-
wiednich komórek zmiennej intLiczby.
13.Zaprogramuj wyświetlenie liczb przechowywanych w zmiennej tablicowej w odwrotnej
kolejności niż były wprowadzone.
14.Sprawdz działanie aplikacji.
Rysunek 22: Projekt_054 w działaniu.
Liczbę indeksów, w wymiarze o podanym numerze, zwraca funkcjaGetLength (Oddaj dłu-
gość, zwróć długość). Liczba indeksów jest o 1 większa niż wartość indeksu maksymalnego w danym
wymiarze.
Załóżmy, że zmienną tablicową zadeklarowano w następujący sposób:
Dim dblTablica(3, 4, 2) As Double
Ma ona trzy wymiary, pierwszy z indeksami od 0 do 3 (4 wiersze), drugi z indeksami od 0 do 4
(pięć kolumn), itd. Aby wyświetlić w konsoli liczbę wymiarów zmiennej dblTablica można posłużyć się
instrukcjÄ…:
Console.WriteLine("Zmienna dblTablica ma {0} wymiar(y|ów)", dblTablica.Rank)
Przy założeniach poczynionych wcześniej, w konsoli pojawi się tekst:
Zmienna dblTablica ma 3 wymiar(y|ów)
Należy raz jeszcze podkreślić, że numery wymiarów (które zostaną użyte w kolejnym przykła-
dzie) rozpoczynają się od 0, dlatego wymiar drugi ma numer 1, a trzeci  2. Chcąc wyświetlić w kon -
soli liczbę indeksów dostępnych w drugim wymiarze można posłużyć się instrukcją:
Console.WriteLine("Drugi wymiar ma {0} indeksów, minimalny to 0, a maksymalny to {1}", _
dblTablica.GetLength(1), dblTablica.GetLength(1)  1)
Przy wcześniejszych założeniach, w konsoli pojawi się tekst:
Drugi wymiar ma 5 indeksów, minimalny to 0, a maksymalny to 4
Kolejne ćwiczenie pozwala prześledzić zmieniający się rozmiar ostatniego wymiaru zmiennej ta-
blicowej.
Ćwiczenie 55
Wykorzystać wartość zwracaną przez metodę Rank oraz funkcję GetLength do śledzenia
rozmiaru ostatniego wymiaru zmiennej tablicowej.
1. Utwórz Projekt_055 aplikacji konsolowej.
2. Zadeklaruj zmienną tablicową intLiczby o dwóch wierszach i dwóch kolumnach, komórki
powinny być typu Integer.
3. Zadeklaruj zmienne intWymiar, intMaksymalnyIndeks, intLiczbaIndeksów typu Integer,
posłużą do przechowywania wartości zgodnie ze swoimi nazwami.
4. Skonstruuj pętlę For ze zmienną sterującą intWymiar zmieniającą się od 0 do wartości
maksymalnego numeru wymiaru zmiennej intLiczby.
Przykład.
For intWymiar = 0 To intLiczby.Rank  1
Uwaga. Ponieważ Rank przechowuje liczbę wymiarów, to maksymalny numer wymiaru jest o 1
mniejszy, i odwrotnie  liczba wymiarów jest o 1 większa niż maksymalny numer wymiaru.
5. Zaprogramuj w pętli:
ć% przypisanie zmiennej intLiczbaIndeksów liczby indeksów w wymiarze o numerze
zgodnym z wartością zmiennej sterującej pętlą  intWymiar,
Przykład.
intLiczbaIndeksów = intLiczby.GetLength(intWymiar)
ć% przypisanie zmiennej intMaksymalnyIndeks wartości zmiennej intLiczbaIndeksów
pomniejszonej o 1,
ć% wyświetlenie w konsoli informacji o numerze wymiaru, liczbie indeksów oraz naj-
mniejszym i największym indeksie w tym wymiarze. Aby posłużyć się naturalnym
numerem wymiaru, należy wyprowadzić wartość zmiennej intWymiar powiększoną
o 1.
6. Zaprogramuj, po zakończeniu pętli, zmianę zmiennej tablicowej na pięciowierszową i
sześciokolumnową.
7. Wklej, poniżej instrukcji zmieniającej rozmiar zmiennej, kopię pętli For utworzonej w
punktach 4. i 5.
8. Sprawdz działanie aplikacji.
Rysunek 23: Projekt_055 w działaniu.
Zamiast obliczać maksymalny indeks danego wymiaru można go otrzymać metodą
GetUpperBound tablicy. Metoda ta przyjmuje jako parametr numer wymiaru tablicy, dla którego ma
zwrócić maksymalny indeks.
Pętla For Each & Next
Wprowadzenie typu tablicowego pozwala dokończyć temat pętli programowych. Pamiętamy, że
ostatnim typem pętli była For Each & Next. Pętlę taką można wykorzystać do powtórzenia zbioru
instrukcji dla każdego elementu pewnego zbioru. Takim zbiorem może być np. zmienna typu tablico-
wego.
Załóżmy, że mamy jednowymiarową tablicę dblX o określonej liczbie komórek. Chcemy dla każ-
dej przechowywanej w tablicy wartości obliczyć wartość trójmianu:
y= f śą xźą=ax2ƒÄ…bxƒÄ…c
Znając pętlę For możemy wykonać to zadanie w następujący sposób:
For intLicznik As Integer = 0 To dblX.GetUpperBound(0)
Console.WriteLine("f({0}) = {1}", dblX(intLicznik), a * dblX(intLicznik) ^ 2 + b * dblX(intLicznik) + c)
Next
Jednak czytelność instrukcji zawartej w pętli nie jest zbyt dobra. Wykorzystanie pętli ze słowem
Each pozwala poprawić ten niedostatek:
For Each X As Double In dblX
Console.WriteLine("f({0}) = {1}", X, a * X ^ 2 + b * X + c)
Next
Pętla definiuje zmienną tego samego typu jak każdy element zbioru, którego nazwa występuje
po słowie In (W). Do tej zmiennej pobierane są kolejne wartości ze zbioru, a następnie na zmiennej
wykonywane są instrukcje zawarte w pętli. Widać, że wzór zawarty w pętli dużo bardziej przypomina
zapis matematyczny. Ponadto programista zwolniony jest od wyznaczania maksymalnego indeksu
tablicy.
V.3. Wyliczenia stałych  enumeracje
Przypomnijmy składnię deklaracji stałej:
Const NazwaStałej As Typ = Wartość
Od chwili zadeklarowania stałej, jej nazwa jest tożsama z wartością Wartość i w bloku, w którym
została zadeklarowana, nie może ulec zmianie. Używanie w kodzie zródłowym konkretnej wartości
zamiast nazwy stałej wpływa ujemnie na jego czytelność. Ponadto w przypadku konieczności zmiany
użytej wartości, programista musi odnalezć i edytować kolejno każde jej wystąpienie. Jeśli użyje sta-
łej i jej nazwy, to edycja ogranicza się do deklaracji stałej.
Zdarza się, że stałe tworzą pewien logicznie powiązany zbiór. Przykładami takich zbiorów są
obowiązujące ograniczenia prędkości, temperatura topnienia i temperatura parowania pewnej sub-
stancji, itp. Język Visual Basic 2010 pozwala powiązać takie stałe w zbiór zwany enumeracją. Każda
enumeracja posiada nazwę i zawiera nazwy oraz wartości należących do niej stałych. Dostęp do
konkretnej stałej uzyskuje się poprzez nazwę enumeracji i połączoną z nią kropką nazwę stałej.
Przykład.
Zmienna = NazwaEnumeracji.NazwaStałej * 5
Język Visual Basic 2010 zawiera deklaracje wielu enumeracji. Programista może zdefiniować
własne używając konstrukcji Enum & End Enum. Kolejne ćwiczenie polegać będzie na utworzeniu
enumeracji wiążącej stałe przedstawiające temperaturę topnienia i temperaturę wrzenia wody.
Ćwiczenie 56
Zdefiniować enumerację Woda ze stałymi TemperaturaTopnienia i TemperaturaWrzenia.
1. Utwórz Projekt_056 aplikacji konsolowej.
2. Utwórz, w części deklaracyjnej modułu, szkielet deklaracji enumeracji, w tym celu:
ć% wpisz słowo kluczowe Enum i po spacji dopisz nazwę enumeracji  Woda,
ć% naciśnij Enter i zauważ, że edytor dokończył deklarację słowami kluczowymi End
Enum.
3. Zdefiniuj w enumeracji dwie stałe TemperaturaTopnienia i TemperaturaWrzenia typu Inte-
ger o wartościach odpowiednio: 0, 100.
Przykład.
TemperaturaTopnienia = 0
TemperaturaWrzenia = 100
Ponieważ elementy enumeracji są stałe z definicji, a ponadto mogą być jedynie typów całkowi-
tych (domyślnie Integer), to deklarując je nie podaje się słowa Const i można opuścić wskazanie
typu.
4. Zadeklaruj w procedurze Main zmienną intRóżnica typu Integer i przypisz jej wartość róż-
nicy stałych TemperaturaWrzenia i TemperaturaTopnienia.
Przykład.
Dim intRóżnica As Integer = Woda.TemperaturaWrzenia - Woda.TemperaturaTopnienia
5. Zaprogramuj w procedurze Main wyświetlenie w konsoli informacji o różnicy pomiędzy
temperaturami wrzenia i topnienia wody.
6. Sprawdz działanie aplikacji.
Enumeracja Woda grupuje dwie stałe TemperaturaTopnienia i TemperaturaWrzenia o warto-
ściach 0 i 100. Jeśli wartość pierwszej stałej w enumeracji wynosi 0, to można pominąć inicjowanie
tej stałej. W związku z tym deklaracja enumeracji Woda może wyglądać następująco:
Enum Woda
TemperaturaTopnienia
TemperaturaWrzenia = 100
End Enum
Dodatkowo, w przypadku, gdy niektóre wartości enumeracji tworzą ciąg liczb różniących się o 1,
można zainicjować pierwszą z nich, a następne inicjacje pominąć.
Przykład.
Enum DopuszczalneWartości
Alfa 'Pierwsza stała enumeracji ma wartość domyślną 0 (zero)
Beta 'Kolejna ma wartość o jeden większą - 1
Delta = 13
Epsilon 'Kolejna ma wartość o 1 większą - 14
Fi 'Kolejna ma wartość o 1 większą - 15
End Enum
Jeśli programista chce wykorzystać funkcję środowiska polegającą na śledzeniu poprawności
używanych typów, to może jawnie wskazać typ elementów enumeracji specyfikując go po nazwie
enumeracji. Zakładając np., że wartości ograniczeń prędkości w Polsce są liczbami nieujemnymi,
a ponadto największa z nich nie przekracza 255, można zdefiniować enumerację OgraniczeniaPręd-
kości o elementach typu Byte, której niepełną wersję przedstawia poniższy przykład:
Enum OgraniczeniaPrędkości As Byte
StrefaZamieszkania = 20
TerenZabudowany = 50
TerenZabudowanyNocÄ… = 60
'itd.
End Enum
W chwili wykorzystania stałych takiej enumeracji środowisko dokonuje kontroli poprawności
użytego typu i jeśli typy nie są zgodne, zgłasza wystąpienie błędu.
Enumeracja działa w języku Visual Basic 2010 tak, jak typ. Możliwe jest definiowanie zmiennych
typu enumeracji.
Przykład.
Dim Temperatura As Woda
Edytor wspomaga programistę w trakcie programowania przypisań do takiej zmiennej wyświe-
tlając listę elementów enumeracji. Ponadto przy próbie przypisania wartości, które nie należą do enu-
meracji, środowisko zgłasza błąd. Taka funkcja Visual Studio 2010 może uchronić programistę przed
błędami logicznymi.
Współcześnie stosuje się różnorodne programy wspierające pomoc medyczną i przedmedycz-
ną. Przykładowo, w celu określenia przytomności osoby poszkodowanej można użyć prostego sche-
matu AVPU6. W myśl jego zasad, osoba która jest nieprzytomna i nie reaguje na żadne bodzce, jest
w stanie U (od ang. Unresponsive  ten, który nie odpowiada). Jeśli osoba reaguje na bodzce bólo-
we, to jest w stanie P (od ang. Pain  ból). Reakcje na polecenia głosowe określa litera V (Verbal 
słowny). W końcu litera A określa stan przytomności i możliwości skupienia uwagi (ang. Alert  uwa-
ga). W kolejnym ćwiczeniu utworzona zostanie enumeracja grupująca opisane stany.
6 Opracowane na podstawie: http://pl.wikipedia.org/wiki/Skala_AVPU.
Ćwiczenie 57
Zadeklarować w dodanym do projektu module enumerację grupującą stany
przytomności według schematu AVPU.
1. Utwórz Projekt_057 aplikacji konsolowej.
2. Dodaj do projektu moduł o nazwie SkalaPrzytomności (wykorzystaj schemat wprowadzo-
ny w ćwiczeniu 18.).
3. Zadeklaruj wewnątrz modułu enumerację o nazwie AVPU.
4. Dodaj wewnątrz enumeracji stałe o nazwach: A, V, P, U.
5. Skompiluj projekt.
Moduł SkalaPrzytomności zawiera enumerację AVPU o stałych: A, V, P, U. Z własności enume-
racji wiadomo, że stała A ma wartość 0 (zero), a kolejne stałe mają wartość o jeden większą od po -
przedzającej: V  1, P  2, U  3. Zmienna typu AVPU może przechowywać jedynie wartości wystę-
pujące w enumeracji. Zmienna taka może posłużyć jako zmienna sterująca pętlą. Kolejne ćwiczenie
polegać będzie na wyprowadzeniu do konsoli nazw stałych oraz ich wartości.
Ćwiczenie 58
Zaprogramować wyświetlenie za pomocą pętli nazw stałych enumeracji AVPU oraz ich
wartości.
1. Zadeklaruj w procedurze Main zmiennÄ… Stan typu AVPU.
2. Utwórz pętlę For ze zmienną sterującą Stan zmieniającą się od najmniejszej wartości
enumeracji AVPU  AVPU.A do największej wartości  AVPU.U.
Przykład.
For Stan = AVPU.A To AVPU.U
Next
3. Zaprogramuj w pętli wyprowadzenie do konsoli nazwy aktualnej wartości zmiennej Stan
oraz wartości liczbowej odpowiadającej tej zmiennej.
Przykład.
Console.WriteLine("{0}  {1}", Stan, CInt(Stan))
4. Sprawdz działanie aplikacji.
Aplikacja wyprowadza do konsoli litery odpowiadające danemu stanowi oraz, po myślniku, war-
tość stałej określonej daną literą. Należy zwrócić uwagę na fakt, że zastosowanie formatu "{0} 
{1}" zmusza programistÄ™ do konwersji CInt(Stan). Bez tej konwersji nie zostanie wyprowadzona
wartość stałej, a jedynie odpowiadająca jej litera. Jeśli programista nie zastosuje formatu, to będzie
zmuszony użyć funkcji zwracającej reprezentację łańcuchową zmiennej. Funkcja ta jest dostępna dla
każdej zmiennej i nosi nazwę ToString.
Przykład.
Console.WriteLine(Stan.ToString & " - " & Stan)
Efekt działania obu poniższych instrukcji jest identyczny.
Console.WriteLine("{0} - {1}", Stan, CInt(Stan))
Console.WriteLine(Stan.ToString & " - " & Stan)
Ponieważ wartości stałych zadeklarowanych w enumeracji AVPU są liczbami całkowitymi, to
mogą zostać wykorzystane jako indeksy tablicy. Zostanie to wykorzystane w kolejnym ćwiczeniu.
Ćwiczenie 59
Utworzyć tablicę opisów stanu przytomności. Wykorzystać zmienną typu AVPU do
indeksowania utworzonej tablicy.
1. Zadeklaruj w module Module1 tablicę o nazwie AVPUOpis typu tablica łańcuchów teksto-
wych i przypisz jej (na etapie deklarowania) zestaw czterech łańcuchów tekstowych opi-
sujących stan przytomności.
Przykład.
Dim AVPUOpis As String() = {"przytomny, skupia uwagÄ™", _
"reaguje na polecenia głosowe", _
"reaguje na bodzce bólowe", _
"nieprzytomny, nie reaguje na żadne bodzce"}
2. Dodaj w pętli For instrukcję WriteLine konsoli wyprowadzającą tekst zawarty w komórce
tablicy AVPUOpis o indeksie odpowiadajÄ…cym zmiennej Stan.
Przykład.
Console.WriteLine(AVPUOpis(Stan))
3. Sprawdz działanie aplikacji.
Aplikacja wyświetla opis stanu przytomności poniżej wartości literowej i liczbowej tego stanu.
Enumeracje są niezwykle pomocne podczas programowania, gdyż poprawiają czytelność kodu
zródłowego.


Wyszukiwarka

Podobne podstrony:
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
Typy danych w MySQL
złożone typy
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 8
Hurtownie Danych 1 Ćwiczenia całe
06 Procedury i funkcje cwiczenia przygotowujace
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 4
09 Pliki cwiczenia przygotowujace
Typy Danych w Pascalu
typy danych
02 Wprowadzenie do Visual Basic cwiczenia przygotowujace
obiekty i typy danych
07 Algorytmy cwiczenia przygotowujace
Wyklad 1 program typy danych
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 2
tablica funkcji i operatorów typy danych
4 TurboPascal Struktury i typy danych
Programowanie i jezyk C Wyklad 01 Typy danych

więcej podobnych podstron