Europejskie Informatyczne Studium Certyfikacyjne EITCA e-Learning

Informatyka Biznesowa (EITCA-B)

Kurs: „Podstawy programowania i

wykorzystanie technologii OpenSource”

Wykład 6: Programowanie w C# na

platformie Microsoft .NET (cz.3)

Materiał obejmuje zakres programowy

1 godziny lekcyjnej

Europejskie Informatyczne Studium Certyfikacyjne EITCA e-Learning

Studium prowadzone w ramach programu szkoleniowego Europejskiej Akademii Certyfikacji IT

EITCI European IT Certification Academy (EITCA)

Krajowy Przedstawiciel Konsorcjum Realizującego:

Centrum Szkoleniowe IT CompLearn, CompSecur IT Solutions:

ul. Piłsudskiego 74, 50-020 Wrocław, tel. +48 71 722 8038, fax. +48 71 722 8039

NIP: 897-173-92-49, REGON: 020713664, e-mail: info@complearn.pl; strona www: www.complearn.pl Niniejszy dokument stanowi część materiałów dydaktycznych opracowywanych przez krajowe konsorcjum naukowo-przemysłowe będące realizatorem Europejskiego Informatycznego Studium Certyfikacyjnego w ramach programu EITCA (Europejska Akademia Certyfikacji IT), a także przez inne jednostki naukowo-dydaktyczne działające na rzecz poprawy poziomu kształcenia informatycznego w Polsce (m.in. uczelnie wyższe: Politechnikę Wrocławską oraz konsorcjum uczelni wyższych: Uniwersytetu

Jagiellońskiego,

Uniwersytetu

Warszawskiego,

Politechniki

Warszawskiej,

Politechniki

Poznańskiej

udostępniających materiały dydaktyczne w ramach projektu „Opracowanie programów nauczania na odległość na kierunku studiów wyższych – Informatyka”, zakwalifikowanego przez Ministerstwo Edukacji Narodowej w ramach Sektorowego Programu Operacyjnego: Rozwój Zasobów Ludzkich 2006, finansowanego ze środków Unii Europejskiej).

4. Składnia i semantyka języka C# c.d.

4.5. Imperatywne struktury sterowania przepływem

Instrukcja warunkowa

Instrukcja warunkowa ma w języku C# następującą postać:

if (warunek_logiczny) instrukcja;

if (warunek_logiczny) instrukcja1 else instrukcja2;

// zamiast pojedynczej instrukcji moŜna w obu miejscach uŜyć bloku

instrukcji zamkniętego w nawiasy klamrowe:

if (warunek_logiczny) {

instrukcja1;

..

instrukcjaN;

} else {

instrukcjaM;

..

instrukcjaK;

}

Jeśli spełniony jest warunek logiczny wykonywane są instrukcje w ramach bloku znajdują-

cego się zaraz za warunkiem. W przeciwnym wypadku wykonywany jest blok znajdujący się po opcjonalnym słowie kluczowym else.

Instrukcja wyboru

switch (wyraŜenie)

{

case wartość1,wartość2:

// tu instrukcje dla tego przypadku

break;

case inna_wartość:

// tu instrukcje dla tego przypadku

break;

case jeszcze_inna_wartość:

// tu instrukcje dla tego przypadku

break;

default:

// tu instrukcje dla wartości domyślnej

}

Instrukcja break powoduje wyjście z bloku switch po wykonaniu ciągu instrukcji dla danego przypadku. Gdybyśmy jej nie użyli, program kontynuowałby wykonywanie przechodząc do kolejnej instrukcji w ramach bloku switch.

2

Pętle warunkowe

- Pętla WHILE

while (warunek_logiczny) instrukcja;

// lub

while (warunek_logiczny) {

instrukcja1;

..

instrukcjaN;

}

W konstrukcji tej tak długo, jak spełniony jest warunek logiczny, wykonywany będzie ciąg instrukcji wewnątrz bloku, przy czym warunek logiczny sprawdzany jest przed wejściem do bloku.

- Pętla DO..WHILE

do instrukcja while (warunek_logiczny);

// lub

do {

instrukcja1;

..

instrukcjaN;

} while (warunek_logiczny);

Konstrukcja ta działa analogicznie do poprzedniej, z tą różnicą, że warunek logiczny sprawdzany jest PO wykonaniu instrukcji zawartych wewnątrz bloku. Oznacza to, że instrukcje te zawsze zostaną wykonane co najmniej raz.

Pętla FOR

Pętla FOR ma w języku C# dosyć złożoną postać, która wygląda następująco:

for (<lista_wyraŜeń_inicjujących>; <wyraŜenie_warunkowe>;

<lista_iteracji>) {

<instrukcje>

}

Pętla FOR wykonywana jest w następujący sposób:

1. najpierw wykonywane są polecenia inicjujące, służące do nadania początkowych

wartości zmiennym iteracyjnym

2. sprawdzane jest wyrażenie warunkowe i jeśli jest spełnione, wykonywane są

instrukcje wewnątrz bloku (w przeciwnym wypadku pętla zostaje zakończona)

3. wykonywane są instrukcje z listy iteracji, służące z założenia do modyfikacji wartości zmiennych iteracyjnych

4. następuje powrót do punktu 2

3

Działanie to najlepiej wytłumaczyć na prostym przykładzie:

for (int i=1;i<11;i++) {

Console.Write("{0} ", i); // wypisanie na ekranie bieŜącej wartości

zmiennej i

}

W powyższym przypadku zmienna i zainicjowana zostanie wartością 1 i będzie zwiększana o 1 po każdym przebiegu pętli, aż do osiągnięcia wartości 11. W efekcie pętla wykona się 10

razy i spowoduje wypisanie na ekranie ciągu liczb od 1 do 10. Ponieważ zmienna i została zadeklarowana w ramach listy wyrażeń inicjujących pętli, jest ona zmienną lokalną pętli widoczna tylko w jej obrębie.

W ramach pętli FOR możliwe jest stosowanie następujących instrukcji specjalnych:

- break;

- powoduje natychmiastowe przerwanie wykonywania pętli

- continue; - powoduje natychmiastowe przejście do kolejnej iteracji pętli

Pętla FOR w języku C# daje dużo więcej możliwości niż modelowa pętla FOR i pozwala na konstruowanie różnorodnych struktur sterowania, częstokroć nie mających nic wspólnego z tą ostatnią.

Iterator FOREACH

FOREACH jest rodzajem pętli wykonującej się dla każdego elementu listy (kolekcji): foreach (<typ> <nazwa_zmiennej_reprezentującej_element_listy> in

<lista>) {

<instrukcje>

}

Działanie tej konstrukcji znowu najlepiej rozpatrzeć na przykładzie:

// deklaracja tablicy zawierającej imiona

string[] imiona = {"Adam", "Jakub", "Zygmunt", "Piotr"}; foreach (string osoba in imiona)

{

Console.WriteLine("{0} ", osoba);

}

Powyższy kod spowoduje wykonanie instrukcji wypisania na ekranie wartości zmiennej osoba, która to wartość w każdym przebiegu pętli będzie przechodziła po kolejnych elementach tablicy imiona.

4

5. Tworzenie aplikacji konsolowych

Najprostszym przykładem programów w środowisku Microsoft® Windows® są tzw. aplikacje konsolowe, tzn. wykorzystujące do komunikacji z użytkownikiem interfejs czysto tekstowy.

Przykładem jest systemowa aplikacja ipconfig.exe służąca do wyświetlania

różnorodnych informacji związanych z siecią komputerową w środowisku Windows®.

Środowiskiem uruchomieniowym dla aplikacji konsolowych jest wiersz poleceń systemu Windows® uruchamiany przez wpisanie cmd w oknie „Uruchom...”. Aby teraz

uruchomić wspomnianą aplikację, należy w wierszu poleceń wpisać ipconfig i nacisnąć ENTER. W wyniku tego wypisane zostaną odpowiednie informacje:

Aplikacje konsolowe umożliwiają oczywiście także pobieranie danych od użytkownika. Jako przykład można w wierszu poleceń wpisać comp w celu uruchomienia aplikacji służącej do porównywania zawartości plików.

5.1. Tworzenie nowej aplikacji konsolowej

Po uruchomieniu programu Visual C# 2005 Express ukaże się ekran powitalny. W celu utworzenia nowej aplikacji konsolowej należy wybrać „New project...” z menu

„File”, a następnie w oknie, które się pojawi wybrać „Console Application” i wpisać nazwę dla nowej aplikacji. Po kliknięciu przycisku OK ukaże się ekran edycji głównego pliku aplikacji.

Nowa pusta aplikacja konsolowa utworzona w Visual Studio 2005 wygląda następująco: 5

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

}

}

}

Domyślnie zadeklarowane jest użycie trzech podstawowych przestrzeni nazw, będących podprzestrzeniami przestrzeni System. Parametr args metody Main zawiera natomiast argumenty uruchomienia aplikacji podawane po nazwie pliku wykonywalnego. Jest to jeden ze sposobów pobierania danych wejściowych od użytkownika. Na przykład, jeśli uruchamiając naszą aplikację z linii poleceń wpiszemy:

<nazwa_pliku>.exe Jan Kowalski 13

to tablica args zawierać będzie 3 łańcuchy znaków – „Jan”, „Kowalski” oraz „13”.

Dodatkowo, główna klasa programu domyślnie umieszczona została w obrębie nowej przestrzeni nazw, której nazwa odpowiada nazwie projektu. Konstrukcja ta nie jest konieczna dla poprawnego działania aplikacji, jednak stanowi dobrą praktykę, pozwalając między innymi na wykorzystanie raz utworzonego kodu w obrębie innych aplikacji czy modułów.

Przestrzenie nazw nie są powiązane w żaden sposób z nazwami plików czy katalogów.

5.2. Zapisywanie aplikacji

Aplikacje w środowisku Visual Studio organizowane są w formie tzw. projektów, na które może składać się wiele różnych plików. Nawet w przypadku pustej aplikacji konsolowej na projekt oprócz głównego pliku programu składa się wiele innych plików przechowujących różne ustawienia projektu.

Aby zapisać projekt na dysku, należy wybrać opcję ”Save all” z menu ”File”, a następnie w oknie które się pojawi wprowadzić nazwę aplikacji oraz lokalizację na dysku w której projekt ma zostać zapisany (domyślnie ”C:\Documents and Settings\

wojtek\Moje dokumenty\Visual Studio 2005\Projects”). Po potwier-

dzeniu w wybranym katalogu utworzony zostanie podkatalog, w którym zapisane zostaną wszystkie pliki projektu łącznie z głównym plikiem źródłowym programu (domyślnie program.cs).

Zapisany projekt można potem ponownie przywołać poprzez wybranie „Open

project...” z menu ”File”, i wskazanie pliku <nazwa_projektu>.csproj w katalogu projektu.

6

5.3. Kompilacja i uruchamianie aplikacji

Aby uruchomić aplikację, należy zapisać pliki projektu w wybranej lokalizacji na dysku (CTRL+S), a następnie wybrać z menu „Debug” opcję „Start without debuging”

(lub nacisnąć kombinacje klawiszy CTRL+F5).

Po tej czynności utworzony zostanie plik wykonywalny aplikacji (<nazwa_projektu>

.exe) w podkatalogu „bin\Release\” katalogu projektu, i aplikacja zostanie automatycznie uruchomiona. Po utworzeniu pliku wykonywalnego możliwe jest

uruchamianie aplikacji bezpośrednio za jego pośrednictwem.

5.4. Wyświetlanie i pobieranie danych z konsoli

Wyświetlanie danych

Do wypisywania danych w oknie konsoli służą metody Write oraz WriteLine klasy Console, znajdującej się w przestrzeni nazw System. Obie metody działają niemal identycznie, z tą różnicą, że WriteLine powoduje po wypisaniu tekstu przejście do następnej linii.

Działanie tych metod najlepiej będzie rozpatrzeć na przykładach, nie wymagających dalszego komentarza:

// wypisanie statycznego ciągu znaków

Console.Write(“Statyczny tekst”);

// wypisanie tekstu w skład którego wchodzi wartość zmiennej

int dlugosc=10;

Console.Write(“Dlugość wynosi: {0} metrów”,liczba);

// w miejscu {0} wstawiona zostanie wartość zmiennej

// wypisanie tekstu w skład którego wchodzi kilka wartości zmiennych

int liczba=7;

string tekst=”Przykładowy tekst”;

char znak=’a’;

Console.Write(“Wartość liczby: {0}, Tekst: {1}, Znak: {2}”, liczba,

tekst, znak);

// w miejsca {0}, {1} i {2} wstawione zostaną wartości kolejnych

podanych zmiennych

Pobieranie danych

Do pobierania danych od użytkownika za pośrednictwem służy metoda ReadLine klasy Console, powodująca oczekiwanie na wprowadzenie ciągu znaków i zwracająca w wyniku wprowadzony ciąg, jako wartość typu string:

7

// pobranie ciągu znaków od uŜytkownika

string tekst;

Console.Write(“Wprowadź tekst: ”);

tekst=Console.ReadLine();

8