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

Podobne dokumenty
C#. Æwiczenia. Wydanie II

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

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

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

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Wskazówki dotyczące przygotowania danych do wydruku suplementu

InsERT GT Własne COM 1.0

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

Spring MVC Andrzej Klusiewicz 1/18

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

Pracownia internetowa w ka dej szkole (edycja 2004/2005)

Bazy danych. Andrzej Łachwa, UJ, /15

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

Microsoft Management Console

Architektura komputerów

Komentarz technik ochrony fizycznej osób i mienia 515[01]-01 Czerwiec 2009

VinCent Office. Moduł Drukarki Fiskalnej

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

e-dziekanat Instrukcja użytkownika dydaktyk

G PROGRAMMING. Part #4

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

PowerShell. Sławomir Wawrzyniak

PERSON Kraków

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

2.Prawo zachowania masy

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

JADWIGA SKIMINA PUBLIKACJA NA TEMAT: NAUKA MS. WORD 2000 W KLASIE IV

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

O autorze... 9 Wprowadzenie... 11

1. Podstawy budowania wyra e regularnych (Regex)

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Aplikacje internetowe i rozproszone - laboratorium

Praca na wielu bazach danych część 2. (Wersja 8.1)

Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna

Systemy mikroprocesorowe - projekt

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

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

Ćwiczenie 7 Liczniki binarne i binarne systemy liczbowe.

Instrukcja wprowadzania ocen do systemu USOSweb

Harmonogramowanie projektów Zarządzanie czasem

Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Tekst ozdobny i akapitowy

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

Archiwum Prac Dyplomowych

Regulamin serwisu internetowego ramowka.fm

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi. nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe

Projektowanie bazy danych

WZÓR SKARGI EUROPEJSKI TRYBUNAŁ PRAW CZŁOWIEKA. Rada Europy. Strasburg, Francja SKARGA. na podstawie Artykułu 34 Europejskiej Konwencji Praw Człowieka

enova Workflow Obieg faktury kosztowej

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

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

z programowania z przykładowymi rozwiązaniami

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

API transakcyjne BitMarket.pl

WYKAZ ZMIAN W INSTRUKCJI UśYTKOWNIKA KSI

Rozdzia l 3. Laboratorium 3. danych zawierajac

System kontroli wersji SVN

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

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Procedura nadawania uprawnień do potwierdzania Profili Zaufanych w Urzędzie Gminy w Ryjewie

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

OptiMore Importer Rejestru VAT. Instrukcja obsługi programu

2 Zarządzenie wchodzi w życie z dniem podpisania.

Zamawiający potwierdza, że zapis ten należy rozumieć jako przeprowadzenie audytu z usług Inżyniera.

Wniosek o ustalenie warunków zabudowy

Instrukcja instalacji oraz wykorzystania podpisu cyfrowego

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

Wtedy wystarczy wybrać właściwego Taga z listy.

Regulamin Walnego Zebrania Członków Stowarzyszenia Nasz Dom - Rzeszów" w Rzeszowie. Rozdział I Postanowienia ogólne

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Specyfikacja techniczna banerów Flash

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Zmiany w wersji 1.18 programu VinCent Office.

Firma Informatyczna JazzBIT

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

Wewnątrzszkolny system kształcenia PLAN WYNIKOWY

REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.

Zbigniew Krzysiak. Projektowanie 2D w programie AutoCAD

Zdalne odnawianie certyfikatów do SWI

Opisy. Ikona: Polecenie: STCFG Menu: Stal Konfiguracja

Warszawska Giełda Towarowa S.A.

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Stypendia USOS Stan na semestr zimowy 2013/14

SINAMICS G120C STARTER. Tworzenie nowego projektu w trybie online.

Zmiany w programie C GEO v. 6.5

DANE UCZESTNIKÓW PROJEKTÓW (PRACOWNIKÓW INSTYTUCJI), KTÓRZY OTRZYMUJĄ WSPARCIE W RAMACH EFS

PFR Wstępnie wypełnione zeznanie podatkowe. PIT-37 i PIT-38 za rok 2015

Transkrypt:

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ść

Spis tre ci Wst p 7 Cz I J zyk programowania 9 Rozdzia 1. Pierwsza aplikacja 11 J zyk C# 11 Jak w a ciwie nazywa si ten j zyk? 12 rodowisko uruchomieniowe 12 Narz dzia 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 odno nikowe 33 Typ string 34 Typ object 34 Warto null 35 Operatory 35 Operatory arytmetyczne 36 Operatory bitowe 43

4 C# wiczenia Operatory logiczne 45 Operatory przypisania 45 Operatory porównania (relacyjne) 46 Operator warunkowy (?) 47 Pozosta e 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 P tle 59 P tla for 59 P tla while 66 P tla do while 68 P tla 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 dost pu 107 Dziedziczenie 114 Rozdzia 5. Tablice 119 Deklarowanie tablic 120 Inicjalizacja tablic 122 Rozmiar tablicy 124 P tla foreach 127 Tablice wielowymiarowe 130

Spis tre ci 5 Rozdzia 6. Wyj tki i obs uga b dów 137 Obs uga b dów 137 Blok try...catch 143 Hierarchia wyj tków 148 W asne wyj tki 151 Rozdzia 7. Interfejsy 155 Prosty interfejs 155 Interfejsy w klasach potomnych 159 Czy to interfejs? 167 Rzutowanie 172 S owo kluczowe as 174 S owo kluczowe is 175 Cz III Programowanie w Windows 177 Rozdzia 8. Pierwsze okno 179 Utworzenie okna 179 Wy wietlanie 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 zwyk e (ListBox) 220 Menu 224 Menu g ówne 224 Menu kontekstowe 232 W a ciwo ci Menu 235 Skróty klawiaturowe 240

6 C# wiczenia

5 Tablice Tablice to jedne z podstawowych struktur danych; znane s zapewne nawet pocz tkuj cym programistom. Warto jednak w kilku s owach przypomnie podstawowe wiadomo ci i poj cia z nimi zwi zane. Tablica to stosunkowo prosta struktura danych pozwalaj ca na przechowanie uporz dkowanego zbioru elementów danego typu mo na j sobie wyobrazi tak, jak zaprezentowano na rysunku 5.1. Sk ada si z ponumerowanych kolejno komórek, a ka da taka komórka mo e przechowywa pewn porcj danych. Rysunek 5.1. Schemat struktury tablicy Jakiego rodzaju b d to dane, okre la typ tablicy. Je li zatem zadeklarujemy tablic typu ca kowitoliczbowego (int), b dzie mog a zawiera liczby ca kowite, a je li b dzie to typ znakowy (char), poszczególne komórki b d mog y zawiera ró ne znaki. Nale y zwróci uwag, e w C# (podobnie jak w wi kszo ci wspó czesnych popularnych j zyków programowania) numerowanie komórek zaczyna si od 0, czyli pierwsza komórka ma indeks 0, druga indeks 1 itd.

120 C# wiczenia Deklarowanie tablic Przed skorzystaniem z tablicy nale y zadeklarowa zmienn tablicow. Poniewa w C# tablice s obiektami, nale y równie utworzy odpowiedni obiekt. Schematycznie robi si to w sposób nast puj cy: typ_tablicy[] nazwa_tablicy = new typ_tablicy[liczba_elementów]; Oczywi cie, deklaracj zmiennej tablicowej oraz przypisanie jej nowo utworzonego elementu mo na wykona w osobnych instrukcjach, np. w ten sposób: 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 mog a zawiera elementy typu int, czyli 32-bitowe liczby ca kowite. Samej tablicy jednak jeszcze nie b dzie (odmiennie ni w przypadku prostych typów warto ciowych, takich jak int, byte czy char) i konieczne jest jej utworzenie. W I C Z E N I E 5.1 Utworzenie tablicy Zadeklaruj i zainicjalizuj tablic elementów typu ca kowitego. Przypisz pierwszemu elementowi tablicy dowoln warto. Wy wietl 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]);

Rozdzia 5. Tablice 121 Wyra enie new tablica[5] oznacza utworzenie nowej, jednowymiarowej, 5-elementowej tablicy liczb typu int. Ta nowa tablica zosta a przypisana zmiennej odno nikowej o nazwie tablica. Od miejsca tego przypisania mo na odwo ywa si do kolejnych elementów tej tablicy, pisz c: tablica[index] W tym przypadku pierwszemu elementowi (o indeksie 0) zosta a przypisana warto 10. O tym, e takie przypisanie faktycznie mia o miejsce, przekonali my si, wy wietlaj c warto tej komórki na ekranie. Warto w tym miejscu przypomnie, e elementy tablicy numerowane 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, je li nieprzyzwyczajeni do takiego sposobu indeksowania odwo amy si do indeksu o numerze 10? W I C Z E N I E 5.2 Odwo anie do nieistniej cego elementu tablicy Zadeklaruj i zainicjalizuj tablic 10-elementow. Spróbuj przypisa elementowi o indeksie 10 dowoln liczb ca kowit. 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]); Powy szy kod da si bez problemu skompilowa, jednak przy próbie uruchomienia takiego programu na ekranie zobaczymy okno z informacj o wyst pieniu b du. Mo e ono mie ró n posta, w zale no ci od tego, w jakiej wersji systemu zosta a uruchomiona aplikacja. Na rysunku 5.2 jest widoczne okno z systemu Windows 7. Równie na konsoli (w Windows XP dopiero po zamkni ciu okna dialogowego) ujrzymy komunikat podaj cy konkretne informacje o typie b du oraz miejscu programu, w którym wyst pi (rysunek 5.3).

122 C# wiczenia 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 nic strasznego. Program, co prawda, nie dzia a, ale b d zosta wychwycony przez rodowisko uruchomieniowe. Konkretnie mówi c, zosta wygenerowany tzw. wyj tek i aplikacja zako czy a dzia anie. Taki wyj tek mo na jednak przechwyci i tym samym zapobiec niekontrolowanemu zako czeniu wykonywania kodu. To jednak odr bny temat, który zostanie przedstawiony w rozdziale 6. Wa ne jest to, e próba odwo ania si do nieistniej cego elementu zosta a wykryta i to odwo anie nie wyst pi o! Program nie naruszy wi c obszaru pami ci niezarezerwowanej dla niego. Inicjalizacja tablic Tablic mo na zainicjalizowa ju w momencie jej tworzenia. Dane, które maj si znale w poszczególnych komórkach, podaje si w nawiasach klamrowych po deklaracji tablicy. Schematycznie wygl da to nast puj co: typ[] nazwa = new typ [liczba_elementów]dana1, dana2,...,danan

Rozdzia 5. Tablice 123 Je li zatem chcieliby my utworzy 5-elementow tablic liczb ca kowitych i od razu zainicjalizowa 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.3 Inicjalizacja tablicy Zadeklaruj tablic 5-elementow typu int i zainicjalizuj j liczbami od 1 do 5. Zawarto tablicy wy wietl 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 dzia ania kodu z powy szego wiczenia widoczny jest na rysunku 5.4. Nie jest niespodziank, e wy wietlone zosta y liczby od 1 do 5, natomiast indeksy kolejnych komórek zmieniaj si od 0 do 4. Powsta a 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 steruj ca p tli for, która odczytuje dane z tablicy, ma pocz tkow warto 0, a warunek zako czenia p tli 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

124 C# wiczenia Kiedy inicjalizowana jest tablica o z góry znanej liczbie elementów, dopuszcza si pomini cie fragmentu kodu zwi zanego z tworzeniem obiektu. Kompilator sam wykona odpowiednie uzupe nienia. Zamiast pisa : typ[] nazwa = new typ [liczba_elementów]dana1, dana2,...,danan mo na zatem równie dobrze u y konstrukcji: typ[] nazwa = dana1, dana2,...,danan Oba sposoby s równowa ne i nale y u ywa tego, który jest wygodniejszy. W I C Z E N I E 5.4 Bezpo rednia inicjalizacja tablicy Zadeklaruj tablic 5-elementow typu int i zainicjalizuj j liczbami od 1 do 5. U yj drugiego z poznanych sposobów inicjalizacji. Zawarto tablicy wy wietl 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 Ka da tablica posiada w a ciwo Length, która okre la bie c liczb komórek. Aby uzyska t informacj, piszemy: tablica.length

Rozdzia 5. Tablice 125 Przy tym dopuszczalny jest tylko odczyt, czyli prawid owa jest konstrukcja: int rozmiar = tablica.length; ale nieprawid owy 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 w a ciwo ci Length i wy wietl 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 W a ciwo Length i p tla for Utwórz tablic zawieraj c pewn liczb warto ci ca kowitych. Zawarto tablicy wy wietl na ekranie za pomoc p tli for. Do okre lenia rozmiaru tablicy u yj w a ciwo ci 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

126 C# wiczenia ; for(int i = 0; i < tab.length; i++) Console.WriteLine("tab[" + i + "] = " + tab[i]); Zasada odczytu danych w tym przyk adzie jest taka sama jak w wiczeniach 5.3 i 5.4, z t ró nic, e rozmiar tablicy jest okre lany za pomoc w a ciwo ci Length (tab.length). Dzi ki temu mo na np. dopisa dowoln liczb nowych danych w instrukcji inicjalizuj cej tablic, a kod p tli for nie b dzie wymaga adnych zmian. Nowy rozmiar zostanie uwzgl dniony automatycznie. Do zapisywania danych (podobnie jak do odczytu) w tablicach cz sto u ywa si p tli (przedstawionych w rozdziale 2.). Jest to wr cz niezb dne, gdy trudno si spodziewa, aby mo na by o r cznie zapisa warto ci z wi cej ni kilkunastu czy kilkudziesi ciu komórek. Wielko tablicy nie musi te by z góry znana, mo e wynika z danych uzyskanych w trakcie dzia ania programu. Z tablicami mog wspó pracowa dowolne rodzaje p tli. W niektórych przypadkach bardzo wygodna jest omówiona w kolejnym podrozdziale p tla foreach. W I C Z E N I E 5.7 U ycie p tli do zapisu danych w tablicy U yj p tli for do zapisania w 10-elementowej tablicy 10 kolejnych liczb ca kowitych. 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++)

Rozdzia 5. Tablice 127 Console.WriteLine("tab[0] = 1", i, tab[i]); Powsta a 10-elementowa tablica liczb typu int. Mamy w niej zapisa warto ci od 1 do 10, czyli komórka o indeksie 0 ma mie warto 1, o indeksie 1 warto 2 itd. A zatem warto komórki ma by zawsze o 1 wi ksza ni warto indeksu (zmiennej i). Dlatego instrukcja wewn trz p tli ma posta : tablica[i] = i + 1; Druga p tla for s u y tylko do wy wietlania danych zawartych w tablicy. Jej konstrukcja jest taka sama jak w pierwszym przypadku. Wewn trz p tli znajduje si instrukcja wy wietlaj ca warto ci kolejnych komórek. P tla foreach Dotychczas poznali my trzy rodzaje p tli: for, while i do while (by a o nich mowa w rozdziale 3.). W przypadku tablic (jak równie kolekcji, które w tej ksi ce nie by y omawiane 1 ) mo na równie skorzysta z p tli typu foreach. Jest ona bardzo wygodna, gdy umo liwia prost iteracj po wszystkich elementach tablicy; nie trzeba wtedy wprowadza dodatkowej zmiennej iteracyjnej. P tla foreach ma nast puj c posta : foreach(typ identyfikator in wyra enie) //instrukcje Je eli zatem mamy tablic o nazwie tab zawieraj c liczby typu int, mo emy zastosowa konstrukcj : 1 ci lej rzecz ujmuj c, p tli foreach mo na u y z ka dym obiektem udost pniaj cym tzw. iterator. Ten temat nie b dzie jednak poruszany w ksi ce.

128 C# wiczenia foreach(int val in tab) //instrukcje Wtedy w kolejnych przebiegach p tli pod val b d podstawiane kolejne elementy tablicy. S owo val jest tu identyfikatorem odczytywanej warto ci (mo na je traktowa jak zmienn ). Oczywi cie, mo na je zmieni na dowolne inne. W I C Z E N I E 5.8 U ycie p tli foreach do wy wietlenia zawarto ci tablicy Wykorzystaj p tl foreach do wy wietlenia wszystkich elementów tablicy przechowuj cej liczby ca kowite. 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 zosta a zainicjalizowana w p tli for kolejnymi liczbami od 0 do 9. Do wy wietlenia danych zosta a natomiast u yta p tla foreach. W ka dym 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. P tla ko czy si po osi gni ciu ostatniego elementu (o indeksie 9).

Rozdzia 5. Tablice 129 W I C Z E N I E 5.9 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 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); Powsta a tablica tab typu int, 100-elementowa. Do wype nienia jej danymi zosta a u yta p tla for oraz obiekt rand typu Random, za pomoc którego uzyskujemy warto ci pseudolosowe. Dok adniej rzecz ujmuj c, kolejn pseudolosow liczb ca kowit otrzymujemy, wywo uj c metod Next tego obiektu. W p tli foreach badamy, które z komórek tablicy tab zawieraj warto ci parzyste, a które nieparzyste. Aby to stwierdzi, u ywamy operatora dzielenia modulo. Gdy wynikiem tego dzielenia jest 0, dana komórka zawiera liczb parzyst (jest wtedy zwi kszana warto pomocniczej zmiennej parzyste), natomiast gdy wynik dzielenia jest ró ny od 0, komórka zawiera warto nieparzyst

130 C# wiczenia (jest wtedy zwi kszana warto pomocniczej zmiennej nieparzyste). Po zako czeniu p tli na ekranie wy wietlany komunikat z poszukiwan informacj (u ywane s warto ci pobrane ze zmiennych parzyste i nieparzyste). Tablice wielowymiarowe Tablice nie musz by jednowymiarowe, jak w dotychczas prezentowanych przyk adach. Tych wymiarów mo e by wi cej, 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. Oczywi cie, aby w takiej sytuacji jednoznacznie wyznaczy komórk, trzeba poda dwie liczby: indeks wiersza i indeks kolumny. Rysunek 5.5. Przyk ad tablicy dwuwymiarowej W jaki sposób mo na 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]; Przyk adowo dwuwymiarow tablic widoczn na rysunku 5.5 utworzymy nast puj co (przy za o eniu, e ma przechowywa liczby ca kowite): int[,] tablica = new tablica[2, 5]; Inicjalizacja komórek mo e odbywa si, podobnie jak w przypadku tablic jednowymiarowych, ju w trakcie deklaracji:

typ_tablicy[,] nazwa_tablicy = (dana1, dana2), (dana3, dana4),..., (danam, danan) ; Rozdzia 5. Tablice 131 Zobaczmy, jak wygl da to na konkretnym przyk adzie. W I C Z E N I E 5.10 Tworzenie tablicy dwuwymiarowej Zadeklaruj tablic dwuwymiarow typu int o dwóch wierszach i pi ciu kolumnach i zainicjalizuj j kolejnymi liczbami ca kowitymi. Zawarto tablicy wy wietl 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 wype niania tablicy u yto 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 licznik s u y 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 tablica przyjmie posta widoczn na rysunku 5.6.

132 C# wiczenia Rysunek 5.6. Tablica z wiczenia 5.10 po wype nianiu danymi Do wy wietlenia danych u ywana jest analogiczna konstrukcja 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.10 Tablica dwuwymiarowa nie musi mie, 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 na utworzy np. tablic o kszta cie trójk ta (rysunek 5.8 A) lub zupe nie nieregularn (rysunek 5.8 B). Przy tworzeniu struktur nieregularnych trzeba si jednak wi cej napracowa, gdy ka dy wiersz zazwyczaj nale y tworzy r cznie, pisz c odpowiedni lini kodu. Rysunek 5.8. Przyk ady bardziej skomplikowanych tablic dwuwymiarowych

Rozdzia 5. Tablice 133 Postarajmy si utworzy struktur przedstawion na rysunku 5.8 B. Nale y zauwa y, e ka dy wiersz mo na traktowa jak oddzieln tablic jednowymiarow. Zatem jest to jednowymiarowa tablica, której poszczególne komórki zawieraj inne jednowymiarowe tablice. Inaczej mówi c, jest to tablica tablic. Wystarczy wi c zadeklarowa zmienn tablicow o odpowiednim typie, a nast pnie poszczególnym jej elementom przypisa nowo utworzone tablice jednowymiarowe o zadanej d ugo ci. Oto ca e rozwi zanie problemu. Jednak co znaczy okre lenie odpowiedni typ tablicy? Pomy lmy je li w tablicy (jednowymiarowej) mia y by przechowywane liczby ca kowite typu int, typem tej tablicy by int. Pisali my wtedy: int[] tablica; Je li zatem typem nie jest int, ale tablica typu int, któr oznacza si jako int[], nale y napisa : int[][] tablica; Z kolei utworzenie 4-elementowej tablicy zawieraj cej tablice z liczbami ca kowitymi wymaga zapisu: new tablica[4][]; Te wiadomo ci powinny wystarczy do wykonania kolejnego wiczenia. W I C Z E N I E 5.11 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 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;

134 C# wiczenia Po wype nieniu danymi tablica z wiczenia b dzie mia a posta przedstawion na rysunku 5.9. Jak sobie poradzi z wy wietleniem jej zawarto ci na ekranie? Oczywi cie, mo na zrobi to r cznie, pisz c kod oddzielnie dla ka dego wiersza. Przy tak ma ej tablicy nie b dzie to problemem. Czy jednak tej czynno ci nie da si zautomatyzowa? Najwygodniej by oby przecie wyprowadza dane na ekran w zagnie d onych p tlach, tak jak w wiczeniu 5.10. Rysunek 5.9. Tablica z wiczenia 5.11 wype niona przyk adowymi danymi Oczywi cie, jest to jak najbardziej mo liwe, a z nieregularno ci tablicy mo na sobie poradzi w bardzo prosty sposób. Przecie ka da tablica ma, omówion wcze niej w tym rozdziale, w a ciwo Length, przy u yciu której da si 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.12 Wy wietlanie danych z tablicy nieregularnej Zmodyfikuj kod z wiczenia 5.11 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 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;

Rozdzia 5. Tablice 135 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 wy wietlenia danych równie zosta y u yte dwie zagnie d one p tle for. W p tli zewn trznej jest umieszczona instrukcja Console.Write ("tablica[0] = ", i);, wy wietlaj ca numer aktualnie przetwarzanego wiersza tablicy, natomiast w p tli wewn trznej znajduje si instrukcja Console.Write("0 ", tab[i][j]);, wy wietlaj ca zawarto komórek w danym wierszu. Rysunek 5.10. Wy wietlenie danych z nieregularnej tablicy w wiczeniu 5.12

136 C# wiczenia