SlideShare a Scribd company logo
1 of 17
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TREŒCI
                                         C#. Æwiczenia.
                                         Wydanie II
           KATALOG KSI¥¯EK               Autor: Marcin Lis
                                         ISBN: 83-246-0595-9
                      KATALOG ONLINE     Format: A5, stron: 216
                                         Przyk³ady na ftp: 65 kB
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     C# to jeden z najm³odszych jêzyków programowania. Opracowany w firmie Microsoft
                                         jêzyk jest po³¹czeniem najlepszych cech C++ i Javy. Stanowi œwietne narzêdzie do
                                         tworzenia aplikacji dla systemu Windows i urz¹dzeñ mobilnych. C# jest stosunkowo
         CENNIK I INFORMACJE             ³atwy do opanowania, ma prost¹ i czyteln¹ sk³adniê. œcis³a integracja z platform¹ .NET
                                         pozwala programistom korzystaæ z oferowanych przez ni¹ klas i komponentów. Bardzo
                   ZAMÓW INFORMACJE      du¿ym atutem najnowszej wersji jêzyka C# jest to, i¿ wszyscy, którzy chc¹ poznaæ jego
                     O NOWOŒCIACH        mo¿liwoœci, mog¹ skorzystaæ z dostêpnego nieodp³atnie œrodowiska programistycznego
                                         Microsoft Visual Studio Express Edition.
                       ZAMÓW CENNIK      Dziêki ksi¹¿ce „C#. Æwiczenia. Wydanie II” poznasz podstawy jêzyka C# i nauczysz
                                         siê korzystaæ ze œrodowiska Visual Studio Express. Dowiesz siê, z jakich elementów
                                         sk³adaj¹ siê programy napisane w C# i na czym polega programowanie obiektowe.
                 CZYTELNIA               Przeczytasz o obs³udze wyj¹tków, projektowaniu okien dialogowych, przetwarzaniu
                                         danych i programowaniu sterowanym zdarzeniami. Wykonuj¹c kolejne æwiczenia,
          FRAGMENTY KSI¥¯EK ONLINE       poznasz zasady tworzenia aplikacji dla systemu Windows z wykorzystaniem
                                         komponentów platformy .NET.
                                             • Obs³uga œrodowiska Visual Studio Express
                                             • Typy danych
                                             • Operatory
                                             • Instrukcje warunkowe i pêtle
                                             • Programowanie obiektowe
                                             • Obs³uga b³êdów
                                             • Wyœwietlanie okien w systemie Windows
                                             • Korzystanie z komponentów platformy .NET
                                                                   Rozpocznij przygodê z programowaniem
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
            Wstęp                                      5
Rozdział 1. Pierwsza aplikacja                          7
            Język C#                                    7
            Jak właściwie nazywa się ten język?         8
            Środowisko uruchomieniowe                   8
            Narzędzia                                  10
            Najprostszy program                        10
            Kompilacja i uruchamianie                  12
            Visual C# Express                          13
            Dyrektywa using                            17
Rozdział 2. Zmienne i typy danych                      19
            Typy danych                                19
            Operatory                                  28
            Komentarze                                 41
Rozdział 3. Instrukcje                                 43
            Instrukcje warunkowe                       43
            Instrukcja goto                            50
            Pętle                                      54
            Wprowadzanie danych                        64
Rozdział 4. Programowanie obiektowe                    77
            Klasy                                      77
            Metody                                     79
            Konstruktory                               87
            Specyfikatory dostępu                      90
            Dziedziczenie                              96
4                            C#. Ćwiczenia

Rozdział 5. Tablice                                99
            Deklarowanie tablic                    99
            Inicjalizacja                         103
            Pętla foreach                         105
            Tablice wielowymiarowe                107

Rozdział 6. Wyjątki i obsługa błędów              113
            Obsługa błędów                        113
            Blok try...catch                      118
            Hierarchia wyjątków                   124
            Własne wyjątki                        126

Rozdział 7. Interfejsy                            131
            Prosty interfejs                      131
            Interfejsy w klasach potomnych        135
            Czy to interfejs?                     142

Rozdział 8. Pierwsze okno                         153
            Utworzenie okna                       153
            Wyświetlanie komunikatu               157
            Zdarzenie ApplicationExit             159

Rozdział 9. Delegacje i zdarzenia                 161
            Delegacje                             161
            Zdarzenia                             165

Rozdział 10. Komponenty                           171
            Etykiety (Label)                      171
            Przyciski (klasa Button)              177
            Pola tekstowe (TextBox)               180
            Pola wyboru (CheckBox, RadioButton)   185
            Listy rozwijalne (ComboBox)           189
            Listy zwykłe (ListBox)                192
            Menu                                  195
5
                                                        Tablice
        Tablice to jedne z podstawowych struktur danych i znane są
        z pewnością nawet początkującym programistom. Przypo-
        mnijmy jednak na wstępie podstawowe wiadomości i pojęcia
z nimi związane. Tablica to stosunkowo prosta struktura danych po-
zwalająca na przechowanie uporządkowanego zbioru elementów da-
nego typu. Składa się z ponumerowanych kolejno komórek, a każda
taka komórka może przechowywać pewną porcję danych.
Jakiego rodzaju będą to dane, określa typ tablicy. Jeśli zatem zadekla-
rujemy tablicę typu całkowitoliczbowego (int), będzie mogła ona za-
wierać liczby całkowite, a jeśli będzie to typ znakowy (char), poszcze-
gólne komórki będą mogły zawierać różne znaki.




Deklarowanie tablic
Przed skorzystaniem z tablicy należy zadeklarować zmienną tablico-
wą, a ponieważ w C# tablice są obiektami, należy również utworzyć
odpowiedni obiekt. Schematycznie robimy to w sposób następujący:
    typ_tablicy[] nazwa_tablicy = new typ_tablicy[liczba_elementów];
100                               C#. Ćwiczenia

    Oczywiście deklaracji zmiennej tablicowej oraz przypisania jej nowo
    utworzonego elementu można dokonać w osobnych instrukcjach, np.
    pisząc:
            typ_tablicy[] nazwa_tablicy;
            nazwa_tablicy = new typ_tablicy[liczba_elementów];

    Pisząc zatem:
            int tablica[];

    zadeklarujemy odniesienie do tablicy, która będzie zawierała elementy
    typu int, czyli 32-bitowe liczby całkowite. Samej tablicy jednak jesz-
    cze wcale nie ma. Przekonamy się o tym, wykonując kolejne ćwiczenie.

Ć W I C Z E N I E

     5.1            Deklaracja zmiennej tablicowej

    Zadeklaruj tablicę elementów typu całkowitego. Przypisz zerowemu
    elementowi tablicy dowolną wartość. Spróbuj wyświetlić zawartość
    tego elementu na ekranie.
            using System;

            public
            class main
            {
              public static void Main()
              {
                int[] tablica;
                tablica[0] = 11;
                Console.WriteLine("Zerowy element tablicy to: " + tablica[0]);
              }
            }

    Już przy próbie kompilacji kompilator uprzejmie poinformuje nas, że
    chcemy odwołać się do zmiennej, która prawdopodobnie nie została
    zainicjalizowana, tak jak jest to widoczne na rysunku 5.1.




       Rysunek 5.1. Próba użycia niezainicjowanej zmiennej tablicowej
Rozdział 5. • Tablice                         101

    Skoro więc wystąpił błąd, należy go natychmiast naprawić.

Ć W I C Z E N I E

     5.2            Utworzenie tablicy

    Zadeklaruj i zainicjalizuj tablicę elementów typu całkowitego. Przy-
    pisz zerowemu elementowi tablicy dowolną wartość. Spróbuj wyświe-
    tlić 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]);
              }
            }

    Wyrażenie new tablica[1] oznacza stworzenie nowej, jednowymiaro-
    wej, jednoelementowej tablicy liczb typu int. Ta nowa tablica została
    przypisana zmiennej odnośnikowej o nazwie tablica. Od tej chwili
    można odwoływać się do kolejnych elementów tej tablicy, pisząc:
            tablica[index]


    Warto przy tym zauważyć, że elementy tablicy numerowane są od ze-
    ra, a nie od 1. Oznacza to, że pierwszy element tablicy 10-elementowej
    ma indeks 0, a ostatni 9 (nie 10!). Co się stanie, jeśli nieprzyzwycza-
    jeni do takiego sposobu indeksowania odwołamy się do indeksu o nu-
    merze 10?
Ć W I C Z E N I E

     5.3            Odwołanie do nieistniejącego elementu tablicy

    Zadeklaruj i zainicjuj tablicę dziesięcioelementową. Spróbuj przypisać
    elementowi o indeksie 10 dowolną liczbę całkowitą.
            using System;

            public
            class main
            {
102                               C#. Ćwiczenia

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

Powyższy kod daje się bez problemu skompilować, jednak przy próbie
uruchomienia takiego programu na ekranie zobaczymy okno widocz-
ne na rysunku 5.2 informujące o wystąpieniu błędu. Chwilę później
(po kliknięciu Don’t send) ujrzymy na konsoli komunikat podający
konkretne informacje o typie błędu oraz miejscu programu, w którym
on wystąpił (rysunek 5.3).

 Rysunek 5.2.
 Próba
 odwołania się
 do nieistniejącego
 elementu tablicy
 powoduje
 błąd aplikacji




 Rysunek 5.3. Systemowa informacja o błędzie

Wbrew pozorom nie stało się jednak nic strasznego. Program co praw-
da nie działa, ale błąd został wychwycony przez środowisko urucho-
mieniowe. Konkretnie mówiąc, został wygenerowany tak zwany wyją-
tek i aplikacja zakończyła działanie. Taki wyjątek możemy jednak
przechwycić i tym samym zapobiec niekontrolowanemu zakończeniu
wykonywania kodu. To jednak odrębny temat, którym zajmiemy się
w rozdziale 6. Ważne jest to, że próba odwołania się do nieistniejącego
elementu została wykryta i to odwołanie tak naprawdę nie wystąpi-
ło! Program nie naruszył więc obszaru pamięci niezarezerwowanej
dla niego.
Rozdział 5. • Tablice                      103


    Inicjalizacja
    Tablice można zainicjalizować już w momencie ich tworzenia. Dane,
    które mają się znaleźć w poszczególnych komórkach, podajemy w na-
    wiasach klamrowych po deklaracji tablicy. Schematycznie wygląda to
    następująco:
            typ[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN}

    Jeśli zatem chcielibyśmy utworzyć pięcioelementową tablicę liczb cał-
    kowitych i od razu zainicjować ją liczbami od 1 do 5, możemy 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.4            Inicjalizacja tablicy

    Zadeklaruj tablicę pięcioelementową typu int i zainicjuj ją liczbami
    od 1 do 5. Zawartość tablicy wyświetl na ekranie.
            using System;

            public
            class main
            {
              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 działania kodu z powyższego ćwiczenia widoczny jest na ry-
    sunku 5.4. Nie jest niespodzianką, że wyświetlone zostały kolejne licz-
    by od 1 do 5.
104                               C#. Ćwiczenia

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




    Kiedy inicjujemy tworzoną tablicę z góry znaną liczbą elementów, mo-
    żemy pominąć fragment kodu związany z tworzeniem obiektu, a kom-
    pilator doda go za nas. Zamiast pisać:
            typ[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN}

    możemy równie dobrze użyć konstrukcji:
            typ[] nazwa = {dana1, dana2,...,danaN}

    Oba sposoby są sobie równoważne i możemy używać tego, który jest
    dla nas wygodniejszy.

Ć W I C Z E N I E

     5.5            Bezpośrednia inicjalizacja tablicy

    Zadeklaruj tablicę pięcioelementową typu int i zainicjuj ją liczbami
    od 1 do 5. Użyj drugiego z poznanych sposobów inicjalizacji. Zawartość
    tablicy wyświetl na ekranie.
            using System;

            public
            class main
            {
              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]);
                }
              }
            }
Rozdział 5. • Tablice               105


    Pętla foreach
    Dotychczas poznaliśmy trzy rodzaje pętli: for, while i do…while. W przy-
    padku tablic (jak również kolekcji, którymi się w niniejszej publikacji
    nie zajmujemy) możemy również skorzystać z pętli typu foreach. Jest
    ona bardzo wygodna, gdyż umożliwia prostą iterację po wszystkich
    elementach tablicy; nie musimy też wprowadzać dodatkowej zmien-
    nej iteracyjnej. Pętla foreach ma postać następującą:
            foreach(typ identyfikator in wyrażenie)
            {
              //instrukcje
            }

    Konkretnie, jeżeli mamy tablicę o nazwie tab zawierającą liczby ty-
    pu int, możemy zastosować konstrukcję:
            foreach(int i in tab)
            {
              //instrukcje
            }

    W tym wypadku w kolejnych przebiegach pętli pod i będą podstawia-
    ne kolejne elementy tablicy.

Ć W I C Z E N I E

     5.6            Wykorzystanie pętli foreach
                    do wyświetlenia zawartości tablicy

    Wykorzystaj pętlę foreach do wyświetlenia wszystkich elementów ta-
    blicy przechowującej liczby całkowite.
            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            Zliczanie wartości w pętli foreach

    Wykorzystaj pętlę foreach do sprawdzenia, ile jest liczb parzystych,
    a ile nieparzystych w tablicy z elementami typu int.
            using System;

            public
            class main
            {
              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("Tablica zawiera {0} liczb parzystych i {1} liczb
                nieparzystych", parzyste, nieparzyste);
              }
            }

    Tym razem przy wypełnianiu tablicy danymi korzystamy z obiektu
    klasy Random, która udostępnia wartości pseudolosowe. Dokładniej mó-
    wiąc, kolejną pseudolosową liczbę całkowitą uzyskujemy, wywołując
    metodę Next tejże klasy. Do stwierdzenia, czy kolejna komórka tabli-
    cy zawiera liczbę parzystą czy nieparzystą, wykorzystujemy operator
    dzielenia modulo. Oczywiście liczba parzysta modulo dwa daje wynik
    zero i taki też warunek sprawdzamy w instrukcji if.
Rozdział 5. • Tablice                          107


Tablice wielowymiarowe
Tablice nie muszą być jednowymiarowe, jak w dotychczas prezento-
wanych przykładach. Tych wymiarów może być więcej, na przykład
dwa — otrzymujemy wtedy strukturę widoczną na rysunku 5.5, czyli
rodzaj tabeli o zadanej ilości wierszy i kolumn. W tym przypadku ma-
my dwa wiersze oraz cztery kolumny. Oczywiście w takiej sytuacji,
aby jednoznacznie wyznaczyć komórkę, trzeba podać dwie liczby.

 Rysunek 5.5.
 Przykład tablicy
 dwuwymiarowej




Musimy się teraz dowiedzieć, w jaki sposób zadeklarować tego typu
tablicę. Zacznijmy od deklaracji samej zmiennej tablicowej. W przy-
padku tablicy dwuwymiarowej ma ona postać:
    typ_tablicy[,] nazwa_tablicy;

Samą tablicę tworzymy natomiast za pomocą instrukcji:
    new int[wiersze, kolumny];

Przykładowo, dwuwymiarową tablicę widoczną na rysunku 5.5 utwo-
rzymy następująco (zakładając, że ma ona przechowywać liczby cał-
kowite):
    int[,] tablica = new tablica[2, 5];

Inicjalizacja samych komórek może odbywać się, podobnie jak w przy-
padku tablic jednowymiarowych, już w trakcie deklaracji:
    typ_tablicy[,] nazwa_tablicy = {(dana1, dana2), (dana3, dana4),...,
    (danaM, danaN)};

Zobaczmy, jak wygląda to na konkretnym przykładzie.
108                                C#. Ćwiczenia

Ć W I C Z E N I E

     5.8            Tworzenie tablicy dwuwymiarowej

    Zadeklaruj tablicę dwuwymiarową typu int o dwóch wierszach i pię-
    ciu kolumnach i zainicjuj ją kolejnymi liczbami całkowitymi. Zawar-
    tość tablicy wyświetl 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]);
                    }
                }
              }
            }

    Jak widać, do wypełniania tablicy używamy dwóch zagnieżdżonych
    pętli for. Pierwsza, zewnętrzna, odpowiada za iterację po indeksach
    wierszy tablicy, druga za iterację po indeksach kolumn. Zmienna
    counter służy nam jako licznik i jest w każdym przebiegu zwiększana
    o jeden, dzięki czemu w kolejnych komórkach uzyskujemy kolejne
    liczby całkowite. Po wypełnieniu danymi nasza tablica ma postać wi-
    doczną na rysunku 5.6.

       Rysunek 5.6.
       Tablica
       z ćwiczenia 5.8
       po wypełnianiu
       danymi
Rozdział 5. • Tablice                   109

Do wyświetlenia danych używamy analogicznej konstrukcji z dwoma
zagnieżdżonymi pętlami. Po uruchomieniu kodu na ekranie zobaczmy
widok przedstawiony na rysunku 5.7. Jak widać, dane te zgodne są ze
strukturą przedstawioną na rysunku 5.6.

 Rysunek 5.7.
 Wynik działania
 programu
 z ćwiczenia 5.6




Tablica dwuwymiarowa nie musi mieć wcale, tak jak w poprzednich
przykładach, kształtu prostokątnego, tzn. takiego, gdzie liczba komó-
rek w każdym wierszu i każdej kolumnie jest stała. Równie dobrze
możemy stworzyć tablicę o kształcie trójkąta (rysunek 5.8.A) lub zu-
pełnie nieregularną (rysunek 5.8.B). Przy tworzeniu struktur nieregu-
larnych musimy się jednak nieco więcej napracować, gdyż każdy wiersz
zazwyczaj trzeba tworzyć ręcznie, pisząc odpowiednią linię kodu.

 Rysunek 5.8.
 Przykłady
 bardziej
 skompliko-
 wanych tablic
 dwuwymia-
 rowych




Postarajmy się utworzyć strukturę przedstawioną na rysunku 5.8.B.
Zauważmy, że każdy wiersz można traktować jako oddzielną tablicę
jednowymiarową. Zatem tak naprawdę jest to jednowymiarowa ta-
blica, której poszczególne komórki zawierają inne jednowymiarowe
110                               C#. Ćwiczenia

    tablice. Inaczej mówiąc, jest to tablica tablic. Wystarczy zatem zadekla-
    rować zmienną tablicową o odpowiednim typie, a następnie poszcze-
    gólnym jej elementom przypisać nowo utworzone tablice jednowymia-
    rowe o zadanej długości. To całe rozwiązanie problemu.
    Pytanie brzmi: co to znaczy „odpowiedni typ tablicy”. Pomyślmy — je-
    śli w tablicy (jednowymiarowej) chcieliśmy przechowywać liczby cał-
    kowite typu int, to typem tej tablicy było int. Pisaliśmy wtedy:
            int[] tablica;

    Jeśli zatem typem nie jest int, ale tablica typu int, którą oznaczamy
    jako int[], należy napisać:
            int[][] tablica;

    Z kolei utworzenie czteroelementowej tablicy zawierającej tablice
    z liczbami całkowitymi wymaga wpisu:
            new tablica[4][];

    Te wiadomości powinny nam wystarczyć do wykonania kolejnego
    ćwiczenia.

Ć W I C Z E N I E

     5.9            Budowa tablicy nieregularnej

    Napisz kod tworzący strukturę tablicy widocznej na rysunku 5.8.B
    przechowującej liczby całkowite. W kolejnych komórkach powinny
    znaleźć się kolejne liczby całkowite, zaczynając od 1.
            using System;

            public
            class main
            {
              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};
              }
            }
Rozdział 5. • Tablice                 111

    W tej chwili nasza struktura została wypełniona danymi, tak jak wi-
    doczne jest to na rysunku 5.9. Jak sobie jednak poradzić z jej wyświe-
    tleniem na ekranie. Oczywiście możemy zrobić to ręcznie, pisząc kod
    oddzielnie dla każdego wiersza. W przypadku tak małej tablicy nie
    będzie to problemem. Czy jednak tej czynności nie da się zautoma-
    tyzować? Najwygodniej byłoby przecież wyprowadzać dane na ekran
    w zagnieżdżonej pętli, tak jak w przypadku ćwiczenia 5.8.
       Rysunek 5.9.
       Tablica
       z ćwiczenia 5.9
       wypełniona
       przykładowymi
       danymi




    Okazuje się, że jest to jak najbardziej możliwe, a z nieregularnością na-
    szej tablicy poradzimy sobie w bardzo prosty sposób. Każda tablica jest
    obiektem; posiada właściwość Length, dzięki czemu możemy sprawdzić
    jej długość. To całkowicie rozwiązuje problem wyświetlenia danych
    nawet z tak nieregularnej struktury jak obecnie opisywana.
Ć W I C Z E N I E

    5.10            Wyświetlanie danych z tablicy nieregularnej

    Zmodyfikuj kod z ćwiczenia 5.9 w taki sposób, aby dane zawarte
    w tablicy zostały wyświetlone na ekranie (rysunek 5.10). W tym celu
    użyj zagnieżdżonych pętli for.
            using System;

            public
            class main
            {
              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};
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.
 Wyświetlenie
 danych
 z nieregularnej
 tablicy
 w ćwiczeniu 5.10

More Related Content

Viewers also liked

Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IITurbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyWydawnictwo Helion
 
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyTworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyWydawnictwo Helion
 
Programowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikProgramowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikWydawnictwo Helion
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikWydawnictwo Helion
 
Photoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuPhotoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuWydawnictwo Helion
 
Tworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikTworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikWydawnictwo Helion
 
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneCorel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneWydawnictwo Helion
 
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIMS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIWydawnictwo Helion
 

Viewers also liked (10)

Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IITurbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyTworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
 
Programowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikProgramowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznik
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
 
SQL. Receptury
SQL. RecepturySQL. Receptury
SQL. Receptury
 
Photoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuPhotoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazu
 
Tworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikTworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznik
 
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneCorel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
 
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIMS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
 

Similar to C#. Ćwiczenia. Wydanie II

Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wydawnictwo Helion
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 
JavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIJavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyWydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 
Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Developmentbartlomiej.szafko
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyWydawnictwo Helion
 
Pierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikPierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikCezary Walenciuk
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieWydawnictwo Helion
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
Windows Vista PL. Ćwiczenia praktyczne
Windows Vista PL. Ćwiczenia praktyczneWindows Vista PL. Ćwiczenia praktyczne
Windows Vista PL. Ćwiczenia praktyczneWydawnictwo Helion
 

Similar to C#. Ćwiczenia. Wydanie II (20)

C#. Programowanie
C#. ProgramowanieC#. Programowanie
C#. Programowanie
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 
C# 2005. Wprowadzenie
C# 2005. WprowadzenieC# 2005. Wprowadzenie
C# 2005. Wprowadzenie
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
JavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIJavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie II
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalisty
 
C
C  C
C
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 
Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Development
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. Przykłady
 
Pierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikPierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencik
 
Slackware Linux. Ćwiczenia
Slackware Linux. ĆwiczeniaSlackware Linux. Ćwiczenia
Slackware Linux. Ćwiczenia
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
Windows Vista PL. Ćwiczenia praktyczne
Windows Vista PL. Ćwiczenia praktyczneWindows Vista PL. Ćwiczenia praktyczne
Windows Vista PL. Ćwiczenia praktyczne
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

C#. Ćwiczenia. Wydanie II

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI C#. Æwiczenia. Wydanie II KATALOG KSI¥¯EK Autor: Marcin Lis ISBN: 83-246-0595-9 KATALOG ONLINE Format: A5, stron: 216 Przyk³ady na ftp: 65 kB ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA C# to jeden z najm³odszych jêzyków programowania. Opracowany w firmie Microsoft jêzyk jest po³¹czeniem najlepszych cech C++ i Javy. Stanowi œwietne narzêdzie do tworzenia aplikacji dla systemu Windows i urz¹dzeñ mobilnych. C# jest stosunkowo CENNIK I INFORMACJE ³atwy do opanowania, ma prost¹ i czyteln¹ sk³adniê. œcis³a integracja z platform¹ .NET pozwala programistom korzystaæ z oferowanych przez ni¹ klas i komponentów. Bardzo ZAMÓW INFORMACJE du¿ym atutem najnowszej wersji jêzyka C# jest to, i¿ wszyscy, którzy chc¹ poznaæ jego O NOWOŒCIACH mo¿liwoœci, mog¹ skorzystaæ z dostêpnego nieodp³atnie œrodowiska programistycznego Microsoft Visual Studio Express Edition. ZAMÓW CENNIK Dziêki ksi¹¿ce „C#. Æwiczenia. Wydanie II” poznasz podstawy jêzyka C# i nauczysz siê korzystaæ ze œrodowiska Visual Studio Express. Dowiesz siê, z jakich elementów sk³adaj¹ siê programy napisane w C# i na czym polega programowanie obiektowe. CZYTELNIA Przeczytasz o obs³udze wyj¹tków, projektowaniu okien dialogowych, przetwarzaniu danych i programowaniu sterowanym zdarzeniami. Wykonuj¹c kolejne æwiczenia, FRAGMENTY KSI¥¯EK ONLINE poznasz zasady tworzenia aplikacji dla systemu Windows z wykorzystaniem komponentów platformy .NET. • Obs³uga œrodowiska Visual Studio Express • Typy danych • Operatory • Instrukcje warunkowe i pêtle • Programowanie obiektowe • Obs³uga b³êdów • Wyœwietlanie okien w systemie Windows • Korzystanie z komponentów platformy .NET Rozpocznij przygodê z programowaniem Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wstęp 5 Rozdział 1. Pierwsza aplikacja 7 Język C# 7 Jak właściwie nazywa się ten język? 8 Środowisko uruchomieniowe 8 Narzędzia 10 Najprostszy program 10 Kompilacja i uruchamianie 12 Visual C# Express 13 Dyrektywa using 17 Rozdział 2. Zmienne i typy danych 19 Typy danych 19 Operatory 28 Komentarze 41 Rozdział 3. Instrukcje 43 Instrukcje warunkowe 43 Instrukcja goto 50 Pętle 54 Wprowadzanie danych 64 Rozdział 4. Programowanie obiektowe 77 Klasy 77 Metody 79 Konstruktory 87 Specyfikatory dostępu 90 Dziedziczenie 96
  • 3. 4 C#. Ćwiczenia Rozdział 5. Tablice 99 Deklarowanie tablic 99 Inicjalizacja 103 Pętla foreach 105 Tablice wielowymiarowe 107 Rozdział 6. Wyjątki i obsługa błędów 113 Obsługa błędów 113 Blok try...catch 118 Hierarchia wyjątków 124 Własne wyjątki 126 Rozdział 7. Interfejsy 131 Prosty interfejs 131 Interfejsy w klasach potomnych 135 Czy to interfejs? 142 Rozdział 8. Pierwsze okno 153 Utworzenie okna 153 Wyświetlanie komunikatu 157 Zdarzenie ApplicationExit 159 Rozdział 9. Delegacje i zdarzenia 161 Delegacje 161 Zdarzenia 165 Rozdział 10. Komponenty 171 Etykiety (Label) 171 Przyciski (klasa Button) 177 Pola tekstowe (TextBox) 180 Pola wyboru (CheckBox, RadioButton) 185 Listy rozwijalne (ComboBox) 189 Listy zwykłe (ListBox) 192 Menu 195
  • 4. 5 Tablice Tablice to jedne z podstawowych struktur danych i znane są z pewnością nawet początkującym programistom. Przypo- mnijmy jednak na wstępie podstawowe wiadomości i pojęcia z nimi związane. Tablica to stosunkowo prosta struktura danych po- zwalająca na przechowanie uporządkowanego zbioru elementów da- nego typu. Składa się z ponumerowanych kolejno komórek, a każda taka komórka może przechowywać pewną porcję danych. Jakiego rodzaju będą to dane, określa typ tablicy. Jeśli zatem zadekla- rujemy tablicę typu całkowitoliczbowego (int), będzie mogła ona za- wierać liczby całkowite, a jeśli będzie to typ znakowy (char), poszcze- gólne komórki będą mogły zawierać różne znaki. Deklarowanie tablic Przed skorzystaniem z tablicy należy zadeklarować zmienną tablico- wą, a ponieważ w C# tablice są obiektami, należy również utworzyć odpowiedni obiekt. Schematycznie robimy to w sposób następujący: typ_tablicy[] nazwa_tablicy = new typ_tablicy[liczba_elementów];
  • 5. 100 C#. Ćwiczenia Oczywiście deklaracji zmiennej tablicowej oraz przypisania jej nowo utworzonego elementu można dokonać w osobnych instrukcjach, np. pisząc: typ_tablicy[] nazwa_tablicy; nazwa_tablicy = new typ_tablicy[liczba_elementów]; Pisząc zatem: int tablica[]; zadeklarujemy odniesienie do tablicy, która będzie zawierała elementy typu int, czyli 32-bitowe liczby całkowite. Samej tablicy jednak jesz- cze wcale nie ma. Przekonamy się o tym, wykonując kolejne ćwiczenie. Ć W I C Z E N I E 5.1 Deklaracja zmiennej tablicowej Zadeklaruj tablicę elementów typu całkowitego. Przypisz zerowemu elementowi tablicy dowolną wartość. Spróbuj wyświetlić zawartość tego elementu na ekranie. using System; public class main { public static void Main() { int[] tablica; tablica[0] = 11; Console.WriteLine("Zerowy element tablicy to: " + tablica[0]); } } Już przy próbie kompilacji kompilator uprzejmie poinformuje nas, że chcemy odwołać się do zmiennej, która prawdopodobnie nie została zainicjalizowana, tak jak jest to widoczne na rysunku 5.1. Rysunek 5.1. Próba użycia niezainicjowanej zmiennej tablicowej
  • 6. Rozdział 5. • Tablice 101 Skoro więc wystąpił błąd, należy go natychmiast naprawić. Ć W I C Z E N I E 5.2 Utworzenie tablicy Zadeklaruj i zainicjalizuj tablicę elementów typu całkowitego. Przy- pisz zerowemu elementowi tablicy dowolną wartość. Spróbuj wyświe- tlić 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]); } } Wyrażenie new tablica[1] oznacza stworzenie nowej, jednowymiaro- wej, jednoelementowej tablicy liczb typu int. Ta nowa tablica została przypisana zmiennej odnośnikowej o nazwie tablica. Od tej chwili można odwoływać się do kolejnych elementów tej tablicy, pisząc: tablica[index] Warto przy tym zauważyć, że elementy tablicy numerowane są od ze- ra, a nie od 1. Oznacza to, że pierwszy element tablicy 10-elementowej ma indeks 0, a ostatni 9 (nie 10!). Co się stanie, jeśli nieprzyzwycza- jeni do takiego sposobu indeksowania odwołamy się do indeksu o nu- merze 10? Ć W I C Z E N I E 5.3 Odwołanie do nieistniejącego elementu tablicy Zadeklaruj i zainicjuj tablicę dziesięcioelementową. Spróbuj przypisać elementowi o indeksie 10 dowolną liczbę całkowitą. using System; public class main {
  • 7. 102 C#. Ćwiczenia public static void Main() { int[] tablica = new int[10]; tablica[10] = 1; Console.WriteLine("Element o indeksie 10 to: " + tablica[10]); } } Powyższy kod daje się bez problemu skompilować, jednak przy próbie uruchomienia takiego programu na ekranie zobaczymy okno widocz- ne na rysunku 5.2 informujące o wystąpieniu błędu. Chwilę później (po kliknięciu Don’t send) ujrzymy na konsoli komunikat podający konkretne informacje o typie błędu oraz miejscu programu, w którym on wystąpił (rysunek 5.3). Rysunek 5.2. Próba odwołania się do nieistniejącego elementu tablicy powoduje błąd aplikacji Rysunek 5.3. Systemowa informacja o błędzie Wbrew pozorom nie stało się jednak nic strasznego. Program co praw- da nie działa, ale błąd został wychwycony przez środowisko urucho- mieniowe. Konkretnie mówiąc, został wygenerowany tak zwany wyją- tek i aplikacja zakończyła działanie. Taki wyjątek możemy jednak przechwycić i tym samym zapobiec niekontrolowanemu zakończeniu wykonywania kodu. To jednak odrębny temat, którym zajmiemy się w rozdziale 6. Ważne jest to, że próba odwołania się do nieistniejącego elementu została wykryta i to odwołanie tak naprawdę nie wystąpi- ło! Program nie naruszył więc obszaru pamięci niezarezerwowanej dla niego.
  • 8. Rozdział 5. • Tablice 103 Inicjalizacja Tablice można zainicjalizować już w momencie ich tworzenia. Dane, które mają się znaleźć w poszczególnych komórkach, podajemy w na- wiasach klamrowych po deklaracji tablicy. Schematycznie wygląda to następująco: typ[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN} Jeśli zatem chcielibyśmy utworzyć pięcioelementową tablicę liczb cał- kowitych i od razu zainicjować ją liczbami od 1 do 5, możemy 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.4 Inicjalizacja tablicy Zadeklaruj tablicę pięcioelementową typu int i zainicjuj ją liczbami od 1 do 5. Zawartość tablicy wyświetl na ekranie. using System; public class main { 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 działania kodu z powyższego ćwiczenia widoczny jest na ry- sunku 5.4. Nie jest niespodzianką, że wyświetlone zostały kolejne licz- by od 1 do 5.
  • 9. 104 C#. Ćwiczenia Rysunek 5.4. Zawartość kolejnych komórek tablicy utworzonej w ćwiczeniu 5.4 Kiedy inicjujemy tworzoną tablicę z góry znaną liczbą elementów, mo- żemy pominąć fragment kodu związany z tworzeniem obiektu, a kom- pilator doda go za nas. Zamiast pisać: typ[] nazwa = new typ [liczba_elementów]{dana1, dana2,...,danaN} możemy równie dobrze użyć konstrukcji: typ[] nazwa = {dana1, dana2,...,danaN} Oba sposoby są sobie równoważne i możemy używać tego, który jest dla nas wygodniejszy. Ć W I C Z E N I E 5.5 Bezpośrednia inicjalizacja tablicy Zadeklaruj tablicę pięcioelementową typu int i zainicjuj ją liczbami od 1 do 5. Użyj drugiego z poznanych sposobów inicjalizacji. Zawartość tablicy wyświetl na ekranie. using System; public class main { 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]); } } }
  • 10. Rozdział 5. • Tablice 105 Pętla foreach Dotychczas poznaliśmy trzy rodzaje pętli: for, while i do…while. W przy- padku tablic (jak również kolekcji, którymi się w niniejszej publikacji nie zajmujemy) możemy również skorzystać z pętli typu foreach. Jest ona bardzo wygodna, gdyż umożliwia prostą iterację po wszystkich elementach tablicy; nie musimy też wprowadzać dodatkowej zmien- nej iteracyjnej. Pętla foreach ma postać następującą: foreach(typ identyfikator in wyrażenie) { //instrukcje } Konkretnie, jeżeli mamy tablicę o nazwie tab zawierającą liczby ty- pu int, możemy zastosować konstrukcję: foreach(int i in tab) { //instrukcje } W tym wypadku w kolejnych przebiegach pętli pod i będą podstawia- ne kolejne elementy tablicy. Ć W I C Z E N I E 5.6 Wykorzystanie pętli foreach do wyświetlenia zawartości tablicy Wykorzystaj pętlę foreach do wyświetlenia wszystkich elementów ta- blicy przechowującej liczby całkowite. using System; public class main { public static void Main() { int[] tab = new int[10]; for(int i = 0; i < 10; i++){ tab[i] = i;
  • 11. 106 C#. Ćwiczenia } foreach(int i in tab){ Console.WriteLine(i); } } } Ć W I C Z E N I E 5.7 Zliczanie wartości w pętli foreach Wykorzystaj pętlę foreach do sprawdzenia, ile jest liczb parzystych, a ile nieparzystych w tablicy z elementami typu int. using System; public class main { 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("Tablica zawiera {0} liczb parzystych i {1} liczb nieparzystych", parzyste, nieparzyste); } } Tym razem przy wypełnianiu tablicy danymi korzystamy z obiektu klasy Random, która udostępnia wartości pseudolosowe. Dokładniej mó- wiąc, kolejną pseudolosową liczbę całkowitą uzyskujemy, wywołując metodę Next tejże klasy. Do stwierdzenia, czy kolejna komórka tabli- cy zawiera liczbę parzystą czy nieparzystą, wykorzystujemy operator dzielenia modulo. Oczywiście liczba parzysta modulo dwa daje wynik zero i taki też warunek sprawdzamy w instrukcji if.
  • 12. Rozdział 5. • Tablice 107 Tablice wielowymiarowe Tablice nie muszą być jednowymiarowe, jak w dotychczas prezento- wanych przykładach. Tych wymiarów może być więcej, na przykład dwa — otrzymujemy wtedy strukturę widoczną na rysunku 5.5, czyli rodzaj tabeli o zadanej ilości wierszy i kolumn. W tym przypadku ma- my dwa wiersze oraz cztery kolumny. Oczywiście w takiej sytuacji, aby jednoznacznie wyznaczyć komórkę, trzeba podać dwie liczby. Rysunek 5.5. Przykład tablicy dwuwymiarowej Musimy się teraz dowiedzieć, w jaki sposób zadeklarować tego typu tablicę. Zacznijmy od deklaracji samej zmiennej tablicowej. W przy- padku tablicy dwuwymiarowej ma ona postać: typ_tablicy[,] nazwa_tablicy; Samą tablicę tworzymy natomiast za pomocą instrukcji: new int[wiersze, kolumny]; Przykładowo, dwuwymiarową tablicę widoczną na rysunku 5.5 utwo- rzymy następująco (zakładając, że ma ona przechowywać liczby cał- kowite): int[,] tablica = new tablica[2, 5]; Inicjalizacja samych komórek może odbywać się, podobnie jak w przy- padku tablic jednowymiarowych, już w trakcie deklaracji: typ_tablicy[,] nazwa_tablicy = {(dana1, dana2), (dana3, dana4),..., (danaM, danaN)}; Zobaczmy, jak wygląda to na konkretnym przykładzie.
  • 13. 108 C#. Ćwiczenia Ć W I C Z E N I E 5.8 Tworzenie tablicy dwuwymiarowej Zadeklaruj tablicę dwuwymiarową typu int o dwóch wierszach i pię- ciu kolumnach i zainicjuj ją kolejnymi liczbami całkowitymi. Zawar- tość tablicy wyświetl 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]); } } } } Jak widać, do wypełniania tablicy używamy dwóch zagnieżdżonych pętli for. Pierwsza, zewnętrzna, odpowiada za iterację po indeksach wierszy tablicy, druga za iterację po indeksach kolumn. Zmienna counter służy nam jako licznik i jest w każdym przebiegu zwiększana o jeden, dzięki czemu w kolejnych komórkach uzyskujemy kolejne liczby całkowite. Po wypełnieniu danymi nasza tablica ma postać wi- doczną na rysunku 5.6. Rysunek 5.6. Tablica z ćwiczenia 5.8 po wypełnianiu danymi
  • 14. Rozdział 5. • Tablice 109 Do wyświetlenia danych używamy analogicznej konstrukcji z dwoma zagnieżdżonymi pętlami. Po uruchomieniu kodu na ekranie zobaczmy widok przedstawiony na rysunku 5.7. Jak widać, dane te zgodne są ze strukturą przedstawioną na rysunku 5.6. Rysunek 5.7. Wynik działania programu z ćwiczenia 5.6 Tablica dwuwymiarowa nie musi mieć wcale, tak jak w poprzednich przykładach, kształtu prostokątnego, tzn. takiego, gdzie liczba komó- rek w każdym wierszu i każdej kolumnie jest stała. Równie dobrze możemy stworzyć tablicę o kształcie trójkąta (rysunek 5.8.A) lub zu- pełnie nieregularną (rysunek 5.8.B). Przy tworzeniu struktur nieregu- larnych musimy się jednak nieco więcej napracować, gdyż każdy wiersz zazwyczaj trzeba tworzyć ręcznie, pisząc odpowiednią linię kodu. Rysunek 5.8. Przykłady bardziej skompliko- wanych tablic dwuwymia- rowych Postarajmy się utworzyć strukturę przedstawioną na rysunku 5.8.B. Zauważmy, że każdy wiersz można traktować jako oddzielną tablicę jednowymiarową. Zatem tak naprawdę jest to jednowymiarowa ta- blica, której poszczególne komórki zawierają inne jednowymiarowe
  • 15. 110 C#. Ćwiczenia tablice. Inaczej mówiąc, jest to tablica tablic. Wystarczy zatem zadekla- rować zmienną tablicową o odpowiednim typie, a następnie poszcze- gólnym jej elementom przypisać nowo utworzone tablice jednowymia- rowe o zadanej długości. To całe rozwiązanie problemu. Pytanie brzmi: co to znaczy „odpowiedni typ tablicy”. Pomyślmy — je- śli w tablicy (jednowymiarowej) chcieliśmy przechowywać liczby cał- kowite typu int, to typem tej tablicy było int. Pisaliśmy wtedy: int[] tablica; Jeśli zatem typem nie jest int, ale tablica typu int, którą oznaczamy jako int[], należy napisać: int[][] tablica; Z kolei utworzenie czteroelementowej tablicy zawierającej tablice z liczbami całkowitymi wymaga wpisu: new tablica[4][]; Te wiadomości powinny nam wystarczyć do wykonania kolejnego ćwiczenia. Ć W I C Z E N I E 5.9 Budowa tablicy nieregularnej Napisz kod tworzący strukturę tablicy widocznej na rysunku 5.8.B przechowującej liczby całkowite. W kolejnych komórkach powinny znaleźć się kolejne liczby całkowite, zaczynając od 1. using System; public class main { 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}; } }
  • 16. Rozdział 5. • Tablice 111 W tej chwili nasza struktura została wypełniona danymi, tak jak wi- doczne jest to na rysunku 5.9. Jak sobie jednak poradzić z jej wyświe- tleniem na ekranie. Oczywiście możemy zrobić to ręcznie, pisząc kod oddzielnie dla każdego wiersza. W przypadku tak małej tablicy nie będzie to problemem. Czy jednak tej czynności nie da się zautoma- tyzować? Najwygodniej byłoby przecież wyprowadzać dane na ekran w zagnieżdżonej pętli, tak jak w przypadku ćwiczenia 5.8. Rysunek 5.9. Tablica z ćwiczenia 5.9 wypełniona przykładowymi danymi Okazuje się, że jest to jak najbardziej możliwe, a z nieregularnością na- szej tablicy poradzimy sobie w bardzo prosty sposób. Każda tablica jest obiektem; posiada właściwość Length, dzięki czemu możemy sprawdzić jej długość. To całkowicie rozwiązuje problem wyświetlenia danych nawet z tak nieregularnej struktury jak obecnie opisywana. Ć W I C Z E N I E 5.10 Wyświetlanie danych z tablicy nieregularnej Zmodyfikuj kod z ćwiczenia 5.9 w taki sposób, aby dane zawarte w tablicy zostały wyświetlone na ekranie (rysunek 5.10). W tym celu użyj zagnieżdżonych pętli for. using System; public class main { 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};
  • 17. 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. Wyświetlenie danych z nieregularnej tablicy w ćwiczeniu 5.10