Modul1, Courseware Development Tools


Wprowadzenie

Przegląd zagadnień

0x08 graphic

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ędzie używane środowiska programistycznego Visual Studio.

Po skończeniu tego ćwiczenia studenci powinni:

0x08 graphic
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

0x08 graphic

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 problemy najczęściej formułujemy w języku naturalnym, ale język naturalny nie jest jednoznaczny i precyzyjny. Co jest dobre dla satyryka i poety oraz niestety dla niektórych polityków, nie jest dobre dla inżyniera.

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:

  1. skończoność - rozwiązuje problem w ograniczonej liczbie kroków, musi mieć swój koniec

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

  1. 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

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

  1. ogólność - czy algorytm odnosi się do konkretnego, szczególnego przypadku (bardzo ograniczone dane wejściowe) lub odnosi się do pewnej klasy zadań

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

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

  4. 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.

0x08 graphic
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:

0x08 graphic
0x01 graphic

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

0x08 graphic

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.

0x08 graphic

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.

0x08 graphic

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

0x08 graphic

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.

0x08 graphic

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.

0x08 graphic

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.

0x08 graphic

Łą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.

0x08 graphic

Łącznik zewnętrzny (międzystronicowy)

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

0x08 graphic

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.

0x08 graphic

0x08 graphic
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:

Program komputerowy

0x08 graphic

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

0x08 graphic
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:

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
.

Środowisko programistyczne Visual Studio

0x08 graphic

Poszczególne konstrukcje językowe będziemy poznawać na przykładzie języka C#. Język C# jest językiem zorientowanym obiektowo, 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ł:

Platforma .NET

0x08 graphic

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 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/default.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.

Język pośredni - IL

0x08 graphic

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.

Podzespół (Assembly)

0x08 graphic

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:

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 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).

0x08 graphic
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)

{

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

{

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.

0x08 graphic
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

}

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:

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.

0x08 graphic
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");

...

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);

0x08 graphic
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".

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

        2. Omów działanie program z szczególnym zwróceniem uwagi na metody Write oraz WriteLine.

0x08 graphic
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 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

    1. 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.

    2. 0x08 graphic
      W oknie dialogowy New Project

      Rys. 1.1 Okno dialogowe "New Project"

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

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

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

      4. W polu edycyjnym Location: wybierz miejsce na dysku gdzie będzie utworzony projekt przy pomocy przycisku Browse...: Moje Dokumenty\Visual Studio 2005\Projects.

      5. 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.
        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.

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

      7. 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. 0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    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 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 - 0x01 graphic
    .

  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();

}

  1. 0x08 graphic
    Zbuduj program.
    Z menu Build wybierz odpowiednią pozycję. Build Solution, Rebuild Solution, Build Program1, Rebuild Program1
    Wybrani pozycji Build Solution i 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
    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.

  2. 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 0x01 graphic
    ,który znajduje się na pasku narzędzi Standard.

  3. Uruchom program w systemie Windows.

    1. Uruchom program Eksplorator Windows.

    2. Przejdź do katalogu Moje Dokumenty\Visual Studio 2005\Projects\ Demo2\Program1\bin\Debug.

    3. Uruchom program Program1.exe

    4. Zamknij uruchomiony program i Eksplorator Windows.

  4. W środowisku Visual Studio pokaż, jak są pokazywane informacje na temat błędów kompilacji.

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

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

    3. 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.

    4. Spróbuj zbudować program.

    5. 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.

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

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

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

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

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

    1. W oknie Solution Explorer zaznacz element reprezentujący nowo utworzony projekt.

    2. Z menu Project wybierz pozycję Add Existing Item

    3. 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.

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

    1. W oknie Solution Explorer kliknij prawym klawiszem element reprezentujący projekt Program2.

    2. Z menu kontekstowego wybierz Set as StartUp Project

  8. Zbuduj i uruchom projekt Program2.

0x08 graphic
Podsumowanie

Na obecnym etapie student powinien::

<

Pytania sprawdzające

0x08 graphic

  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. 0x08 graphic
    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()

  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".

0x08 graphic
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

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

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

      1. typu projektu: Visual C#/Windows

      2. szablon: Console Application

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

      4. nazwa projektu: Powitanie.

      5. 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");

Console.ReadKey(true);

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

  1. Skompiluj i uruchom program.

  2. 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 Main(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();

}

}

}

  1. Uruchom program.

0x01 graphic

Pojęcia programowania zorientowanego obiektowo (polimorfizm, kapsułkowanie, dziedziczenie...) są poza zakresem tego kursu. Można się z nimi zapoznać w kursie "Programowanie obiektowe".

Start

Stop

Properties

Nie

Tak

% - reszta z dzielenia

= = - porównanie

Czy a % 2 = = 0

?

a - liczba całkowita

Podaj wartość liczby a:

Code

Start

Stop

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

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

Nie

Tak

Warunek

0x01 graphic

Solution Explorer

L

L



Wyszukiwarka

Podobne podstrony:
Modul12, Courseware Development Tools
Modul2, Courseware Development Tools
Modul9, Courseware Development Tools
Modul3, Courseware Development Tools
Modul7, Courseware Development Tools
Modul8, Courseware Development Tools
Modul6, Courseware Development Tools
4 ABAP Development Tools
GameBoy Development Tools
101 Learning and Development Tools Rok wydania 2011 oprawa miekka
Developing Usability Tools And Techniques For Designing And Testing Web Sites
A Grammar Development Course
A Grammar Development Course
Course hydro pl 1
modul14
4 Plant Structure, Growth and Development, before ppt
Marketing Management Course

więcej podobnych podstron