05 Zlozone typy danych cwiczenia przygotowujace

background image

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łaszczyźnie 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. Sprawdź działanie aplikacji.

Przykład działania programu przedstawiono poniżej:

Rysunek 19: Projekt_044 w działaniu.

background image

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. Sprawdź działanie aplikacji.

Przykład działania programu przedstawiono poniżej:

Rysunek 20: Projekt_045 w działaniu.

background image

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 odpowiedź 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

.

background image

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.

background image

Ć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. Sprawdź 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ę

background image

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

With .Osoba

.Imię = "Waldemar"
.Nazwisko = "Szeroki"
.RokUrodzenia = 2010

End With
.Wzrost = 221.5
.Waga = 98.5

End With

Bramkarz.Osoba.Imię = "Waldemar"
Bramkarz.Osoba.Nazwisko = "Szeroki"
Bramkarz.Osoba.RokUrodzenia = 2010
Bramkarz.Wzrost = 221.5
Bramkarz.Waga = 98.5

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 źró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 źró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.

background image

Ćwiczenie 49
Zastosować konstrukcję With w kodzie źró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 źró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

(Znajdź i zamień), rozpoznaj jego elementy, w tym:

listę rozwijaną Find what (Co znaleźć) – 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,

background image

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;

wprowadź 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. Sprawdź 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:

Dzień

Temperatura

powietrza

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

background image

(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,

background image

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. Sprawdź działanie aplikacji. Porównaj długość kodu procedury Main ćwiczeń 44. i 50.

Występuje skrócenie kodu źró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ę:

Dzień

Temperatura powietrza [ºC]

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. Łatwo 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 źródłowy nie posiadałby żadnej elastyczności – jakiekolwiek zmiany wyma -

gałyby panowania nad wszystkimi zmiennymi.

background image

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

Temperatura

powietrza [ºC]

7:00

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.

background image

Ć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ą.

background image

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. Sprawdź 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

background image

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 10

4

=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,

background image

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. Sprawdź działanie aplikacji.

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.

Rysunek 21: Projekt_053 w działaniu.

background image

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.

background image

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.Sprawdź działanie aplikacji.

Rysunek 22: Projekt_054 w działaniu.

background image

Liczbę indeksów, w wymiarze o podanym numerze, zwraca funkcja GetLength (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.

background image

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. Sprawdź działanie aplikacji.

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

Rysunek 23: Projekt_055 w działaniu.

background image

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 =ax

2

bxc

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 źró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 odnaleźć 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

background image

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. Sprawdź 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ąć.

background image

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 AVPU

6

. W myśl jego zasad, osoba która jest nieprzytomna i nie reaguje na żadne bodźce, jest

w stanie U (od ang. Unresponsive – ten, który nie odpowiada). Jeśli osoba reaguje na bodźce 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.

background image

Ć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. Sprawdź działanie aplikacji.

background image

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 bodźce bólowe", _
"nieprzytomny, nie reaguje na żadne bodźce"}

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. Sprawdź 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

źródłowego.


Wyszukiwarka

Podobne podstrony:
4 TurboPascal Struktury i typy danych
typy danych, Elektronika i Telekomunikacja, informatyka
Specjalne ćwiczenia przygotowawcze stosowane przy nauce pływania kraul na grzbiecie
24 05 2010 B&K, Bazy Danych 10 11 12
04 Petle programowe cwiczenia przygotowujace
Cwiczenie 05 - Rezonans napiec i pradow , Ćwiczenie nr 5
lab10a, Typy danych - pliki
Java 03 Podstawowe typy danych
SQL Server 2005 typy danych
02 Wprowadzenie do Visual Basic cwiczenia przygotowujace
08 Debugowanie cwiczenia przygotowujace
2 Typy danychid 19692 Nieznany
L.A. Konspekt - Ćwiczenia przygotowujące do nauczania trójskoku i startu niskiego, AWF, Lekkoatletyk
wiczenia4, Studia, Access, Bazy Danych, Ćwiczenia

więcej podobnych podstron