background image

Wprowadzenie 

background image

Przegląd zagadnień 

 

 

Jedną z podstawowych dziedzin informatyki jest nauka zwana algorytmiką.  
Każda osoba chcąca zaprojektować i napisać jakikolwiek program powinna być 
zaznajomiona z podstawowymi pojęciami tej nauki. 

Do tworzenia programów wykorzystywane są języki programowania. 
Większość nowoczesnych języków ma składnię zbliżoną do języka C/C++. 
Podstawowe konstrukcję językowe będą pokazywane na przykładzie języka C#, 
który składnię ma zbliżoną właśnie do języka C/C++.  

Jako narzędzie do tworzenia oprogramowania będziemy używać środowiska 
programistycznego Visual Studio. 

Po skończeniu tego ćwiczenia studenci powinni:  

 

Znać podstawowe pojęcia z algorytmiki. 

 

Wiedzieć co to jest Platforma .NET 

 

Potrafić korzystać ze środowiska Visual Studio 

background image

 Podstawowe pojęcia 

 

 

Przed przystąpieniem do tworzenia własnego programu, po pierwsze musimy 
mieć pomysł - wizję, co chcemy, aby program dla nas lub za nas robił. 
Następnie tą wizję musimy zamienić na kolejne czynności, które prowadzą do 
realizacji naszego pomysłu. W ten sposób powstaje algorytm. Często zwłaszcza 
przy mniejszych programach sposób realizacji programu pozostaje w głowie 
osoby tworzącej lub jest tworzony na bieżąco w czasie pisania programu. Może 
to doprowadzić do licznych błędów, a co za tym idzie zwiększeniu kosztów 
stworzenia programu lub jego wadliwego działania. Dobrze jest więc zapisać 
nasz sposób realizacji w bardziej lub mniej formalny sposób. Jednym ze 
sposobów przedstawienia algorytmów w sposób graficzny jest schemat 
blokowy. Podczas analizy i projektowania algorytmu należy zwrócić uwagę na 
sposób organizacji informacji w komputerze, czyli jakich struktur danych 
będziemy używali. Ma to ogromny wpływ na nasz algorytm.  

Po opracowaniu algorytmu zapisujemy go w jakimś języku programowania. 
Następnie tłumaczymy nasz program na ciąg zer i jedynek, czyli coś co może 
być uruchomione i wykonane przez komputer. Tworzymy program 
wykonywalny. Niestety spora grupa osób kończy na typ etapie pracę nad 
programem zapominając o przetestowaniu oprogramowania, czyli sprawdzeniu 
czy działa zgodnie z oczekiwaniami. Metody testowania oprogramowania są 
poza zakresem tego podręcznika. 

W tej części rozdziału student pozna następujące pojęcia: 

 

Algorytm 

 

Schemat blokowy 

 

Struktury danych 

background image

 

Program komputerowy 

 

Interpreter 

 

Kompilator 

background image

Algorytm 

 

 

Słowo algorytm pochodzi od przydomku al-Chwarizmi arabskiego matematyka 
i astronoma Muhammada ibn Musa żyjącego w IX wieku.  

Algorytm krótko możemy powiedzieć, że oznacza przepis. W życiu 
codziennym spotkamy się z wieloma przykładami algorytmów. Są to np. 
wszystkie instrukcje obsługi telewizora, pralki, aparatu fotograficznego itp., 
opis czynności przy wymianie oleju, zmianie żarówki w samochodzie, 
wymianie bezpiecznika... Chyba najczęściej podawanym jako przykład zbioru 
algorytmów w życiu codziennym jest książka kucharska. Spróbujmy zapisać 
jakiś prosty algorytm, np. przygotowanie herbaty w postaci listy kroków. 

1.  Nalej wodę do czajnika 

2.  Postaw czajnik na gaz 

3.  Włącz gaz 

4.  Zagotuj wodę 

5.  Wrzuć saszetkę do szklanki 

6.  Zalej herbatę 

7.  Posłódź do smaku 

8.  Wypij herbatę 

Przy analizie powyższego algorytmu nasuwają się jednak pytania. Ile wody 
mam nalać, co mam zrobić, gdy mam czajnik elektryczny lub, co oznacza 
posłódź do smaku. Zapewne każdy z nas zetknął się z jakąś instrukcją, która 
była niejednoznaczna, a wręcz niezrozumiała. Dzieje się tak, gdyż zadania i 

background image

problemy najczęściej formułujemy w języku naturalnym, ale język naturalny 
nie jest jednoznaczny i precyzyjny. 

Sprecyzujmy pojęcie algorytmu ściślej. 
Algorytm - jest to kończony i uporządkowany zbiór jasno zdefiniowanych 
czynności, który prowadzi do rozwiązania jakiegoś problemu w ograniczonej 
liczbie kroków. Naukę zajmującą się badaniem algorytmów nazywamy 
algorytmiką.
 
Z powyższej definicji możemy wyprowadzić następujące właściwości 
algorytmu: 

a.  skończoność - rozwiązuje problem w ograniczonej liczbie kroków, 

musi mieć swój koniec 

b.  określoność - zarówno kolejność wykonywania poszczególnych 

kroków, jak i zbiór dostępnych instrukcji oraz ich znaczenie powinny 
być ściśle zdefiniowane nie zostawiając miejsca na dowolność 
interpretacji 

Przy opisie algorytmu należy podać warunki początkowe - dane wejściowe dla 
naszego algorytmu oraz warunki końcowe - czyli to, co chcemy osiągnąć. 
W przypadku przepisów kulinarnych warunkami początkowymi są potrzebne 
produkty oraz urządzenia konieczne do wykonania przepisu, warunkiem 
końcowym uzyskanie żądanej potrawy. Podanie zbioru właściwości 
(warunków) początkowych oraz zabioru warunków (właściwości) końcowych 
nazywamy specyfikacją algorytmu. 
Mając określone warunki początkowe oraz 
warunki końcowe, algorytm możemy zdefiniować jako skończony ciąg kroków, 
przekształcający stan początkowy (dane wejściowe) w stan końcowy (dane 
wyjściowe). W powyższym opisie pojawia się pojęcie dana. Przez dane 
będziemy określać to, co przetwarza (na czym pracuje) algorytm i co możemy 
otrzymać po skończeniu działania algorytmu. 

Algorytm oczywiście możemy ocenić. Oceniając algorytm bierzemy pod uwagę 
następujące jego właściwości: 

a.  poprawność - czy algorytm działa zgodnie z naszymi oczekiwaniami. 

Przy ocenie poprawności możemy wyróżnić: 
Algorytm całkowicie poprawny - dla wszystkich danych spełniających 
warunek początkowy, algorytm zatrzymuje się i daje wyniki 
spełniające warunek końcowy 
Algorytm częściowo poprawny - dla wszystkich danych spełniających 
warunek początkowy, jeżeli algorytm zatrzyma się, to uzyskane wyniki 
spełniają warunek końcowy 

b.  efektywność - koszt algorytmu. W przypadku algorytmów 

implementowanych na komputerze do porównania efektywności 
algorytmu wprowadzono pojęcie złożoności obliczeniowej, którą 
definiujemy jako ilość zasobów wymaganych przez dany algorytm. 
Główne zasoby to: 

 

pamięć - ilość miejsca potrzebna dla danych 

 

czas - wbrew nazwie nie określmy to jako o ilość czasu mierzona 
w sekundach (lub innych jednostkach czasu) od rozpoczęcia 
wykonywania algorytmu do jego zakończenia, gdyż ocena w 
dużym stopniu zależałaby od komputera na którym 
zaimplementowany algorytm został uruchomiony. Zamiast tego 
stosujemy liczbę operacji (instrukcji) podstawowych wykonanych 
w czasie realizacji algorytmu.  

background image

c.  ogólność - czy algorytm odnosi się do konkretnego, szczególnego 

przypadku (bardzo ograniczone dane wejściowe) lub odnosi się do 
pewnej klasy zadań  

d.  czytelność - czy algorytm jest zrozumiały 

e.  prostota - czy algorytm jest krótki (prosty), stopień skomplikowania 

f.  długość kodu - łatwość implementacji algorytmu w danym języku 

programowania 

Podsumowując możemy powiedzieć, że dobry algorytm to taki, który jest 
prosty, łatwy do zaimplementowania, łatwo go zrozumieć, liczy szybko, nie 
wymaga dużo miejsca w pamięci i zawsze daje poprawne wyniki. 

Sam algorytm możemy przedstawić na kilka sposobów: w postaci słownego 
opisu, listy kroków, drzewa decyzyjnego, schematu blokowego. 

background image

Schemat blokowy 

 

Schemat blokowy - diagram, graficzny sposób przedstawienia działania 
algorytmu. Składa się z figur, zwanych skrzynkami lub blokami, które 
połączone są odcinkami, które nazywamy ścieżkami sterującymi. 

W schemacie blokowym stosujemy następujące symbole graficzne: 

 

 

Ścieżka sterująca. Przy pomocy strzałki określamy kierunek 
przepływu danych lub kolejność wykonywania działań 

 

 

Skrzynka oznaczająca wejście (początek) algorytmu. 
Posiada tylko jedną ścieżkę wyjściową. Schemat blokowy 
może mieć tylko pojedynczy blok oznaczający początek 
algorytmu. 

 

 

Skrzynka oznaczająca wyjście (koniec) algorytmu. Posiada 
tylko jedną ścieżkę wejściową. Schemat blokowy może 
mieć dowolną ilość bloków oznaczających koniec 
algorytmu. 

 

 

Blok wprowadzanie lub wyprowadzania danych. Posiada 
jedno wejście i jedno wyjście. 

 

 

Skrzynka operacji. Oznacza wykonanie instrukcji 
elementarnej (-ych), w efekcie której zmienią się wartości, 
postać lub miejsce zapisu danych. Posiada jedno wejście i 
jedno wyjście. 

Start 

Stop 

background image

 

 

Skrzynka decyzyjna - przedstawia wybór jednego z dwóch 
wariantów wykonywania programu na podstawie 
sprawdzenia warunku wpisanego do wnętrza bloku. Posiada 
jedno wejście i dwa wyjście. 

 

 

Skrzynka wywołania podprogramu - część naszego 
algorytmu, która stanowi odrębną całość i jest zdefiniowana 
poza bieżącym schematem blokowym.. Posiada jedno 
wejście i jedno wyjście. 

 

 

Łącznik wewnętrzny (stronicowy) - służy do połączenia 
części schematu blokowego znajdujących się na tej samej 
stronie. Powiązane ze sobą łączniki oznaczone są tym 
samym napisem lub numerem. 

 

 

Łącznik zewnętrzny (

międzystronicowy)

 

 - służy do połączenia części schematu blokowego 
znajdujących się na różnych stronach.  

 

 

Skrzynka komentarza - pozwala wprowadzić opis 
wyjaśniający poszczególne części schematu, co ułatwia 
zrozumienie go czytającemu 

 

Przykład. 

Schemat blokowy algorytmu, który sprawdza czy podana liczba jest parzysta. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Start 

Podaj wartość 
liczby a: 

a - liczba całkowita 

Czy a % 2 = = 0 

% - reszta z dzielenia 

= = - porównanie 

Tak 

Nie 

Wypisz: "Podałeś 
liczbę nieparzystą" 

Wypisz: "Podałeś 
liczbę parzystą" 

Stop 

background image

Struktury danych 

 

 

Struktura danych to sposób organizacji danych w komputerze. Określa ona 
relacje między danymi i zbiór dostępnych operacji oraz właściwości tych 
operacji. Wybór odpowiedniej struktury danych ma ogromny wpływ na 
efektywność algorytmu. Poszczególne typy struktur danych zostaną omówione 
dokładniej w dalszej części kursu, tutaj tylko je wymienimy: 

 

tablica 

 

rekord 

 

lista 

 

stos 

 

kolejka 

 

drzewo 

 

graf (niestety poza zakresem tego kursu) 

 

background image

Program komputerowy 

 

 

Algorytm piszemy (rysujemy) po to, aby móc utworzyć program komputerowy. 
Tworząc program, zamieniamy więc pojęcia naszego języka (tym którym 
mówimy) lub symbole graficzne schematu blokowego na instrukcje zrozumiane 
przez komputer. Możemy powiedzieć, że program komputerowy jest to 
algorytm zapisany w "języku komputera". Komputery niestety przetwarzają 
tylko ciągi zer i jedynek. Każda operacja, instrukcja jest zakodowana w postaci 
pewnej liczby dwójkowej. Ludzie nie są przystosowani do pracy z liczbami, 
zwłaszcza dwójkowymi. Wprowadzono więc pewne symbole, które 
zastępowały kody poszczególnych instrukcji i utworzono programy które 
zamieniały symbole na odpowiadające im kody instrukcji. Język, którego 
symbole odpowiadają dokładnie instrukcją procesora nazywamy Asemblerem
Wraz z rozwojem informatyki, powstało zapotrzebowanie na coraz bardziej 
skomplikowane i zawansowane oprogramowanie. Aby ułatwić tworzenie 
bardziej skomplikowanego oprogramowania, zaczęto tworzyć pewne symbole, 
które ułatwiały tworzenie oprogramowanie, ale nie miały bezpośredniego 
odwzorowania na instrukcje procesora. Program tłumaczący (zmieniający 
symbole na odpowiednie kody instrukcji), zwany translatorem, musi potrafić 
zamienić te "skomplikowane" symbole na ciąg instrukcji danego procesora. Tak 
powstały języki programowania wysokiego poziomu. Zbiór symboli, które 
translator potrafi rozpoznać i zamienić na kody instrukcji danego procesora 
nazywamy słowami kluczowymi. Słowa kluczowe zostaną dokładniej omówione 
w następnym rozdziale. 

Program komputerowy jest to ciąg instrukcji, które mają być wykonywane 
przez komputer. Z rozważań powyższych wynika, że mogą być dwie postacie 
zapisu tych instrukcji. Pierwszy sposób to bezpośredni zapis w kodzie 
dwójkowym kodów instrukcji danego procesora. Postać taką nazywamy 
programem wykonywalnym. Postać wykonywalna jest przechowywana 

background image

najczęściej w plikach z rozszerzeniem exe lub dll. Drugi sposób to zapis 
instrukcji przeznaczonych do wykonania przez komputer w postaci bardziej 
czytelnej dla człowieka. Postać tą nazywamy postacią źródłową i do jej 
utworzenia używamy tzw. języków wysokiego poziomu. Postać źródłowa jest 
przechowywana w plikach testowych, z rozszerzeniem zależnym od 
zastosowanego języka programowania wysokiego poziomu. I tak programy 
napisane w języku C# posiadają rozszerzenie cs, w języku C++ cpp oraz h, w 
języku Visual Basic vb itd. 

Proces zamiany postaci źródłowej na postać wykonywalną nazywamy 
translacją. Translacja wykonywana jest przez program, jak już wcześniej 
wspominano, zwanym translatorem. 

 

 

background image

Kompilator kontra interpreter 

 

 

Translator może przetłumaczyć fragment kodu lub nawet pojedynczą instrukcję 
i przekazać przetłumaczony kod od razu do wykonania przez komputer. Tak 
działający translator nazywamy interpreterem. Proces tłumaczenia zaś 
interpretacją kodu. Na zasadzie interpretacji kodu działają wszystkie języki 
skryptowe (PHP, JavaScript, VBScript).  

Innym sposobem działania jest najpierw przetłumaczenie całego programu 
(postać źródłowa) do postaci maszynowej. Dopiero gdy mamy przetłumaczony 
cały program, może zostać on wykonany na danej maszynie. Translatory 
działające w ten sposób nazywamy kompilatorami, proces translacji natomiast 
kompilacją. Programy napisane w językach programowania takich jak Pascal, 
C/C++, Fortran są najczęściej kompilowane. Sam proces kompilacji możemy 
podzielić na kilka etapów: 

 

prekompilacja - polega na stworzeniu ostatecznego tekstu źródłowego 
programu, usunięcie formatowania tekstu (spacje), opcjonalne 
usunięcie komentarzy, rozwinięcie dyrektyw preprocesora (różne 
operacje na tekście programu - wstawianie, usuwanie, zamiana tekstu) 

 

kompilacja - przetworzenie tekstu źródłowego w kod maszynowy. 
Często tekst źródłowy przetwarzany jest najpierw do kodu asemblera 
(kompilacja), następnie kod asemblera jest optymalizowany 
(optymalizacja), po czym zoptymalizowany kod asemblera zamieniany 
jest na kod maszynowy (asemblacja).  

 

konsolidacja (linkowanie) - łączy wybrane pliki obiektowe (plik 
powstały po kompilacji pojedynczego pliku źródłowego) i biblioteki 
statyczne w program wykonywalny.  

background image

UWAGA 
Często w praktyce kompilator i linker stanowią oddzielne programy. 

Interpretacja kodu jest wolniejsza niż uruchamianie skompilowanego kodu, 
ponieważ interpreter musi przeanalizować oraz przetłumaczyć każdą instrukcję 
i dopiero następnie wykonać akcję, a w przypadku kodu skompilowanego, 
komputer jedynie wykonuje już przetłumaczone instrukcje. Wykonanie 
powtórnie tego samego fragmentu kodu przez interpreter wymaga powtórnej 
jego analizy.  
Sam jednak cykl edycja (modyfikacja postaci źródłowej) - interpretacja 
(uruchomienie) może często być znacznie krótszy niż cykl edycja - kompilacja-
uruchomienie. 

background image

Środowisko programistyczne Visual Studio 

 

 

Poszczególne konstrukcje językowe będziemy poznawać na przykładzie języka 
C#. Język C# jest językiem zorientowanym obiektowo

1

, z silną kontrolą typów, 

kompilowanym do kodu zarządzanego - tworzymy aplikacje uruchamiane na 
czymś co się nazywa .NET Framework. .NET Framework stanowi część 
składową pewnej idei firmy Microsoft na temat tworzenia oprogramowania, 
czyli Platformy .NET. 

Po zakończeniu tej części rozdziału student będzie wiedział i potrafił: 

 

Co to jest Platforma .NET i wymienić jej części składowe. 

 

Co to jest język pośredni. 

 

Co to jest podzespół. 

 

Utworzyć prosty program w języku C#. 

 

Korzystać z Visual Studio. 

                                                        

1

 Pojęcia programowania zorientowanego obiektowo (polimorfizm, 

kapsułkowanie, dziedziczenie...) są poza zakresem tego kursu. Można się z nimi 
zapoznać w kursie "Programowanie obiektowe". 

background image

Platforma .NET 

 

 

Platforma .NET jest to zbiór technologii i pewnych usług, które ułatwią 
programiście tworzenie aplikacji, ze zwróceniem szczególnej uwagi na Internet 
i technologie oraz standardy z nim związane (XML, HTML, SOAP...). 
Tworzenie aplikacji spróbujmy porównać do budowy domu i przy okazji 
omówić poszczególne komponenty platformy .NET. 

1.  .NET Framework 

Gdy budujemy dom musimy stosować się do praw fizyki i przestrzegać 
prawa budowlanego. Stawiamy dom w określonym środowisku 
przyrodniczym i prawnym. Środowisko to w pewien sposób nas ogranicza. 
Ograniczenia te jednak powodują, że nasz dom jest bezpieczny zarówno dla 
użytkowników jak i środowiska, funkcjonalny i nie koliduje z otoczeniem i 
innymi domami. Podstawą, tym środowiskiem, do budowy i w którym 
będziemy uruchamiali nasze programy jest coś co się nazywa .NET 
Framework.. Jeżeli chcemy uruchomić nasz program napisany w języku C#, 
musimy na danym komputerze mieć zainstalowane środowisko w którym 
będzie on wykonywany, czyli mieć .NET Framework. .NET Framework 
ver. 2.0 obsługuje następujące systemy: Windows 2000, Windows 98, 
Windows ME, Windows Server 2003, Windows XP. Dokładny opis 
obsługiwanych systemów wraz z wersjami można znaleźć w MSDN pod 
tematem "System Requirements for Version 2.0". Istnieją również 
implementacje .NET Framework na inny systemy (nie "Windowsowe"). 
Możemy wymienić choćby projekt Rotor, zawierający implementację .NET 
Framework na FreeBSD, czy projekt MONO implementacja środowiska na 
systemy Linux-owe.  
.NET Framework zawiera dwa komponenty: środowisko uruchomieniowe 
oraz bibliotekę klas. Środowisko uruchomieniowe (common language 
runtime - CLR) zarządza wykonaniem naszego kodu i dostarcza pewnych 

background image

serwisów, które ułatwiają programiście tworzenie oprogramowania. Kod 
uruchamiany pod kontrolą CLR-a nazywamy kodem zarządzanym 
(managed code). Kod zarządzany nie wywołuje funkcji sytemu 
operacyjnego bezpośredni, ale za pośrednictwem środowiska 
uruchomieniowego. Prócz roli pośredniczącej CLR również dostarcza 
szereg serwisów np.: automatyczne zwalnianie pamięci (Garbage collector - 
GC), zarządzanie wykonaniem kodu (Code manager), zarządzanie 
wyjątkami (Exception manager), sprawdzanie typów (Type checker), 
zarządzanie bezpieczeństwem kodu (Security engine). 
Gdy rozpoczynamy budowę domu, na działce mamy materiały, z których 
możemy wybudować dom, np. piasek, kamienie, drzewo. Podobnie z .NET 
Framework dostajemy bibliotekę klas, z tym że bibliotekę klas można 
bardziej porównać jakby na działce były gotowe elementy (półfabrykaty ) 
do budowy domy, a zadaniem programisty jest to tylko je poskładać, 
niczym dziecięce klocki.  

2.  Serwery (The .NET Enterprise Servers) 

Wyposażając nasz dom, musi kupić szafy, pralkę, lodówkę, kuchenkę itd. 
Oczywiście możemy spróbować te rzeczy wykonać samodzielnie. Koszt 
jednak wykonania (czas i materiały) może znacznie przekroczyć cenę 
zakupu. Jakoś i zgodność ze standardami prawdopodobnie będzie też 
gorsza. Podobnie jest z oprogramowaniem. Możemy napisać własny serwer 
bazy danych lub możemy użyć gotowego serwera, zwłaszcza że istnieją 
wersje darmowe (MS SQL Express, MySQL...). Firma Microsoft dostarcza 
szereg różnych serwerów: Microsoft SQL Server, Microsoft BizTalk 
Server, Microsoft Exchange Server, Microsoft SharePoint Portal Server, 
Microsoft Internet Security and Acceleration Server, itd. 

3.  Usługi XML Web Services 

Chcąc mieć w pełni funkcjonalny i nowoczesny trzeba podłączyć prąd, 
wodę, kanalizację, telefon, telewizję kablową, Internet. Możemy oczywiście 
wykopać studnie głębinową, czy postawić wiatrak na podwórku, ale w 
większości przypadków taniej będzie skorzystać z usług odpowiedniego 
zakładu, wodociągowego czy energetycznego. Podobnie w przypadku 
oprogramowania, zamiast przetwarzać wszystko lokalnie, lepiej wysłać 
zlecenie do odpowiedniego serwisu i odebrać wyniki w postaci dokumentu 
XML. Przykładowym serwisem dostarczanym przez firmę Microsoft jest 
Microsoft Passport. 

4.  Narzędzia programistyczne 

Prócz wcześniej wymienionych komponentów, do tworzenia 
oprogramowania niezbędne są narzędzia programistyczne: Microsoft 
dostarcza produkt o nazwie Microsoft .NET Framework Software 
Development Kit. Zawiera on szereg narzędzi do kompilacji, konfiguracji, 
wdrażania, debugowania, zabezpieczania itp. Oczywiście również mamy do 
dyspozycji Visual Studio - zintegrowane środowisko programistyczne. 
Microsoft udostępnia za darmo, również do celów komercyjnych, wersję 
Express. Więcej informacji można znaleźć na stronie 

http://www.microsoft.com/poland/developer/produkty/vstudio/express/defa
ult.mspx

. Podczas tego kursu będziemy korzystać z wersji Professional. 

Będąc studentem, można otrzymać tą wersję pod warunkiem, że wydział 
którego jest się studentem, posiada licencję MSDN Academic Alliance. 
Więcej informacji na stronach 

www.codeguru.pl

 

background image

Język pośredni - IL 

 

 

Jak już wspominano wcześniej, programista tworzy kod źródłowy w języku 
programowania wysokiego poziomu. W przypadku tworzenia oprogramowania 
uruchamianego pod kontrolą .NET Framework mamy do wyboru szereg 
różnych języków. Microsoft dostarcza Visual Basic, Visual C++, Microsoft 
Visual C#, Visual J# i Microsoft JScript. Inni producenci dostarczają 
kompilatorów dla innych języków. Warto tu wspomnieć choćby o języku 
funkcyjnym Emerle, którego twórcami są naukowcy Uniwersytetu 
Wrocławskiego. Język w którym piszemy kod zarządzany musi być zgodny ze 
specyfikacją CLS (common language specification). 
Po napisaniu kodu źródłowego następuje proces kompilacji. Wynikiem tego 
procesu nie jest jednak kod maszynowy danego procesora, tylko tak zwany kod 
języka pośredniego (Microsoft Intermediate Language). Dopiero gdy program 
będzie uruchamiany, zostanie on skompilowany do kodu maszynowego danej 
platformy przez kompilator bezpośredni (just-in-time comiler) i następnie 
wykonany. Zastosowanie języka pośredniego daje przenośność kodu na różne 
platformy.  
Skompilowane obrazy kodu natywnego programów zarządzanych 
przechowywane są w obszarze zwanym native image cache. Do zarządzania 
tym obszarem służy program Ngen. Więcej informacji na temat programu Ngen 
można znaleźć w MSDN Library. 

Język pośredni ma swój asembler. Do dezasemblacji kodu służy narzędzie o 
nazwie Ildasm. Na temat Ildasm informacje można znaleźć również w MSDN 
Library. 

 

background image

Podzespół (Assembly) 

 

 

Na platformie .NET używa się nowej jednostki opakowania, zamiast pliku, 
zwanej podzespołem (assembly). Cały kod zarządzany musi znajdować się w 
podzespole. Podzespół składa się z jednego lub większej ilości plików EXE lub 
DLL, które zawierają kod IL oraz zasoby aplikacji. Powiązanie między plikami 
podzespołu jest logiczne (system operacyjny nic nie wie o powiązaniu między 
plikami stanowiącymi podzespół). Podzespół zawiera również manifest, który 
zawiera metadane opisujące podzespół. Manifest zawiera:  

 

Nazwę podzespołu (może to być nazwa silna) 

 

Numer wersji podzespołu (wspólny i taki sam dla wszystkich 
modułów, które stanowią podzespół). Numer wersji składa się z 
czterech licz: numeru głównego (major), numeru drugorzędnego 
(minor), numeru kompilacji (build) oraz z numeru korekty 
(revision). 

 

Informacje na temat kultury (lub języka) obsługiwanej przez 
podzespół 

 

Listę wszystkich plików, które stanowią podzespół, wraz z ich 
sumami kontrolnymi 

 

Listę innych wymaganych do pracy podzespołów wraz z numerami 
ich wersji. 

 

Atrybuty dodane przez użytkownika. 

Podzespół może być prywatny dla danej aplikacji, pliki podzespołu muszą 
znajdować się w katalogu aplikacji lub jego podkatalogach i jest używany tylko 
przez tą aplikację. .NET Framework umożliwia współużytkowanie 

background image

podzespołów. Podzespoły współużytkowane należy umieszczać w globalnej 
pamięci podręcznej podzespołów (global assembly cache - GAC) - pseudo 
podkatalog WINDIR\assembly. Podzespoły współużytkowane muszą 
posiadać silną nazwę. 

Do zarządzania podzespołem, dodawania i usuwania plików do/z podzespołu, 
służy program AL.exe (Assembly Generation Utility). 

 

background image

Struktura programu w C# 

 

 

Program w języku C# rozpoczyna się od metody Main, czyli od miejsca w 
pliku źródłowym: 

static void Main(string[] args) 

lub 

static void Main() 

Przed wyrazem static może wystąpić jeszcze słowo public. 

Co to jest metoda i znaczenie słowa void zostanie wyjaśnione dokładnie w 
rozdziale ósmym "Funkcje - wstęp". Znaczenie słów static i public jest 
dokładnie omówione w kursie "Programowanie obiektowe". Na obecnym etapie 
kursu, można przyjąć że metoda jest to pewne polecenie, które nie jest 
bezpośrednio instrukcją danego języka, ale kompilator potrafi zamienić to na 
ciąg instrukcji. 

Uwaga: 
Dopuszczalna jest również następująca definicja metody Main, jako punktu 
startowego: 
static int Main(string[] args) 
lub 
static int Main() 

Poszczególne instrukcje programu umieszcza się między dwoma nawiasami 
klamrowymi, tymi bezpośrednio za metodą Main: Nawiasy klamrowe 
określają blok kodu - pewną logiczną całość. 

static void Main(string[] args) 

background image

 

instrukcja1; 

 

instrukcja2; 

 

... 

 

instrukcjan; 

Instrukcje są wykonywane jedna po drugiej w kolejności ich zapisania. 
Program w języku C# kończy się po wykonaniu instrukcji tuż przed nawiasem 
klamrowym zamykającym blok kodu metody Main. Innym sposobem 
zakończenia programu jest wywołanie instrukcji return wewnątrz bloku 
kodu metody Main. Słowo return dokładnie zostanie omówione w 
rozdziałach poświęconym metodom - rozdział ósmy. 

Metoda jest zawsze składową kasy. Program w języku C# to tak naprawdę 
kolekcja jednej lub więcej klas (w C# nie ma funkcji globalnych). Metodę 
Main dlatego zawsze trzeba umieścić w bloku kodu definiującym klasę.  
Pojęcie klasy zostanie przybliżone w dalszej części kursu, a dokładnie 
omówione w kursie "Programowanie obiektowe". 

class Program 

 

static void Main(string[] args) 

 

 

Nazwa Program, która w powyższym przykładzie stanowi nazwę klasy, jest 
nieobowiązkowa. Można ją zastąpić dowolnym inny identyfikatorem. Jakie są 
dopuszczalne identyfikatory zostanie dokładnie omówione w następnym 
rozdziale. Powyższy kod pokazuje najprostszy program napisany w języku C#. 
Program nic nie robi - jest pusty, ponieważ blok kodu metody Main nie 
zawiera żadnej instrukcji. 

Uwaga: 
Program w języku C# może zawierać kilka klas, Każda z klas może zawierać 
metodę Main. Punkt startowy programu jest określany przez nazwę klasy przy 
pomocy opcji kompilatora /main. W Visual Studio możemy ustawić to przy 
pomocy okna "Właściwości projektu" (menu Project/Nazwa Projektu 
Properties...), zakładka Application, lista rozwijana Startup object:. 

Najczęściej klasy umieszczane są w pewnych logicznych pudełkach na nazwy, 
które określane są jako przestrzeń nazw. Przestrzeń nazw definiuje się przy 
pomocy słowa namespace, po którym umieszcza się nazwę "pudełka" i blok 
kodu określający, co zawiera dana przestrzeń nazw.  

namespace PierwszyProgram 

 

class Program 

background image

 

 

 

static void Main(string[] args) 

 

 

 

 

 

Klasa w powyższym przykładzie ma teraz nazwę: 

PierwszyProgram.Program 

czyli składa się z nazwy przestrzeni nazw, znaku kropki oraz nazwy 
"właściwej" klasy. Jest to nazwa w pełni kwalifikowana. 

W programie można stosować nazwy skrócone - bez podawania nazwy 
przestrzeni nazw i znaku kropki. Umożliwia się to przez pokazanie na samej 
górze pliku źródłowego, które przestrzenie nazw kompilator powinien 
przeszukać w celu odnalezienia danej nazwy. Uzyskujemy to przy pomocy 
wyrazu using. 
Linijka 

 

using System; 

oznacza, że jeżeli kompilator nie rozpoznaje jakiejś nazwy w bieżącym 
kontekście, powinie sprawdzić przestrzeń nazw System. 

Jeden podzespół może zawierać kilka przestrzeni nazw. Przestrzeń nazw danej 
nazwie może występować w kilku podzespołach. 

 

background image

Ogólne zasady formatowania kodu 

 

 

Wewnątrz metody Main umieszcza się ciąg instrukcji. Każdą instrukcję kończy 
się znakiem średnika - ;. Przy pisaniu programu w C#, w odróżnieniu od takich 
języków jak Pascal czy Visual Basic, należy zwracać uwagę na wielkość liter. 
Na przykład, jeżeli zostanie użyta nazwa main zamiast Main, kompilator 
zgłosi błąd, że nie odnalazł punku startowego programu. 

Dla kompilatora nie ma znaczenia jak będzie rozmieszczony kod - białe znaki 
(spacje, tabulatory, znak przejścia do nowej linii) są ignorowane. Obowiązuje 
jednak pewien styl formatowania kodu. Każdą instrukcję umieszcza się w 
oddzielnej linii. Instrukcje będące w tym samy bloku kodu powinny mięć tę 
samą odległość od lewego marginesu - to samo wcięcie. Instrukcje w bloku 
kodu zagnieżdżonego powinny mieć większe wcięcie.  

 

instrukcja_bloku_głównego1 

 

instrukcja_bloku_głównego2 

 

 

 

instrukcja_bloku_zagnieżdżonego1 

 

 

instrukcja_bloku_zagnieżdżonego2 

 

 

instrukcja_bloku_głównego1 

background image

Visual Studio automatycznie formatuje wcięcia. Otwarcie nowego bloku przez 
wstawienie znaku nawiasu klamrowego otwierającego i naciśnięciu klawisza 
ENTER powoduje automatyczne zwiększenie lewego wcięcia. Wstawienie w 
nowej linii znaku nawiasu klamrowego zamykającego powoduje automatycznie 
zmniejszenie lewego wcięcia. 

Visual Studio również bardzo ułatwia pisanie kodu dzięki automatycznemu 
uzupełnianiu nazw (IntelliSense). W czasie pisanie Visual Studio podpowiada, 
jakie nazwy są dostępne wyświetlając menu kontekstowe. Można również 
wymusić pojawienie się menu kontekstowego przez naciśnięcie kombinacji 
klawiszy CTRL+SPACJA. 

Spójne stosowanie wcięć może znacznie uprzyjemnić czytanie i zrozumienie 
programu. Innym czynnikiem wpływającym na czytelność programu są 
komentarze. Komentarze są tekstami zupełnie ignorowanymi przez kompilator i 
mogą zwierać dowolny ciąg znaków. Zawierają najczęściej uwagi na temat 
szczegółów działania programu.  
W języku C# wyróżniamy dwa rodzaje komentarzy: 

 

komentarz rozpoczynający się od dwóch ukośników // i rozciągający 
się do końca wiersza. Komentarz ten można umieścić na początku 
wiersz lub za instrukcją: 
... 
//to jest komentarz 
instrukacja; 

//komentarz po instrukcji 

... 

 

komentarz rozpoczynający się od znaków /*, a który kończy się 
znakami */. Komentarz ten może rozciągać się przez wiele linijek. 
Komentarze tego typu nie mogą być w sobie zagnieżdżone. 
... 
instrukacja; 
/* tu się zaczyna komentarz 
tu nadal trwa 
tu się kończy*/ 
... 

W środowisku programistyczny Visual Studio specjalne znaczenie mają trzy 
ukośniki ///. Rozpoczynają komentarz, w którym umieszczamy znaczki 
XML-owe. Znaczniki określają cel komentarza i na ich podstawie może być 
wygenerowana dokumentacja. Visual Studio używa ich również przy 
wyświetlaniu podpowiedzi. 

 

background image

Operacje we-wy 

 

 

Wykonanie programu komputerowego polega często na wprowadzeniu danych, 
wykonaniu poszczególnych instrukcji programu oraz wyprowadzeniu 
uzyskanych wyników. Do wyprowadzenia uzyskanych wyników najczęściej 
służy ekran monitora, natomiast do wprowadzenia danych klawiatura. 
Urządzenia te często nazywane konsolą. 

Język C#, podobnie jak większość języków nie posiada bezpośrednio instrukcji 
współpracujących z konsolą. W bibliotece mscorlib.dll, w przestrzeni nazw 
System, zawarta jest klasa Console, która zawiera szereg metod służących 
do współpracy z konsolą. Podzespół mscorlib.dll jest domyślnie dodawany do 
każdego programu napisanego w języku C#. 

Do wypisywania tekstu na ekranie służy metoda Write. Stosuje się ją w 
następujący sposób: 

System.Console.Write("Tekst do wypisania"); 

czyli trzeba podać pełną ścieżkę gdzie znajduje się metoda, następnie otworzyć 
nawias okrągły i wewnątrz znaków cudzysłów podać tekst do wypisania na 
ekranie. Nie wolno zapomnieć o zamknięciu nawiasu okrągłego i postawieniu 
średnika. Stosując dyrektywę using, można pozbyć się nazwy przestrzeni nazw, 
czyli skorzystać z nazwy skróconej. Nazwy klasy nie można pominąć. 

using System 

...  

 

Console.Write("Tekst do wypisania"); 

... 

background image

Inną metodą klasy Console wyprowadzającą tekst na ekran jest WriteLine. 
Metoda WriteLine po wypisaniu tekstu na ekranie dodatkowo powoduje 
przejście do nowej linii.  

Do wczytania znaków z klawiatury służą odpowiednio metody klasy 
Console: Read i ReadLine. Metody te zatrzymują działanie programu 
dopóki użytkownik nie naciśnie klawisza <Enter>. Dokładniej operacje wejścia 
- wyjścia zostaną omówione w następnym rozdziale. 

Uwaga: 
Również do wczytania znaku służy metoda klasy Console.ReadKey. W tym 
przypadku program czeka tylko do mementu naciśnięcia dowolnego znaku - 
użytkownik nie musi naciskać klawisza <Enter>. 
Jeżeli nie chcemy, aby naciskany znak pojawił się na ekranie (wyłączmy echo), 
metodę tą należy wywołać w następujący sposób: 

 

Console.ReadKey(true); 

background image

Demo 1: Pierwszy program w C# 

 

 

W demonstracji zostanie pokazany sposób kompilacji programu z linii poleceń: 

1.  Uruchom program Notatnik lub WordPad

2.  Otwórz plik Kurs\Demo\Modul1\ Program1.cs, gdzie katalog Kurs jest 

katalogiem gdzie zostały skopiowane pliki kursu. 

3.  Przeanalizuj kod programu. 

4.  Naciśnij przycisk Start systemu Windows, wybierz Wszystkie Programy 

następnie Microsoft Visual Studio 2005/ Visual Studio Tools/ Visual 
Studio 2005 Command Prompt
. Uruchomienie w ten sposób wiersza 
poleceń zapewnia odpowiednie ustawienie zmiennych środowiskowych, 
miedzy innymi ścieżki dostępu do kompilatora języka C# (csc.exe). 

5.  W wierszu poleceń zmień bieżący katalog na: Kurs\Demo\Modul1 

6.  Skompiluj program następującym poleceniem:  

 

csc /out:Test.exe Program1.cs 

Opcji kompilatora /out używamy, gdy chcemy utworzyć plik exe o innej 
nazwie niż plik źródłowy. Dokładny opis opcji kompilatora można znaleźć 
w MSDN Library pod tematem " C# Compiler Options". 

7. 

Uruchom program przez napisanie w wierszu poleceń: 
Test.exe 

8.  Omów działanie program z szczególnym zwróceniem uwagi na metody 

Write oraz WriteLine. 

background image

Demo 2: Korzystanie z Visual Studio 

 

 

W środowisku Visual Studio nie można pracować na pojedynczym pliku 
źródłowym. Trzeba utworzyć coś, co się nazywa projektem. Projekt jest 
logicznym pojemnikiem na wszystkie elementy, który służą do budowy 
aplikacji. Fizycznie projekt jest reprezentowany przez plik XML z 
rozszerzeniem csproj. Opisuje on pliki źródłowe oraz inne elementy wchodzące 
w skład projektu, ich właściwości oraz właściwości samego projektu, np. czy 
produktem finalnym jest plik wykonywalny exe albo biblioteka dll. 

Projekt jest osadzony w innym kontenerze, który nazywany rozwiązaniem 
(solution)
. Rozwiązanie łączy ze sobą kilka projektów oraz zawiera pliki i 
metadane, które ułatwiają definiowanie rozwiązania jako spójnej całości. 
Obecnie tworzone oprogramowanie nie można zamknąć w jednym projekcie. 
Można wymienić choćby aplikację w architekturze klient-serwer, czy choćby 
aplikacja składająca się z pliku wykonywalnego oraz kilku bibliotek dll. Dzięki 
rozwiązaniu otrzymano łatwy sposób dostępu do wszystkich projektów, które 
są realizowane w trakcie budowy programu. Dostęp ten jest możliwy z 
pojedynczej uruchomionej instancji Visual Studio. Plik reprezentujący 
rozwiązanie ma rozszerzenie sln. Zawiera on informacje na temat projektów 
wchodzących w skład rozwiązania, odwołanie do dodatkowych elementów 
niezwiązanych z żadnym projektem oraz pewne ustawienia konfiguracyjne 
używane przy budowaniu poszczególnych typów projektu. Drugim plikiem 
związanym z rozwiązaniem jest plik z rozszerzeniem suo (Solution User 
Options). Jest to plik ukryty i specyficzny dla konkretnego użytkownika. 
Zawiera on pewne ustawienia dostosowujące rozwiązanie do użytkownika. 
Rozwiązanie jest często utożsamiane z folderem, w którym znajdują się pliki 
sln i suo oraz podkatalogi poszczególnych projektów. 

Gdy rozpoczyna się prace w Visual Studio nad nowym projektem musimy 
wybrać szablon aplikacji. Szablon aplikacji lub szablon projektu dostarcza 

background image

kolekcję plików koniecznych do rozpoczęcia pracy nad danym typem projektu 
wraz z szablonem kodu oraz odpowiednią strukturą i ustawieniami projektu.  

Demonstracja: 

1.  Uruchom Visual Studio 

Naciśnij przycisk Start systemu Windows, wybierz Wszystkie Programy 
następnie Microsoft Visual Studio 2005/ Microsoft Visual Studio 2005

2.  Utwórz nowy projekt 

a.  Z menu File wybierz New/Project... 

lub 
W oknie Start Page wybierz Create:  

Project... 

Okno Start Page zawiera również szereg odsyłaczy do najnowszych 
informacji związanych z środowiskiem Visual Studio jak i całą 
Platformą .NET. 

b.  W oknie dialogowy New Project  

 
Rys. 1.1 Okno dialogowe "New Project" 

i.  W drzewie Project types: rozwiń gałąź Visual C# i wybierz 

element Windows

ii.  W liście Templates: wybierz szablon Console Application

iii.  W polu edycyjnym Name: podaj nazwę projektu: Program1. 

iv.  W polu edycyjnym Location: wybierz miejsce na dysku gdzie 

będzie utworzony projekt przy pomocy przycisku Browse...Moje 
Dokumenty\Visual Studio 2005\Projects.
 

v.  Zaznacz pole wyboru Create directory for solution 

Zaznaczenie tego pola wyboru powoduje, że zostanie utworzony 
katalog dla rozwiązania, w którym zostaną umieszczone pliki 
rozwiązania (sln i suo) oraz w którym zostanie utworzony katalog 
projektu. Gdy pole jest niezaznaczone folder projektu jest również 
katalogiem rozwiązania. 

background image

Uwaga: 
Można utworzyć również puste rozwiązanie, bez projektu. W tym 
celu w drzewie Project types:  rozwiń gałąź Other Projects Types 
i wybierz element Visual Studio Solutions, a następnie w liście 
Templates: wybierz szablon Blank Solution. 

vi.  W polu edycyjnym Solution Name: podaj nazwę rozwiązania: 

Demo2. 

vii.  Naciśnij przycisk OK. 

3.  Uruchom Eksplorator Windows i pokaż, jakie pliki i katalogi zostały 

utworzone w systemie plików po utworzeniu aplikacji. 
Demo2 - katalog rozwiązania 
Demo2.sln - plik rozwiązania 
Demo2.suo - plik zawierający opcje skojarzone z rozwiązaniem 
Program1 - katalog projektu 
Program1.csproj - plik projektu 
Program.cs - plik zawierający kod programu 
Properties - katalog zwierający plik AssemblyInfo.cs  
AssemblyInfo.cs - plik służący do ustawienia właściwości podzespołu 
bin i obj - katalogi wykorzystywane przez środowisko w czasie procesu 
kompilacji. Zawierają również skompilowany kod. W większości 
przypadków Visual Studio potrafi automatycznie odtworzyć ich zawartość, 
więc podczas archiwizacji kodu można je skasować. 

4.  Zamknij okno programu Eksplorator Windows i przełącz się do programu 

Visual Studio. 

5.  Opisz główne okna środowiska Visual Studio 

 
 

 
Rys. 1.2 Graficzny interfejs środowiska programistycznego Visual Studio. 
 
Okno kodu (Code) - służy do pisania kodu źródłowego. Edytor kodu 

Code 

Solution Explorer 

Properties 

background image

dostarcza szereg właściwości ułatwiających tworzenie kodu takich jak:  
- kolorowanie kodu 
- ukrywanie bloków kodu (dyrektywa #region i #endregion) 
- automatyczne uzupełnianie i generowanie kodu (Code Snippets) 
- automatyczne przedefiniowanie kodu (Refactoring) 
- podpowiedzi 
- przeglądanie metadanych jako kodu źródłowego (metadata as source) 
Solution Explorer - umożliwia przeglądanie elementów wchodzących w 
skład poszczególnych projektów jak i rozwiązania. Daje również możliwość 
zarządzania (usuwanie elementu, dodawanie elementu, tworzenie struktury) 
zarówno pojedynczym projektem jak i całym rozwiązaniem przy pomocy 
menu kontekstowego. Ułatwia również poruszanie się po kodzie. Dwukrotne 
kliknięcie na plik w Solution Explorer powoduje pokazanie jego 
zawartości w oknie edytora kodu. 
Properties - okno pokazujące właściwości wybranego aktualnie elementu. 
Zaznaczając np. element reprezentujący rozwiązanie lub projekt w oknie 
Solution Explorer, możemy sprawdzić lokalizację pliku rozwiązania i 
projektu na dysku. 

6. 

Pokaż jak można ukrywać, pokazywać, zmieniać położenie okien. 
Dowolne okno można pokazać za pomocą odpowiedniej pozycji z menu 
View. Dotyczy to oczywiście również pasków narzędziowych.. 
Dowolne okno dokowalne (dockable) można zadokować (przytwierdzić) do 
dowolnej krawędzi okna głównego. Można je również połączyć w grupy. 
Gdy chcemy zmienić pozycję okna wystarczy je przeciągnąć za pasek 
tytułowy. W przypadku gdy chcemy oddzielić okno od grupy, "łapiemy" je 
za zakładkę (tab). 
W Visual Studio wprowadzono dodatkowe ikony, które pojawiają się w 
momencie gdy zaczynamy przeciągać okno i pokazują gdzie należy umieści 
kursor myszy, aby zadokować w danym miejscu przeciągane okno. 
W celu zwiększenia obszaru roboczego możemy włączy automatyczne 
ukrywanie się okien. Robimy to przy pomocy przycisku pineska -  . 

7. 

Wewnątrz bloku metody Main napisz następujący kod: 

  

static void Main(string[] args) 

  

  

 

Console.WriteLine("Język C# jest łatwy"); 

  

 

Console.ReadLine(); 

  

8.  Zbuduj program. 

Z menu Build  wybierz odpowiednią pozycję. Build Solution, Rebuild 
Solution, Build Program1, Rebuild Program1
 
Wybrani pozycji Build Solution  Rebuild Solution powoduje, że będą 
kompilowane pliki wszystkich projektów należących do rozwiązania. Build 
Solution 
kompiluje tylko pliki i komponenty, które były modyfikowane od 
ostatniej budowy. Rebuild Solution kompiluje wszystkie pliki.  
Analogicznie działają pozycje Build Program1 i Rebuild Program1, z tym 
że dotyczą tylko pojedynczego projektu.Program1 jest nazwą projektu, który 
ma być zbudowany. Jest to projekt zaznaczony w oknie Solution Explorer.  
Budując program możemy również skorzystać z paska narzędzi Build 

background image

Uwaga: 
W Visual Studio możemy tworzy dwie wersje programu wykonywalnego: 
- wersje Debug - wersja "rozwojowa", wspierająca pracę krokową 
- wersja Release - wersja na sprzedaż, zoptymalizowana. 

9.  Uruchom program ze środowiska Visual Studio 

Z menu Build wybierz odpowiednią pozycję Start Debugging lub Start 
Without Debugging.  
Start Debugging 
- rozpoczyna pracę programu debugger- pracę krokową, 
odpowiednio Start Without Debugging uruchamia tylko program, bez 
programu debugger. Program możemy również uruchomić w trybie pracy 
krokowej przy pomocy przycisku 

,który znajduje się na pasku narzędzi 

Standard

10.  Uruchom program w systemie Windows. 

a.  Uruchom program Eksplorator Windows. 

b.  Przejdź do katalogu Moje Dokumenty\Visual Studio 2005\Projects\ 

Demo2\Program1\bin\Debug. 

c.  Uruchom program Program1.exe 

d.  Zamknij uruchomiony program i Eksplorator Windows. 

11.  W środowisku Visual Studio pokaż, jak są pokazywane informacje na temat 

błędów kompilacji. 

a.  W linijce kodu:  

Console.WriteLine("Język C# jest łatwy"); 
skasuj zamykający cudzysłów. 

b.  Zauważ, że kod jest podkreślony czerwoną falowaną linią. 

c.  Pokaż okno Error List. 

Okno Error List zawiera błędy, ostrzeżenia oraz komunikaty tworzone 
przez edytor kodu jak i kompilator. Dwukrotne kliknięcie na linijkę z 
danym błędem, powoduje otwarcie pliku i przeniesienie w miejsce 
gdzie jest prawdopodobne źródło danego błędu. 

d.  Spróbuj zbudować program. 

e.  Pokaż okienko Output. 

Okno to wyświetla różne informacje związane z różnymi cechami 
zintegrowanego środowiska programistycznego (IDE). Między innymi 
wyświetla również komunikaty kompilatora. 

f.  Popraw błąd w kodzie programu i zbuduj program. 

12.  Dołącz do bieżącego rozwiązania nowy pusty projekt. 

a.  Z menu File wybierz Add/New Project... 

b.  W oknie dialogowym Add New Project, dla typu projektu Visual 

C#/Windows wybierz szablon Empty project i nadaj mu nazwę 
Program2. Naciśnij przycisk OK. 

13.  Do nowego projektu dołącz istniejący plik źródłowy. 

a.  W oknie Solution Explorer zaznacz element reprezentujący nowo 

utworzony projekt. 

background image

b.  Z menu Project wybierz pozycję Add Existing Item 

c.  W oknie dialogowym Add Existing Item - Program2 przejdź do 

katalogu Kurs\Demo\Modul1, gdzie katalog Kurs jest katalogiem, do 
którego zostały skopiowane pliki kursu. Wybierz plik Program1.cs. 
Naciskając przycisk Add powodujemy skopiowanie wybranego pliku 
do katalogu naszego projektu. Można też utworzyć tylko dowiązanie 
do pliku - Add As Link. 

14.  Ustaw projekt Program2 jako projekt startowy. 

Projekt startowy jest to projekt, który domyślnie jest uruchamiany. Jego 
nazwa jest napisana czcionką pogrubioną. 

a.  W oknie Solution Explorer kliknij prawym klawiszem element 

reprezentujący projekt Program2.  

b.  Z menu kontekstowego wybierz Set as StartUp Project 

15.  Zbuduj i uruchom projekt Program2. 

 

background image

Podsumowanie 

 

 

Na obecnym etapie student powinien::  

 

Znać podstawowe pojęcia z algorytmiki. 

 

Wiedzieć co to jest Platforma .NET 

 

Potrafić korzystać ze środowiska Visual Studio 

background image

Pytania sprawdzające 

 

 

1.  Wymień cechy charakterystyczne dla algorytmu. 

 
Odp. 
Cechy wynikające prosto z definicji to skończoność i określoność. Inne 
cechy, którymi możemy opisywać algorytm to: poprawność, efektywność 
(czas realizacji, zajętość pamięci), ogólność, czytelność, prostota, długość 
kodu. 

2.  Jakim symbolem oznaczamy blok warunku? 

 
Odp. 

 

3.  W którym miejscu rozpoczyna się wykonywać program w języku C#? 

 
Odp. 
Program w języku C# rozpoczyna się od metody Main, która może mieć 
jedną z poniższych postaci: 
static int Main(string[] args) 
static int Main() 
static void Main(string[] args) 
static void Main() 

Warunek 

Tak 

Nie 

background image

4.  Kiedy program w C# kończy działanie? 

 
Odp. 
Program w języku C# kończy się po wykonaniu instrukcji tuż przed 
nawiasem klamrowym zamykającym blok kodu metody Main lub po 
wywołaniu instrukcji return wewnątrz metody Main. 

5.  Połącz rozszerzenia plików z odpowiednim opisem. 

1. *.cs 

a) plik projektu 

2. *.sln 

b) opcje rozwiązania 

3. *.suo 

c) plik z kodem 

4. *.csproj 

d) plik rozwiązania 

 
Odp. 
1c, 2d, 3b, 4a. 

6.  Jakich symboli używamy do oznaczenia komentarza w C#? 

 
Odp. 
Do oznaczenia komentarzy w języku C# używamy następujących symboli: 
- // - komentarz do końca linii 
- /* ...*/ - komentarz "blokowy". 

 

 

background image

Laboratorium 

 

 

Ćwiczenie 1 
Utworzenie programu, który wypisuje na ekranie powitanie i czeka na reakcje 
użytkownika. Potem wypisuje "Koniec" i znów czeka na reakcję użytkownika i 
następnie kończy działanie. 

1.  Uruchom Visual Studio 

Naciśnij przycisk Start systemu Windows, wybierz Wszystkie Programy 
następnie Microsoft Visual Studio 2005/ Microsoft Visual Studio 2005

2.  Utwórz nowy projekt 

a.  Z menu File wybierz New/Project... 

b.  W oknie dialogowym New Project określ następujące właściwości: 

i.   typu projektu: Visual C#/Windows  

ii.   szablon: Console Application  

iii.  lokalizacja: Moje Dokumenty\Visual Studio 2005\Projects\ 

iv.  nazwa projektu: Powitanie.  

v.  nazwa rozwiązania: Lab1 

3.  Do metody Main dodaj następujący kod. 

   Console.WriteLine("Witam Pana(ią) imie nazwisko"); 

   Console.ReadKey(true); 

   Console.Write("Koniec"); 

background image

   Console.ReadKey(true); 

W miejsce wyrazów imię i nazwisko wprowadź swoje własne imię i nazwisko. 

4.  Skompiluj i uruchom program. 

5.  Zamknij Visual Studio. 

 

 

Ćwiczenie 2 
Poprawianie błędów w istniejącym programie. 

1.  Uruchom Visual Studio  

2.  Otwórz rozwiązanie Kurs\Lab\Modul1\Start\Start.sln, gdzie 

Kurs jest katalogiem, gdzie została skopiowana zawartość kursu. (Menu 
File, element Open,  następnie Project/Solution...

3.  Spróbuj skompilować program. 

4.  Korzystając z okna Error List lub Output popraw błędy w programie. 

Po poprawieniu błędów program może wyglądać następująco: 

using System; 

namespace Bledy 

  class Program 

  { 

    static void 

M

ain(string[] args) 

    { 

       Console.WriteLine("Zrobił wilk elektrownię, lecz 
¬ by prąd uzyskać

"

); 

       Console.WriteLine("Spalał w niej cały węgiel z  
¬kopalni od liska."); 

       Console.WriteLine(

"

Kopalnia z elektrowni cały  

¬prąd zżerała,"); 

       Console.WriteLine("Stąd brak światła i węgla. Ale  
¬system działa!"); 

       Console.WriteLine(); 

       Console.WriteLine("Andrzej Waligórski")

;

 

       

Console.

ReadLine(); 

     } 

  

5.  Uruchom program.  

background image