C cwiczenia Wydanie III cwcsh3

background image
background image

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu
niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą
kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym,
magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź
towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie
praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.

Redaktor prowadzący: Ewelina Burska

Projekt okładki: Maciej Pasek

Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.

Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie?cwcsh3
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Listingi do książki można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/cwcsh3.zip

ISBN: 978-83-246-3869-7

Copyright © Helion 2012

Printed in Poland.

Kup książkę

Poleć książkę

Oceń książkę

Księgarnia internetowa

Lubię to! » Nasza społeczność

background image

Spis treci

Wstp

7

Cz I

Jzyk programowania

9

Rozdzia 1. Pierwsza aplikacja

11

Jzyk C#

11

Jak waciwie nazywa si ten jzyk?

12

rodowisko uruchomieniowe

12

Narzdzia

14

Najprostszy program

14

Kompilacja i uruchamianie

15

Visual C# Express

19

Dyrektywa using

23

Rozdzia 2. Zmienne i typy danych

25

Typy danych

25

Typy arytmetyczne

25

Typ bool (Boolean)

27

Deklarowanie zmiennych

28

Nazewnictwo zmiennych

32

Typy odnonikowe

33

Typ string

34

Typ object

34

Warto null

35

Operatory

35

Operatory arytmetyczne

36

Operatory bitowe

43

Kup książkę

Poleć książkę

background image

4

C # • w i c z e n i a

Operatory logiczne

45

Operatory przypisania

45

Operatory porównania (relacyjne)

46

Operator warunkowy (?)

47

Pozostae operatory

48

Priorytety operatorów

48

Komentarze

49

Rozdzia 3. Instrukcje

51

Instrukcje warunkowe

51

Instrukcja if...else

51

Instrukcja if...else if

55

Instrukcja switch

57

Ptle

59

Ptla for

59

Ptla while

66

Ptla do…while

68

Ptla foreach

70

Instrukcja goto

70

Wprowadzanie danych

73

Argumenty wiersza polece

74

Instrukcja ReadLine

80

Cz II

Programowanie obiektowe

89

Rozdzia 4. Klasy i obiekty

91

Klasy

91

Metody

94

Konstruktory

103

Specyfikatory dostpu

107

Dziedziczenie

114

Rozdzia 5. Tablice

119

Deklarowanie tablic

120

Inicjalizacja tablic

122

Rozmiar tablicy

124

Ptla foreach

127

Tablice wielowymiarowe

130

Poleć książkę

Kup książkę

background image

S p i s t r e c i

5

Rozdzia 6. Wyjtki i obsuga bdów

137

Obsuga bdów

137

Blok try...catch

143

Hierarchia wyjtków

148

Wasne wyjtki

151

Rozdzia 7. Interfejsy

155

Prosty interfejs

155

Interfejsy w klasach potomnych

159

Czy to interfejs?

167

Rzutowanie

172

Sowo kluczowe as

174

Sowo kluczowe is

175

Cz III

Programowanie w Windows

177

Rozdzia 8. Pierwsze okno

179

Utworzenie okna

179

Wywietlanie komunikatu

184

Zdarzenie ApplicationExit

185

Rozdzia 9. Delegacje i zdarzenia

187

Delegacje

187

Zdarzenia

192

Rozdzia 10. Komponenty

197

Etykiety (Label)

197

Przyciski (Button)

203

Pola tekstowe (TextBox)

206

Pola wyboru (CheckBox, RadioButton)

211

Listy rozwijane (ComboBox)

217

Listy zwyke (ListBox)

220

Menu

224

Menu gówne

224

Menu kontekstowe

232

Waciwoci Menu

235

Skróty klawiaturowe

240

Poleć książkę

Kup książkę

background image

6

C # • w i c z e n i a

Poleć książkę

Kup książkę

background image

5

Tablice

Tablice to jedne z podstawowych struktur danych; znane s zapewne
nawet pocztkujcym programistom. Warto jednak w kilku sowach
przypomnie podstawowe wiadomoci i pojcia z nimi zwizane.
Tablica to stosunkowo prosta struktura danych pozwalajca na prze-
chowanie uporzdkowanego zbioru elementów danego typu — mona
j sobie wyobrazi tak, jak zaprezentowano na rysunku 5.1. Skada
si z ponumerowanych kolejno komórek, a kada taka komórka moe
przechowywa pewn porcj danych.

Rysunek 5.1.
Schemat struktury
tablicy

Jakiego rodzaju bd to dane, okrela typ tablicy. Jeli zatem zadeklaru-
jemy tablic typu cakowitoliczbowego (

int

), bdzie moga zawiera

liczby cakowite, a jeli bdzie to typ znakowy (

char

), poszczególne

komórki bd mogy zawiera róne znaki. Naley zwróci uwag, e
w C# (podobnie jak w wikszoci wspóczesnych popularnych jzyków
programowania) numerowanie komórek zaczyna si od 0, czyli pierw-
sza komórka ma indeks 0, druga — indeks 1 itd.

Poleć książkę

Kup książkę

background image

1 2 0

C # • w i c z e n i a

Deklarowanie tablic

Przed skorzystaniem z tablicy naley zadeklarowa zmienn tablicow.
Poniewa w C# tablice s obiektami, naley równie utworzy od-
powiedni obiekt. Schematycznie robi si to w sposób nastpujcy:

typ_tablicy

[] nazwa_tablicy = new typ_tablicy[liczba_elementów];

Oczywicie, deklaracj zmiennej tablicowej oraz przypisanie jej nowo
utworzonego elementu mona wykona w osobnych instrukcjach, np.
w ten sposób:

typ_tablicy

[] nazwa_tablicy;

nazwa_tablicy

= new typ_tablicy[liczba_elementów];

Piszc zatem:

int tablica[];

zadeklarujemy odniesienie do tablicy, która bdzie moga zawiera
elementy typu

int

, czyli 32-bitowe liczby cakowite. Samej tablicy

jednak jeszcze nie bdzie (odmiennie ni w przypadku prostych typów
wartociowych, takich jak

int

,

byte

czy

char

) i konieczne jest jej utwo-

rzenie.

W I C Z E N I E

5.1

Utworzenie tablicy

Zadeklaruj i zainicjalizuj tablic elementów typu cakowitego. Przypisz
pierwszemu elementowi tablicy dowoln warto. Wywietl zawarto
tego elementu na ekranie.

using System;

public class Program
{
public static void Main()
{
int[] tablica = new int[5];
tablica[0] = 10;
Console.WriteLine("Pierwszy element tablicy: " + tablica[0]);
}
}

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 2 1

Wyraenie

new tablica[5]

oznacza utworzenie nowej, jednowymiarowej,

5-elementowej tablicy liczb typu

int

. Ta nowa tablica zostaa przypisa-

na zmiennej odnonikowej o nazwie

tablica

. Od miejsca tego przypi-

sania mona odwoywa si do kolejnych elementów tej tablicy, piszc:

tablica[index]

W tym przypadku pierwszemu elementowi (o indeksie

0

) zostaa przy-

pisana warto

10

. O tym, e takie przypisanie faktycznie miao miej-

sce, przekonalimy si, wywietlajc warto tej komórki na ekranie.

Warto w tym miejscu przypomnie, e elementy tablicy numero-
wane s od

0

, 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.2

Odwoanie do nieistniejcego elementu tablicy

Zadeklaruj i zainicjalizuj tablic 10-elementow. Spróbuj przypisa
elementowi o indeksie

10

dowoln liczb cakowit.

using System;

public class Program
{
public static void Main()
{
int[] tablica = new int[10];
tablica[10] = 1;
Console.WriteLine("Element o indeksie 10 to: " + tablica[10]);
}
}

Powyszy kod da si bez problemu skompilowa, jednak przy próbie
uruchomienia takiego programu na ekranie zobaczymy okno z in-
formacj o wystpieniu bdu. Moe ono mie rón posta, w za-
lenoci od tego, w jakiej wersji systemu zostaa uruchomiona apli-
kacja. Na rysunku 5.2 jest widoczne okno z systemu Windows 7.
Równie na konsoli (w Windows XP dopiero po zamkniciu okna
dialogowego) ujrzymy komunikat podajcy konkretne informacje o ty-
pie bdu oraz miejscu programu, w którym wystpi (rysunek 5.3).

Poleć książkę

Kup książkę

background image

1 2 2

C # • w i c z e n i a

Rysunek 5.2.
Próba odwoania si
do nieistniejcego
elementu tablicy
powoduje bd
aplikacji

Rysunek 5.3. Systemowa informacja o bdzie

Wbrew pozorom, nie stao si nic strasznego. Program, co prawda,
nie dziaa, ale bd zosta wychwycony przez rodowisko uruchomie-
niowe. Konkretnie mówic, zosta wygenerowany tzw. wyjtek i aplika-
cja zakoczya dziaanie. Taki wyjtek mona jednak przechwyci i tym
samym zapobiec niekontrolowanemu zakoczeniu wykonywania kodu.
To jednak odrbny temat, który zostanie przedstawiony w rozdziale 6.
Wane jest to, e próba odwoania si do nieistniejcego elementu zo-
staa wykryta i to odwoanie nie wystpio! Program nie naruszy wic
obszaru pamici niezarezerwowanej dla niego.

Inicjalizacja tablic

Tablic mona zainicjalizowa ju w momencie jej tworzenia. Dane,
które maj si znale w poszczególnych komórkach, podaje si w na-
wiasach klamrowych po deklaracji tablicy. Schematycznie wyglda to
nastpujco:

typ

[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN}

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 2 3

Jeli zatem chcielibymy utworzy 5-elementow tablic liczb cakowi-
tych i od razu zainicjalizowa j liczbami od 1 do 5, moemy zrobi
to w taki sposób:

int[] tablica = new int[5] {1, 2, 3, 4, 5};

W I C Z E N I E

5.3

Inicjalizacja tablicy

Zadeklaruj tablic 5-elementow typu

int

i zainicjalizuj j liczbami

od

1

do

5

. Zawarto tablicy wywietl na ekranie.

using System;

public class Program
{
public static void Main()
{
int[] tablica = new int[5]{1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++)
{
Console.WriteLine("tablica[{0}] = {1}", i, tablica[i]);
}
}
}

Wynik dziaania kodu z powyszego wiczenia widoczny jest na ry-
sunku 5.4. Nie jest niespodziank, e wywietlone zostay liczby od

1

do

5

, natomiast indeksy kolejnych komórek zmieniaj si od

0

do

4

.

Powstaa tu bowiem 5-elementowa tablica liczb typu

int

. Skoro ma 5

elementów, to pierwszy z nich ma indeks

0

, a ostatni —

4

. Dlatego

zmienna sterujca ptli

for

, która odczytuje dane z tablicy, ma poczt-

kow warto

0

, a warunek zakoczenia ptli to

i < 5

. Tym samym

i

zmienia si te od

0

do

4

.

Rysunek 5.4.
Zawarto
kolejnych komórek
tablicy utworzonej
w wiczeniu 5.3

Poleć książkę

Kup książkę

background image

1 2 4

C # • w i c z e n i a

Kiedy inicjalizowana jest tablica o z góry znanej liczbie elementów,
dopuszcza si pominicie fragmentu kodu zwizanego z tworzeniem
obiektu. Kompilator sam wykona odpowiednie uzupenienia. Zamiast
pisa:

typ

[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN}

mona zatem równie dobrze uy konstrukcji:

typ

[] nazwa = {dana1, dana2,...,danaN}

Oba sposoby s równowane i naley uywa tego, który jest wygod-
niejszy.

W I C Z E N I E

5.4

Bezporednia inicjalizacja tablicy

Zadeklaruj tablic 5-elementow typu

int

i zainicjalizuj j liczbami

od

1

do

5

. Uyj drugiego z poznanych sposobów inicjalizacji. Zawarto

tablicy wywietl na ekranie.

using System;

public class Program
{
public static void Main()
{
int[] tablica = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++)
{
Console.WriteLine("tablica[{0}] = {1}", i, tablica[i]);
}
}
}

Rozmiar tablicy

Kada tablica posiada waciwo

Length

, która okrela biec liczb

komórek. Aby uzyska t informacj, piszemy:

tablica

.Length

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 2 5

Przy tym dopuszczalny jest tylko odczyt, czyli prawidowa jest kon-
strukcja:

int rozmiar = tablica.Length;

ale nieprawidowy jest zapis:

tablica.Length = 10;

W I C Z E N I E

5.5

Odczyt rozmiaru tablicy

Utwórz tablic o dowolnym rozmiarze. Odczytaj warto waciwoci

Length

i wywietl j na ekranie.

using System;

public class Program
{
public static void Main()
{
int[] tablica =
{
10, 9, 8, 7, 6, 5, 4, 3, 2, 1
};
Console.Write("Liczba elementów tablicy: ");
Console.WriteLine(tablica.Length);
}
}

W I C Z E N I E

5.6

Waciwo Length i ptla for

Utwórz tablic zawierajc pewn liczb wartoci cakowitych. Zawar-
to tablicy wywietl na ekranie za pomoc ptli

for

. Do okrelenia

rozmiaru tablicy uyj waciwoci

Length

.

using System;

public class Program
{
public static void Main()
{
int[] tab =
{
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Poleć książkę

Kup książkę

background image

1 2 6

C # • w i c z e n i a

};
for(int i = 0; i < tab.Length; i++)
{
Console.WriteLine("tab[" + i + "] = " + tab[i]);
}
}
}

Zasada odczytu danych w tym przykadzie jest taka sama jak w wi-
czeniach 5.3 i 5.4, z t rónic, e rozmiar tablicy jest okrelany za
pomoc waciwoci

Length

(

tab.Length

). Dziki temu mona np. do-

pisa dowoln liczb nowych danych w instrukcji inicjalizujcej ta-
blic, a kod ptli

for

nie bdzie wymaga adnych zmian. Nowy rozmiar

zostanie uwzgldniony automatycznie.

Do zapisywania danych (podobnie jak do odczytu) w tablicach cz-
sto uywa si ptli (przedstawionych w rozdziale 2.). Jest to wrcz
niezbdne, gdy trudno si spodziewa, aby mona byo „rcznie”
zapisa wartoci z wicej ni kilkunastu czy kilkudziesiciu komórek.
Wielko tablicy nie musi te by z góry znana, moe wynika z danych
uzyskanych w trakcie dziaania programu. Z tablicami mog wspópra-
cowa dowolne rodzaje ptli. W niektórych przypadkach bardzo wy-
godna jest omówiona w kolejnym podrozdziale ptla

foreach

.

W I C Z E N I E

5.7

Uycie ptli do zapisu danych w tablicy

Uyj ptli

for

do zapisania w 10-elementowej tablicy 10 kolejnych liczb

cakowitych.

using System;

public class Program
{
public static void Main()
{
int[] tab = new int[10];
for(int i = 0; i < tab.Length; i++)
{
tab[i] = i + 1;
}
Console.WriteLine("Zawarto tablicy:");
for(int i = 0; i < tab.Length; i++)
{

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 2 7

Console.WriteLine("tab[{0}] = {1}", i, tab[i]);
}
}
}

Powstaa 10-elementowa tablica liczb typu

int

. Mamy w niej zapisa

wartoci od

1

do

10

, czyli komórka o indeksie

0

ma mie warto

1

, o in-

deksie

1

— warto

2

itd. A zatem warto komórki ma by zawsze o 1

wiksza ni warto indeksu (zmiennej

i

). Dlatego instrukcja wewntrz

ptli ma posta:

tablica[i] = i + 1;

Druga ptla

for

suy tylko do wywietlania danych zawartych w ta-

blicy. Jej konstrukcja jest taka sama jak w pierwszym przypadku.
Wewntrz ptli znajduje si instrukcja wywietlajca wartoci kolej-
nych komórek.

Ptla foreach

Dotychczas poznalimy trzy rodzaje ptli:

for

,

while

i

do…while

(bya

o nich mowa w rozdziale 3.). W przypadku tablic (jak równie kolekcji,
które w tej ksice nie byy omawiane

1

) mona równie skorzysta

z ptli typu

foreach

. Jest ona bardzo wygodna, gdy umoliwia prost

iteracj po wszystkich elementach tablicy; nie trzeba wtedy wprowa-
dza dodatkowej zmiennej iteracyjnej. Ptla

foreach

ma nastpujc

posta:

foreach(typ identyfikator in wyraenie)
{
//instrukcje
}

Jeeli zatem mamy tablic o nazwie

tab

zawierajc liczby typu

int

,

moemy zastosowa konstrukcj:

1

cilej rzecz ujmujc, ptli

foreach

mona uy z kadym obiektem

udostpniajcym tzw. iterator. Ten temat nie bdzie jednak poruszany
w ksice.

Poleć książkę

Kup książkę

background image

1 2 8

C # • w i c z e n i a

foreach(int val in tab)
{
//instrukcje
}

Wtedy w kolejnych przebiegach ptli pod

val

bd podstawiane kolejne

elementy tablicy. Sowo

val

jest tu identyfikatorem odczytywanej

wartoci (mona je traktowa jak zmienn). Oczywicie, mona je
zmieni na dowolne inne.

W I C Z E N I E

5.8

Uycie ptli foreach do wywietlenia zawartoci tablicy

Wykorzystaj ptl

foreach

do wywietlenia wszystkich elementów

tablicy przechowujcej liczby cakowite.

using System;

public class Program
{
public static void Main()
{
int[] tab = new int[10];
for(int i = 0; i < 10; i++)
{
tab[i] = i;
}
foreach(int i in tab)
{
Console.WriteLine(i);
}
}
}

Tablica

tab

zostaa zainicjalizowana w ptli

for

kolejnymi liczbami od

0

do

9

. Do wywietlenia danych zostaa natomiast uyta ptla

foreach

.

W kadym jej przebiegu pod identyfikator

val

jest podstawiana warto

kolejnego elementu tablicy. W pierwszym przebiegu jest to pierwszy
element (o indeksie

0

), w drugim — drugi element (o indeksie

1

) itd.

Ptla koczy si po osigniciu ostatniego elementu (o indeksie

9

).

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 2 9

W I C Z E N I E

5.9

Zliczanie wartoci w ptli foreach

Wykorzystaj ptl

foreach

do sprawdzenia, ile jest liczb parzystych,

a ile nieparzystych w tablicy z elementami typu

int

.

using System;

public class Program
{
public static void Main()
{
int[] tab = new int[100];
int parzyste = 0, nieparzyste = 0;
Random rand = new Random();

for(int i = 0; i < 100; i++)
{
tab[i] = rand.Next();
}

foreach(int i in tab)
{
if(i % 2 == 0)
{
parzyste++;
}
else
{
nieparzyste++;
}
}
Console.WriteLine("Parzyste: {0}", parzyste);
Console.WriteLine("Nieparzyste: {0}", nieparzyste);
}
}

Powstaa tablica

tab

typu

int

, 100-elementowa. Do wypenienia jej

danymi zostaa uyta ptla

for

oraz obiekt

rand

typu

Random

, za pomoc

którego uzyskujemy wartoci pseudolosowe. Dokadniej rzecz ujmujc,
kolejn pseudolosow liczb cakowit otrzymujemy, wywoujc
metod

Next

tego obiektu. W ptli

foreach

badamy, które z komórek

tablicy

tab

zawieraj wartoci parzyste, a które — nieparzyste. Aby

to stwierdzi, uywamy operatora dzielenia modulo. Gdy wynikiem
tego dzielenia jest 0, dana komórka zawiera liczb parzyst (jest wtedy
zwikszana warto pomocniczej zmiennej

parzyste

), natomiast gdy

wynik dzielenia jest róny od 0, komórka zawiera warto nieparzyst

Poleć książkę

Kup książkę

background image

1 3 0

C # • w i c z e n i a

(jest wtedy zwikszana warto pomocniczej zmiennej

nieparzyste

).

Po zakoczeniu ptli na ekranie wywietlany komunikat z poszuki-
wan informacj (uywane s wartoci pobrane ze zmiennych

parzyste

i

nieparzyste

).

Tablice wielowymiarowe

Tablice nie musz by jednowymiarowe, jak w dotychczas prezen-
towanych przykadach. Tych wymiarów moe by wicej, np. dwa
— otrzymujemy wtedy struktur widoczn na rysunku 5.5, czyli rodzaj
tabeli o zadanej liczbie wierszy i kolumn. W tym przypadku s dwa
wiersze oraz pi kolumn. Oczywicie, aby w takiej sytuacji jedno-
znacznie wyznaczy komórk, trzeba poda dwie liczby: indeks
wiersza i indeks kolumny.

Rysunek 5.5.
Przykad tablicy
dwuwymiarowej

W jaki sposób mona zadeklarowa tego typu tablic? Zacznijmy od
deklaracji samej zmiennej tablicowej. Dla tablicy dwuwymiarowej
ma ona posta:

typ_tablicy

[,] nazwa_tablicy;

Sam tablic tworzy si za pomoc instrukcji:

new int[wiersze, kolumny];

Przykadowo dwuwymiarow tablic widoczn na rysunku 5.5 utwo-
rzymy nastpujco (przy zaoeniu, e ma przechowywa liczby ca-
kowite):

int[,] tablica = new tablica[2, 5];

Inicjalizacja komórek moe odbywa si, podobnie jak w przypadku
tablic jednowymiarowych, ju w trakcie deklaracji:

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 3 1

typ_tablicy

[,] nazwa_tablicy =

{

(dana1, dana2),

(dana3, dana4),
...,
(danaM, danaN)
};

Zobaczmy, jak wyglda to na konkretnym przykadzie.

W I C Z E N I E

5.10

Tworzenie tablicy dwuwymiarowej

Zadeklaruj tablic dwuwymiarow typu

int

o dwóch wierszach i piciu

kolumnach i zainicjalizuj j kolejnymi liczbami cakowitymi. Zawar-
to tablicy wywietl na ekranie.

using System;

public class Program
{
public static void Main()
{
int[,] tablica = new int[2, 5];
int licznik = 0;
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 5; j++)
{
tablica[i, j] = licznik++;
}
}
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]);
}
}
}
}

Jak wida, do wypeniania tablicy uyto dwóch zagniedonych ptli

for

. Pierwsza, zewntrzna, odpowiada za iteracj po indeksach wier-

szy tablicy, druga za iteracj po indeksach kolumn. Zmienna

licznik

suy jako licznik i jest w kadym przebiegu zwikszana o jeden, dziki
czemu w kolejnych komórkach uzyskujemy kolejne liczby cakowite. Po
wypenieniu danymi tablica przyjmie posta widoczn na rysunku 5.6.

Poleć książkę

Kup książkę

background image

1 3 2

C # • w i c z e n i a

Rysunek 5.6.
Tablica z wiczenia 5.10
po wypenianiu danymi

Do wywietlenia danych uywana jest analogiczna konstrukcja z dwo-
ma zagniedonymi ptlami. Po uruchomieniu kodu na ekranie zo-
baczmy widok przedstawiony na rysunku 5.7. Jak wida, dane te
zgodne s ze struktur przedstawion na rysunku 5.6.

Rysunek 5.7.
Wynik dziaania
programu
z wiczenia 5.10

Tablica dwuwymiarowa nie musi mie, tak jak w poprzednich przy-
kadach, ksztatu prostoktnego, tzn. takiego, gdzie liczba komórek
w kadym wierszu i kadej kolumnie jest staa. Równie dobrze mona
utworzy np. tablic o ksztacie trójkta (rysunek 5.8 A) lub zupenie
nieregularn (rysunek 5.8 B). Przy tworzeniu struktur nieregularnych
trzeba si jednak wicej napracowa, gdy kady wiersz zazwyczaj
naley tworzy rcznie, piszc odpowiedni lini kodu.

Rysunek 5.8.
Przykady bardziej
skomplikowanych tablic
dwuwymiarowych

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 3 3

Postarajmy si utworzy struktur przedstawion na rysunku 5.8 B.
Naley zauway, e kady wiersz mona traktowa jak oddzieln
tablic jednowymiarow. Zatem jest to jednowymiarowa tablica, której
poszczególne komórki zawieraj inne jednowymiarowe tablice. Inaczej
mówic, jest to tablica tablic. Wystarczy wic zadeklarowa zmienn
tablicow o odpowiednim typie, a nastpnie poszczególnym jej ele-
mentom przypisa nowo utworzone tablice jednowymiarowe o zadanej
dugoci. Oto cae rozwizanie problemu.

Jednak co znaczy okrelenie „odpowiedni typ tablicy”? Pomylmy —
jeli w tablicy (jednowymiarowej) miay by przechowywane liczby
cakowite typu

int

, typem tej tablicy by

int

. Pisalimy wtedy:

int[] tablica;

Jeli zatem typem nie jest

int

, ale tablica typu

int

, któr oznacza si

jako

int[]

, naley napisa:

int[][] tablica;

Z kolei utworzenie 4-elementowej tablicy zawierajcej tablice z liczbami
cakowitymi wymaga zapisu:

new tablica[4][];

Te wiadomoci powinny wystarczy do wykonania kolejnego wi-
czenia.

W I C Z E N I E

5.11

Budowa tablicy nieregularnej

Napisz kod tworzcy struktur tablicy widocznej na rysunku 5.8 B,
przechowujcej liczby cakowite. W kolejnych komórkach powinny
znale si kolejne liczby cakowite od

1

do 10

.

public class Program
{
public static void Main()
{
int[][] tablica = new int[4][];
tablica[0] = new int[4]{1, 2, 3, 4};
tablica[1] = new int[2]{5, 6};
tablica[2] = new int[3]{7, 8, 9};
tablica[3] = new int[1]{10};
}
}

Poleć książkę

Kup książkę

background image

1 3 4

C # • w i c z e n i a

Po wypenieniu danymi tablica z wiczenia bdzie miaa posta przed-
stawion na rysunku 5.9. Jak sobie poradzi z wywietleniem jej za-
wartoci na ekranie? Oczywicie, mona zrobi to rcznie, piszc kod
oddzielnie dla kadego wiersza. Przy tak maej tablicy nie bdzie to
problemem. Czy jednak tej czynnoci nie da si zautomatyzowa?
Najwygodniej byoby przecie wyprowadza dane na ekran w zagnie-
donych ptlach, tak jak w wiczeniu 5.10.

Rysunek 5.9.
Tablica z wiczenia
5.11 wypeniona
przykadowymi
danymi

Oczywicie, jest to jak najbardziej moliwe, a z nieregularnoci ta-
blicy mona sobie poradzi w bardzo prosty sposób. Przecie kada
tablica ma, omówion wczeniej w tym rozdziale, waciwo

Length

,

przy uyciu której da si sprawdzi jej dugo. To cakowicie rozwi-
zuje problem wywietlenia danych nawet z tak nieregularnej struktury
jak obecnie opisywana.

W I C Z E N I E

5.12

Wywietlanie danych z tablicy nieregularnej

Zmodyfikuj kod z wiczenia 5.11 w taki sposób, aby dane zawarte
w tablicy zostay wywietlone na ekranie (rysunek 5.10). W tym celu
uyj zagniedonych ptli

for

.

using System;

public class Program
{
public static void Main()
{
int[][] tablica = new int[4][];
tablica[0] = new int[4]{1, 2, 3, 4};
tablica[1] = new int[2]{5, 6};

Poleć książkę

Kup książkę

background image

R o z d z i a 5 . • T a b l i c e

1 3 5

tablica[2] = new int[3]{7, 8, 9};
tablica[3] = new int[1]{10};
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("");
}
}
}

Do wywietlenia danych równie zostay uyte dwie zagniedone ptle

for

. W ptli zewntrznej jest umieszczona instrukcja

Console.Write

´("tablica[{0}] = ", i);

, wywietlajca numer aktualnie przetwarza-

nego wiersza tablicy, natomiast w ptli wewntrznej znajduje si in-
strukcja

Console.Write("{0} ", tab[i][j]);

, wywietlajca zawarto

komórek w danym wierszu.

Rysunek 5.10.
Wywietlenie danych
z nieregularnej tablicy
w wiczeniu 5.12

Poleć książkę

Kup książkę

background image

1 3 6

C # • w i c z e n i a

Poleć książkę

Kup książkę

background image
background image

Wyszukiwarka

Podobne podstrony:
C cwiczenia Wydanie III cwcsh3
C cwiczenia Wydanie III cwcsh3
C cwiczenia Wydanie III
C cwiczenia Wydanie III
C cwiczenia Wydanie III 2
Java cwiczenia praktyczne Wydanie III cwjav3
JavaScript cwiczenia praktyczne Wydanie III 2
C cwiczenia praktyczne Wydanie III cwcpp3
Pascal cwiczenia praktyczne Wydanie III 2
Java cwiczenia praktyczne Wydanie III
SQL cwiczenia praktyczne Wydanie III cwsql3
Pascal cwiczenia praktyczne Wydanie III cwtp3
Pascal cwiczenia praktyczne Wydanie III cwtp3
C cwiczenia praktyczne Wydanie III
Internet cwiczenia praktyczne Wydanie III
SQL cwiczenia praktyczne Wydanie III cwsql3
C Ćwiczenia praktyczne Wydanie III
Tworzenie stron WWW cwiczenia praktyczne Wydanie III cwtww3
Internet cwiczenia praktyczne Wydanie III cwint3

więcej podobnych podstron