tablice


Rozdzia 3
l
Laboratorium 3
3.1. Tablice
Tablica jest struktura danych zawierajaca zmienne tego samego typu.CLRśrodowiska

.NET Frameworkwspiera tworzenie tablic jedno oraz wielo wymiarowych.
3.1.1. Tablice wVB.NET
Każda tablicaVB.NETjest obiektem dziedziczacym z klasySystem.Array. Tablice

deklaruje sie w nastepujacy sposób:

Dim () As
Deklaracja tablicy do przechowania 10 wartości typuInteger:
Dim t a b l i c a L i c z b C a l k o w i t y c h ( 9 ) As i n t e g e r
Powyższy fragment kodu deklaruje tablice mogaca przechować 10 wartości typuIn-

teger, elementy tablicy indeksowane sa od 0 do 9. W tym przypadku rozmiar tablicy
jest sta i zosta podany w nawiasach przy deklaracji zmiennej typu tablicowego.
ly l
Możemy również zadeklarować zmienna tablicowa bez podawania jej rozmiaru, roz-
miar zostanie ustalony podczas inicjalizacji tablicy:
Dim tab ( ) As I n t e g e r
tab = New I n t e g e r ( ) {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10}
38
3.1. Tablice
Powyższy kod deklaruje najpierw zmienna tabjako tablice liczb typuInteger, na-

stepnie w nawiasach klamrowych wystepuja oddzielone przecinkami kolejne elementy

tablicy.
Kiedy deklaracja i inicjalizacja tablicy sa rozdzielone, inicjalizacje trzeba wykonać

podajac w nawiasach klamrowych elementy tablicy.

Odwo sie do elementu tablicy odbywa sie poprzez operator indeksowania(i)
lanie

gdzieioznacza indeks elementu tablicy do którego chcemy sie odwo Pamietajmy,
lać.

że indeks pierwszego elementu to 0
Przyk
ladowy program korzystajacy z tablicy:

Sub Main ( )
Dim i As I n t e g e r = 0
Dim tab ( ) As I n t e g e r
tab = New I n t e g e r ( ) {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10}
For i = 0 To 9
Console . WriteLine ( tab ( i ) )
Next
End Sub
Powyższy program jest dość prosty, ale musieliśmy na sztywno umieścić rozmiar
tablicy w petliFor. Wcześniej wspomnieliśmy, że wszystkie klasy.NET Framework

dziedzicza z klasySystem.Array, w której znajduje sie wiele przydatnych metod

i w laściwości klasy System.Array jest
laściwości. jedna z bardzo przydatnych w
Lengthgdzie przechowywana jest informacja o rozmiarze tablicy. Możemy napisać
kod dla powyższego przyk zastepujac sztywny rozmiar tablicy użyty w petliFor
ladu

odwo do w
laniem laściwościLength
Sub Main ( )
Dim i As I n t e g e r = 0
Dim tab ( ) As I n t e g e r
tab = New I n t e g e r ( ) {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10}
For i = 0 To tab . Length - 1
Console . WriteLine ( tab ( i ) )
Next
End Sub
Ponieważ w
laściwośćLengthzawiera rozmiar tablicy a elementy indeksowane sa od
0, w petli for pojawia sieLength - 1

Możemy teraz zaprezentować inna forme funkcjiMainod której rozpoczyna sie wy-

konanie aplikacji konsolowej napisanej w jezykuVB.NET.

Sub Main ( ByVal a r g s As S t r i n g ( ) )
End Sub
39
3.1. Tablice
Zauważmy, że proceduraMainposiada parametr o nazwieargs(nazwa zmiennej
może być dowolna) typu tablica wartości typuString. Dodatkowo pojawi sie s
lo lowo

kluczoweByVal, które zostanie omówione pózniej.
Zmiennaargsbedzie zawiera parametry przekazane naszej aplikacji z linii poleceń.
la

Możemy napisać program, który wyświetli wszystkie parametry z jakimi zosta
la
wywo nasza aplikacja:
lana
Sub Main ( ByVal a r g s As S t r i n g ( ) )
Dim i As I n t e g e r
For i = 0 To a r g s . Length - 1
Console . WriteLine ( a r g s ( i ) )
Next
End Sub
Powyższy przyk wykorzystuje petle typuFor. JezykVB.NETposiada jednak wy-
lad

godniejsza konstrukcje do iteracji poprzez elementy tablicy, mianowicie konstrukcje

For Each
For Each In

Next
Zamieńmy kod wyświetlajacy elementy tablicy tak, aby wykorzystywa konstrukcje
l

For Each:
Sub Main ( )
Dim tab As I n t e g e r ( )
tab = New I n t e g e r ( ) {1 , 2 , 3 , 4 , 5}
Dim i As I n t e g e r
For Each i In tab
Console . WriteLine ( i )
Next
End Sub
Zmiennaiw każdej iteracji zawiera wartość kolejnego elementu tablicytab. Zmienna
imusi być tego samego typu co elementy tablicy (w naszym przypadkuInteger).
" Zmiennaimoże być wykorzystana tylko do odczytania wartości elementu tablicy,
nie można przy jej pomocy zmienić zawartości tablicy. Jeżeli zachodzi konieczność
modyfikacji elementów tablicy podczas iteracji trzeba skorzystać z konstrukcji
For...Next,
" KonstrukcjaFor Eachs do iteracji po elementach tablicy jak i kolekcji. Po-
luży
jecie kolekcji zostanie omówione pózniej,

" KlasaStringjest także kolekcja znaków.
Możemy zastosować konstrukcjeFor Eachdo iteracji poprzez kolejne znaki wchodza-

ce w sk lańcucha znaków. Poniższy program wypisuje poszczególne litery wcho-
lad
dzace w sk napisu:
lad

40
3.1. Tablice
Sub Main ( )
Dim na pis As S t r i n g =  J a k i ś na pi s 
Dim c As Char
For Each c In n ap i s
Console . WriteLine ( c )
Next
End Sub
Poniższy kod pokazuje zastosowanie tablicy tablic, do wyświetlenia kalendarza.
1 Sub Main ( )
2 Dim i As I n t e g e r
3 Dim M i e s i a c e ( ) , Dni ( ) As S t r i n g
4 Dim Kalendarz ( ) ( ) As I n t e g e r = New I n t e g e r ( 1 1 ) ( ) {}
5 Dim Miesiac , Dzien As I n t e g e r
6 M i e s i a c e = New S t r i n g ( 1 1 ) {  Styczeń  ,  Luty  ,  Marzec  ,
7  Kwiecień  ,  Maj  ,  Czerwiec  ,
8  L i p i e c  ,  S i e r p i e ń  ,  Wrzesień  ,
9  P a z d z i e r n i k  ,  L i s t o p a d  ,  Grudzień  }
10 Dni = New S t r i n g ( 6 ) {  Pn ,  Wt ,  Śr  ,  Cz  ,
11  Pt  ,  So  ,  Nie  }
12 For M i e s i a c = 0 To M i e s i a c e . Length - 1
13 Dzien = DateTime . DaysInMonth ( Year (Now) , M i e s i a c + 1)
14 Kalendarz ( M i e s i a c ) = New I n t e g e r ( Dzien - 1) {}
15 For i = 0 To Dzien - 1
16 Kalendarz ( M i e s i a c ) ( i ) = i + 1
17 Next i
18 Next M i e s i a c
19 Dim d As DateTime
20 For M i e s i a c = 0 To M i e s i a c e . Length - 1
21 Console . WriteLine ( M i e s i a c e ( M i e s i a c ) )
22 d = New DateTime ( Year (Now) , M i e s i a c + 1 , 1)
23 i = d . DayOfWeek  0 - nd , 1 - pn . . .
24 I f ( i = 0) Then
25 i = 6
26 E l s e
27 i = i - 1
28 End I f
29 For Dzien = 0 To Dni . Length - 1
30 Console . Write (  {0}  , Dni ( Dzien ) )
31 Next
32 Console . WriteLine ( )
33 For Dzien = 0 To i - 1
34 Console . Write (   . PadRight ( 3 ) )
35 Next
36 For Dzien = 0 To Kalendarz ( M i e s i a c ) . Length - 1
37 Console . Write (  { 0 : 0 0 }  , Kalendarz ( M i e s i a c ) ( Dzien ) )
38 I f ( i + 1) Mod 7 = 0 Then
39 Console . WriteLine ( )
40 End I f
41 i = i + 1
42 Next Dzien
43 Console . WriteLine ( )
44 Console . WriteLine ( )
45 Next M i e s i a c
46 End Sub
41
3.1. Tablice
3.1.2. Tablice wC#
Każda tablicaC#jest obiektem dziedziczacym z klasySystem.Array. Tablice dekla-

ruje sie w nastepujacy sposób:

[] ;
Deklaracja tablicy do przechowania 10 wartości typuInteger:
i n t [ 1 0 ] t a b l i c a L i c z b C a l k o w i t y c h ;
Powyższy fragment kodu deklaruje tablice mogaca przechować 10 wartości typuIn-

teger, elementy tablicy indeksowane sa od 0 do 9. W tym przypadku rozmiar tablicy
jest sta i zosta podany w nawiasach przy deklaracji zmiennej typu tablicowego.
ly l
Podawanie rozmiaru w deklaracji tablicy różni sie w jezykuC#w stosunku d jezy-

kaVB.NET. Deklarujac tablice wVB.NETpodawaliśmy maksymalny indeks tablicy,

natomiast wC#podajemy ilość elementów.
Tak jak w przypadkuVB.NETmożemy zadeklarować tablice bez podawania jej roz-

miaru, a nastepnie dokonać jej inicjalizacji:

i n t [ ] tab ;
tab = new i n t [ 1 0 ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 } ;
Możemy również utworzyć tablice dynamicznie nie inicjalizujac jej:

i n t [ ] tab ;
tab = new i n t [ 1 0 ] ;
Operatorem indeksowania w przypadkuC#jest operator []. przyk
ladowy program
deklaruje zmienna tabjako tablice liczb typuint, nastepnie tworzy nowy obiekt

reprezentujacy tablice i wype elementy tablicy kolejnymi liczbami by na końcu
lnia

używajac petliforwyświetlić zawartość tablicy:

s t a t i c void Main ( s t r i n g [ ] a r g s )
{
i n t [ ] tab ;
tab = new i n t [ 1 0 ] ;
f o r ( i n t i =0; i tab [ i ]= i +1;
f o r ( i n t i = 0 ; i < tab . Length ; i ++)
Console . WriteLine ( tab [ i ] ) ;
}
42
3.1. Tablice
Tak samo jak w przypadkuVB.NETw jezykuC#istnieje konstrukcjaforeachs
lużaca

do wykonania operacji iteracji na elementach tablicy lub kolekcji.
f o r e a c h ( i n )

Analogiczny kod jak w przypadkuVB.NETużywajacy konstrukcjiforeach

s t a t i c void Main ( s t r i n g [ ] a r g s )
{
s t r i n g s =  J a k i ś n a p i s  ;
f o r e a c h ( char c i n s )
Console . WriteLine ( c ) ;
}
Zauważmy, że deklaracja funkcjiMainjezykaC#od której rozpoczyna sie wykonanie

aplikacji konsolowej, zawiera argument o nazwieargstypustring[].
Tak jak w przypadkuVB.NETjest to tablica lańcuchów znaków zawierajaca parame-


try przekazane w linii poleceń podczas uruchamiania programu.
Przyk
ladowy kod wykorzystuje petleforeachdo wyświetlenia parametrów przeka-

zanych z linii poleceń:
s t a t i c void Main ( s t r i n g [ ] a r g s )
{
i f ( a r g s . Length < 1)
Console . WriteLine (  Brak parametró wywolania !  ) ;

e l s e
{
Console . WriteLine (  Przekazana parametry :  ) ;
f o r e a c h ( s t r i n g c i n a r g s )
{
Console . WriteLine ( c ) ;
} // f o r e a c h
} // e l s e
}//Main
Tablice wielowymiarowe deklaruje sie podobnie do tablic jednowymiarowych:

i n t [ , ] tablica2Wymiarowa ;
tablica2Wymiarowa = new i n t [ 1 0 , 1 0 ] ;
43
3.1. Tablice
Kod wykorzystujacy tablice tablic:

1 s t a t i c void Main ( s t r i n g [ ] a r g s )
2 {
3 i n t Dzien , Miesiac , i ;
4 s t r i n g [ ] Mi e si a c e , Dni ;
5 i n t [ ] [ ] Kalendarz = new i n t [ 1 2 ] [ ] ;
6 M i e s i a c e = new s t r i n g [ 1 2 ] {  Styczeń  ,  Luty  ,  Marzec  ,  Kwiecień  ,
7  Maj  ,  Czerwiec  ,  L i p i e c  ,  S i e r p i e ń  ,
8  Wrzesień  ,  P a z d z i e r n i k  ,  Li s t o p a d  ,
9  Grudzień  } ;
10 Dni = new s t r i n g [ 7 ] {  Pn ,  Wt ,  Śr  ,  Cz  ,  Pt  ,  So  ,  Nie  } ;
11 f o r ( M i e s i a c = 0 ; M i e s i a c < M i e s i a c e . Length ; M i e s i a c++)
12 {
13 Dzien = DateTime . DaysInMonth ( DateTime . Now . Year , M i e s i a c + 1 ) ;
14 Kalendarz [ M i e s i a c ] = new i n t [ Dzien ] ;
15 f o r ( i = 0 ; i < Dzien ; i ++)
16 Kalendarz [ M i e s i a c ] [ i ] = i + 1 ;
17 } // f o r M i e s i a c
18 f o r ( M i e s i a c = 0 ; Miesiac < M i e s i a c e . Length ; M i e s i a c++)
19 {
20 Console . WriteLine ( M i e s i a c e [ M i e s i a c ] ) ;
21 DateTime d = new System . DateTime ( DateTime . Now . Year , M i e s i a c + 1 , 1 ) ;
22 i = ( i n t ) d . DayOfWeek ;
23 i = i == 0 ? 6 : i -1;
24 // 0 - nd , 1 - pn . . .
25 f o r ( Dzien = 0 ; Dzien < Dni . Length ; Dzien++)
26 Console . Write (  {0}  , Dni [ Dzien ] ) ;
27 Console . WriteLine ( ) ;
28 Console . Write (   . PadRight (3" i ) ) ;
29 f o r ( Dzien = 0 ; Dzien < Kalendarz [ M i e s i a c ] . Length ; Dzien++)
30 {
31 Console . Write (  { 0 : 0 0 }  , Kalendarz [ M i e s i a c ] [ Dzien ] ) ;
32 i f ( ( i++ + 1) % 7 == 0)
33 Console . WriteLine ( ) ;
34 }
35 Console . WriteLine ( ) ;
36 Console . WriteLine ( ) ;
37 } // f o r M i e s i a c
38 } // Main
Rys. 3.1.1. Wynik dzia programu
lania
44


Wyszukiwarka

Podobne podstrony:
Historia państwa i prawa Polski Testy Tablice
1 parametry technniczne wymiary tablic zal nr1id?43
Tablice Dystrybuanta rozkładu normalnego
NADMA 6 TABLICA OIa
tablice
Mfa Tablice Fizyczne
tablica hashujaca wyjscie
Tablice statystyczne wartości krytyczne współczynnika korelacji Pearsona
tablicowka

więcej podobnych podstron