Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
C#. wiczenia.
Wydanie II
Autor: Marcin Lis
ISBN: 83-246-0595-9
Format: A5, stron: 216
Przykady na ftp: 65 kB
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Wstp
Jzyk C#
Jak waciwie nazywa si ten jzyk?
rodowisko uruchomieniowe
Narzdzia
Najprostszy program
Kompilacja i uruchamianie
Visual C# Express
Dyrektywa using
Rozdzia 3. Instrukcje
Instrukcje warunkowe
Instrukcja goto
Ptle
Wprowadzanie danych
7
8
8
10
10
12
13
17
19
19
28
41
43
43
50
54
64
77
77
79
87
90
96
C#. wiczenia
Rozdzia 5. Tablice
99
Deklarowanie tablic
Inicjalizacja
Ptla foreach
Tablice wielowymiarowe
99
103
105
107
113
Obsuga bdw
Blok try...catch
Hierarchia wyjtkw
Wasne wyjtki
Rozdzia 7. Interfejsy
Prosty interfejs
Interfejsy w klasach potomnych
Czy to interfejs?
113
118
124
126
131
131
135
142
153
153
157
159
161
161
165
171
171
177
180
185
189
192
195
5
Tablice
Tablice to jedne z podstawowych struktur danych i znane s
z pewnoci nawet pocztkujcym programistom. Przypomnijmy jednak na wstpie podstawowe wiadomoci i pojcia
z nimi zwizane. Tablica to stosunkowo prosta struktura danych pozwalajca na przechowanie uporzdkowanego zbioru elementw danego typu. Skada si z ponumerowanych kolejno komrek, a kada
taka komrka moe przechowywa pewn porcj danych.
Jakiego rodzaju bd to dane, okrela typ tablicy. Jeli zatem zadeklarujemy tablic typu cakowitoliczbowego (int), bdzie moga ona zawiera liczby cakowite, a jeli bdzie to typ znakowy (char), poszczeglne komrki bd mogy zawiera rne znaki.
Deklarowanie tablic
Przed skorzystaniem z tablicy naley zadeklarowa zmienn tablicow, a poniewa w C# tablice s obiektami, naley rwnie utworzy
odpowiedni obiekt. Schematycznie robimy to w sposb nastpujcy:
typ_tablicy[] nazwa_tablicy = new typ_tablicy[liczba_elementw];
100
C#. wiczenia
Piszc zatem:
int tablica[];
5.1
Rozdzia 5. Tablice
101
5.2
Utworzenie tablicy
Zadeklaruj i zainicjalizuj tablic elementw typu cakowitego. Przypisz zerowemu elementowi tablicy dowoln warto. Sprbuj wywietli zawarto tego elementu na ekranie.
using System;
public
class main
{
public static void Main()
{
int[] tablica = new int[1];
tablica[0] = 10;
Console.WriteLine("Zerowy element tablicy to: " + tablica[0]);
}
}
Wyraenie new tablica[1] oznacza stworzenie nowej, jednowymiarowej, jednoelementowej tablicy liczb typu int. Ta nowa tablica zostaa
przypisana zmiennej odnonikowej o nazwie tablica. Od tej chwili
mona odwoywa si do kolejnych elementw tej tablicy, piszc:
tablica[index]
Warto przy tym zauway, e elementy tablicy numerowane s od zera, a nie od 1. Oznacza to, e pierwszy element tablicy 10-elementowej
ma indeks 0, a ostatni 9 (nie 10!). Co si stanie, jeli nieprzyzwyczajeni do takiego sposobu indeksowania odwoamy si do indeksu o numerze 10?
W I C Z E N I E
5.3
102
C#. wiczenia
Wbrew pozorom nie stao si jednak nic strasznego. Program co prawda nie dziaa, ale bd zosta wychwycony przez rodowisko uruchomieniowe. Konkretnie mwic, zosta wygenerowany tak zwany wyjtek i aplikacja zakoczya dziaanie. Taki wyjtek moemy jednak
przechwyci i tym samym zapobiec niekontrolowanemu zakoczeniu
wykonywania kodu. To jednak odrbny temat, ktrym zajmiemy si
w rozdziale 6. Wane jest to, e prba odwoania si do nieistniejcego
elementu zostaa wykryta i to odwoanie tak naprawd nie wystpio! Program nie naruszy wic obszaru pamici niezarezerwowanej
dla niego.
Rozdzia 5. Tablice
103
Inicjalizacja
Tablice mona zainicjalizowa ju w momencie ich tworzenia. Dane,
ktre maj si znale w poszczeglnych komrkach, podajemy w nawiasach klamrowych po deklaracji tablicy. Schematycznie wyglda to
nastpujco:
typ[] nazwa = new typ [liczba_elementw]{dana1, dana2,...,danaN}
Jeli zatem chcielibymy utworzy picioelementow tablic liczb cakowitych i od razu zainicjowa j liczbami od 1 do 5, moemy zrobi
to w taki sposb:
int[] tablica = new int[5] {1, 2, 3, 4, 5}
W I C Z E N I E
5.4
Inicjalizacja tablicy
Wynik dziaania kodu z powyszego wiczenia widoczny jest na rysunku 5.4. Nie jest niespodziank, e wywietlone zostay kolejne liczby od 1 do 5.
104
C#. wiczenia
Rysunek 5.4.
Zawarto
kolejnych
komrek tablicy
utworzonej
w wiczeniu 5.4
Kiedy inicjujemy tworzon tablic z gry znan liczb elementw, moemy pomin fragment kodu zwizany z tworzeniem obiektu, a kompilator doda go za nas. Zamiast pisa:
typ[] nazwa = new typ [liczba_elementw]{dana1, dana2,...,danaN}
5.5
Rozdzia 5. Tablice
105
Ptla foreach
Dotychczas poznalimy trzy rodzaje ptli: for, while i dowhile. W przypadku tablic (jak rwnie kolekcji, ktrymi si w niniejszej publikacji
nie zajmujemy) moemy rwnie skorzysta z ptli typu foreach. Jest
ona bardzo wygodna, gdy umoliwia prost iteracj po wszystkich
elementach tablicy; nie musimy te wprowadza dodatkowej zmiennej iteracyjnej. Ptla foreach ma posta nastpujc:
foreach(typ identyfikator in wyraenie)
{
//instrukcje
}
Konkretnie, jeeli mamy tablic o nazwie tab zawierajc liczby typu int, moemy zastosowa konstrukcj:
foreach(int i in tab)
{
//instrukcje
}
W tym wypadku w kolejnych przebiegach ptli pod i bd podstawiane kolejne elementy tablicy.
W I C Z E N I E
5.6
Wykorzystaj ptl foreach do wywietlenia wszystkich elementw tablicy przechowujcej liczby cakowite.
using System;
public
class main
{
public static void Main()
{
int[] tab = new int[10];
for(int i = 0; i < 10; i++){
tab[i] = i;
106
C#. wiczenia
}
foreach(int i in tab){
Console.WriteLine(i);
}
}
}
W I C Z E N I E
5.7
Rozdzia 5. Tablice
107
Tablice wielowymiarowe
Tablice nie musz by jednowymiarowe, jak w dotychczas prezentowanych przykadach. Tych wymiarw moe by wicej, na przykad
dwa otrzymujemy wtedy struktur widoczn na rysunku 5.5, czyli
rodzaj tabeli o zadanej iloci wierszy i kolumn. W tym przypadku mamy dwa wiersze oraz cztery kolumny. Oczywicie w takiej sytuacji,
aby jednoznacznie wyznaczy komrk, trzeba poda dwie liczby.
Rysunek 5.5.
Przykad tablicy
dwuwymiarowej
Przykadowo, dwuwymiarow tablic widoczn na rysunku 5.5 utworzymy nastpujco (zakadajc, e ma ona przechowywa liczby cakowite):
int[,] tablica = new tablica[2, 5];
Inicjalizacja samych komrek moe odbywa si, podobnie jak w przypadku tablic jednowymiarowych, ju w trakcie deklaracji:
typ_tablicy[,] nazwa_tablicy = {(dana1, dana2), (dana3, dana4),...,
(danaM, danaN)};
108
C#. wiczenia
W I C Z E N I E
5.8
Zadeklaruj tablic dwuwymiarow typu int o dwch wierszach i piciu kolumnach i zainicjuj j kolejnymi liczbami cakowitymi. Zawarto tablicy wywietl na ekranie.
using System;
public
class main
{
public static void Main()
{
int[,] tablica = new int[2, 5];
int counter = 0;
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
tablica[i, j] = counter++;
}
}
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
Console.WriteLine("tablica[{0}, {1}] = {2}", i, j, tablica[i, j]);
}
}
}
}
Rozdzia 5. Tablice
109
110
C#. wiczenia
tablice. Inaczej mwic, jest to tablica tablic. Wystarczy zatem zadeklarowa zmienn tablicow o odpowiednim typie, a nastpnie poszczeglnym jej elementom przypisa nowo utworzone tablice jednowymiarowe o zadanej dugoci. To cae rozwizanie problemu.
Pytanie brzmi: co to znaczy odpowiedni typ tablicy. Pomylmy jeli w tablicy (jednowymiarowej) chcielimy przechowywa liczby cakowite typu int, to typem tej tablicy byo int. Pisalimy wtedy:
int[] tablica;
Jeli zatem typem nie jest int, ale tablica typu int, ktr oznaczamy
jako int[], naley napisa:
int[][] tablica;
5.9
Rozdzia 5. Tablice
111
W tej chwili nasza struktura zostaa wypeniona danymi, tak jak widoczne jest to na rysunku 5.9. Jak sobie jednak poradzi z jej wywietleniem na ekranie. Oczywicie moemy zrobi to rcznie, piszc kod
oddzielnie dla kadego wiersza. W przypadku tak maej tablicy nie
bdzie to problemem. Czy jednak tej czynnoci nie da si zautomatyzowa? Najwygodniej byoby przecie wyprowadza dane na ekran
w zagniedonej ptli, tak jak w przypadku wiczenia 5.8.
Rysunek 5.9.
Tablica
z wiczenia 5.9
wypeniona
przykadowymi
danymi
Okazuje si, e jest to jak najbardziej moliwe, a z nieregularnoci naszej tablicy poradzimy sobie w bardzo prosty sposb. Kada tablica jest
obiektem; posiada waciwo Length, dziki czemu moemy sprawdzi
jej dugo. To cakowicie rozwizuje problem wywietlenia danych
nawet z tak nieregularnej struktury jak obecnie opisywana.
W I C Z E N I E
5.10
112
C#. wiczenia
for(int i = 0; i < tablica.Length; i++){
Console.Write("tablica[{0}] = ", i);
for(int j = 0; j < tablica[i].Length; j++){
Console.Write("[{0}] ", tablica[i][j]);
}
Console.WriteLine("");
}
}
}
Rysunek 5.10.
Wywietlenie
danych
z nieregularnej
tablicy
w wiczeniu 5.10