6568

Szczegóły
Tytuł 6568
Rozszerzenie: PDF
Jesteś autorem/wydawcą tego dokumentu/książki i zauważyłeś że ktoś wgrał ją bez Twojej zgody? Nie życzysz sobie, aby podgląd był dostępny w naszym serwisie? Napisz na adres [email protected] a my odpowiemy na skargę i usuniemy zabroniony dokument w ciągu 24 godzin.

6568 PDF - Pobierz:

Pobierz PDF

 

Zobacz podgląd pliku o nazwie 6568 PDF poniżej lub pobierz go na swoje urządzenie za darmo bez rejestracji. Możesz również pozostać na naszej stronie i czytać dokument online bez limitów.

6568 - podejrzyj 20 pierwszych stron:

O Prosz� nie czyta� tego ! Zaprzyja�nijmy si� ! Je�li mamy ze sob� sp�dzi� par� godzin, to proponuj� - przejd�my na �ty". Moje nazwisko zobaczy�e� ju� na ok�adce, dodam wi�c tylko, �e ksi��ka ta powsta�a na podstawie moich do�wiadcze� jako programisty w Hahn-Meitner Institut w Berlinie - dawniej Zachodnim. Jestem oczarowany jasno�ci�, prostot� i logik� programowania w j�zyku C++ i dlatego proponuj� Ci sp�dzenie ze mn� paru chwil w krainie programowania obiektowo orientowanego. Wst�pne za�o�enie Ksi��ka ta jest napisana z my�l� o czytelnikach, kt�rzy znaj� cho�by jeden j�zyk programowania - wszystko jedno, czy to b�dzie BASIC czy j�zyk C. Musz� przyzna�, �e pocz�tkowo odczuwa�em pokus� napisania ksi��ki dla czytel- nik�w znaj�cych j�zyk C, jednak gdy zorientowa�em si�, �e na polskim rynku �C" ma opini� jakiego� trudnego j�zyka dla specjalist�w - postanowi�em zacz�� prawie od zera. Prawd� m�wi�c obecnie j�zyk C jest ju� j�zykiem starym. Na przestrzeni lat dostrzegano jego liczne niedoskona�o�ci. Powsta�a te� rewolucyjna idea progra- mowania obiektowo orientowanego, kt�ra opr�cz swej elegancji ma aspekt wymierny - pozwala oszcz�dzi� tysi�ce dolar�w wydawanych na prac� zespo- ��w programist�w pracuj�cych nad du�ymi projektami. �rodowisko progra- mist�w od dawna oczekiwa�o na pojawienie si� czego� (jeszcze) lepszego ni� C. Gdy pojawi� si� j�zyk C++ ��cz�cy w sobie prostot� programowania klasy- cznego C i mo�liwo�� programowania obiektowo orientowanego � przyj�ty zosta� z ogromnym entuzjazmem. instytut bada� j�drowych Prosz� nie czyta� tego ! Czym jest programowanie technik� obiektowo orientowan�? Dlaczego to taka sensacja i rewolucja? Najkr�cej m�wi�c polega ono na zmianie sposobu my�lenia o programowaniu. Przypomnij sobie jak to jest, gdy musisz napisa� program w znanych Ci do tej pory j�zykach programowania. Wszystko jedno czy to b�dzie program na sterowanie lotem samolotu, czy program na obs�ug� eksperymentu fizycznego. Ot� najpierw starasz si� ten kawa�ek rzeczywisto�ci, kt�ry masz oprogra- mowa�, wyrazi� za pomoc� liczb - zmiennych wyst�puj�cych w programie. Dziesi�tki takich zmiennych s� (lu�no) rozrzucone po Twoim programie, a sa- mo napisanie programu, to napisanie sekwencji dzia�a� na tych liczbach. Ten sam problem w uj�ciu obiektowo orientowanym rozwi�zuje si� tak, �e w programie buduje si� ma�e i wi�ksze modele obiekt�w �wiata realnego, po czym wyposa�a si� je w zachowania i po prostu pozwala si� im dzia�a�. Obiek- tem mo�e by� ster kierunku samolotu, czy te� uk�ad elektroniczny przetwarza- j�cy jaki� sygna�. Gdy takie modele ju� w programie istniej�, wydaj� sobie nawzajem polecenia - np. obiekt dr��ek sterowy wydaje polecenie sterowi kierunku, aby wychyli� si� 7 stopni w prawo. Obiekty nie pouczaj� si� jak co� trzeba zrobi�, tylko m�wi� co trzeba zrobi�. Programowanie t� technik� - poza tym, �ejest logiczne, bo odzwierciedla relacje istniej�ce w �wiecie rzeczywistym - programowanie t� technik� dostarcza po prostu dobrej zabawy. Argument o dobrej zabawie nie przekona�by oczywi�cie nigdy szef�w du�ych zespo��w programist�w � dla nich najwa�niejszy jest fakt, �e ta technika pozwala, by programi�ci znali si� tylko na swoim kawa�ku pracy bez konieczno�ci opanowywania ca�o�ci olbrzy- miego projektu. Pozwala ona te� na bardzo �atwe wprowadzanie powa�nych modyfikacji do programu - bez konieczno�ci anga�owania w t� prac� ca�o�ci zespo�u. Dla tego ostatniego - programowanie obiektowo orientowane jest wr�cz jakby stworzone. Te cechy s� �atwo przeliczane na pieni�dze - nak�ady finansowe na prac� zespo�u. Jest tak�e pow�d dla kt�rego j�zyk C++ zrobi� karier� nawet w�r�d pro- gramist�w pracuj�cych pojedynczo, a tak�e w�r�d amator�w. Ot� j�zyk ten pozwala na �agodne przej�cie z klasycznych technik programowania na tech- nik� obiektowo orientowan�. Ta cecha nazywana jest hybrydowo�ci� j�zyka C++. W programie mo�na technik� OO stosowa� w takim stopniu w jakim si� j� opanowa�o. Tak te� dzieje si� najcz�ciej - programi�ci wybieraj� sobie z niego najpierw tylko same �rodzynki" i je stosuj�, a w ka�dym nast�pnym programie si�gaj� po co� wi�cej. W j�zyku C++ mo�na pisa� nawet programy nie maj�ce z technik� OO nic wsp�lnego. Tylko, �e to tak, jakby zwiedza� Granad� maj�c zamkni�te oczyf). t) "...kobieto, daj ja�mu�n� �lepcowi, bo nie ma wi�kszego nieszcz�cia ni� by� �lep- cem w Granadzie..." Do�� na tym. O technice OO porozmawiamy jeszcze wielokrotnie. Teraz chcia�- bym wyt�umaczy� si� z paru spraw. Dlaczego ta ksi��ka jest taka gruba? Nie wynika to wcale z faktu by j�zyk C++ by� tak trudny. Uzna�em tylko, �e to, co uczy naprawd� - to przyk�ady. W ksi��ce wi�c opr�cz �teorii" s� setki przyk�adowych program�w, a ka�dy jest szczeg�owo om�wiony. Przyk�adom towarzysz� wydruki pokazuj�ce wygl�d ekranu po wykonaniu programu. To wszystko w�a�nie sprawia, �e ksi��ka jest tak obszerna. Jednak wydruki te za��czam w prze�wiadczeniu, �e cz�sto �atwiej zorientowa� si� �co program robi" - rzucaj�c okiem na taki wydruk (ekran). Dopiero potem radz� analizowa� sam program. Do wykonania przyk�adowych program�w u�y�em kompilatora Borland C++ v 3.1 (komputer IBM PC) gdy� s�dz�, �e jest to kompilator, z kt�rym przeci�tny polski czytelnik mo�e si� spotka� najcz�ciej. Oczywi�cie w ksi��ce zajmujemy si� samym j�zykiem C++ - wi�c powinna Ci ona pom�c niezale�nie od tego, z kt�rym komputerem i typem kompilatora masz do czynienia. Wersja j�zyka Sam j�zyk C++ ci�gle si� unowocze�nia. Opisuj� go tu bez tzw. templates i exception handling, jako �e w tej wersji istniej� na razie tytu�em eksperymentu . Absolutnym autorytetem w sprawie j�zyka by�a dla mnie ksi��ka (tw�rcy tego j�zyka) Bjarne'a Stroustrup'a i Margaret A. Ellis - The Annotated C++ Reference Manua�. W razie jakichkolwiek niejasno�ci odsy�am do niej. (Uprzedzam jed- nak, �e jest napisana w bardzo sformalizowanym stylu i nie jest pomy�lana jako podr�cznik do nauki). W tek�cie czasem wspominam o wersji j�zyka. Pami�ta� nale�y, �e termin wersja j�zyka nie ma nic wsp�lnego z wersj� kompilatora. Wersja kompilatora to wersja konkretnego dostarczonego Ci produktu. Tymczasem wersja j�zyka to regu�y gry, wed�ug kt�rych ten kompilator post�puje. Pi�ro Kto� kiedy� powiedzia�, �e s� dwa style pisania - pierwszy to: �-popatrzcie jaki ja jestem m�dry" - a drugi to : �-popatrzcie jakie to proste". Ja w tej ksi��ce wybieram ten drugi wariant w prze�wiadczeniu, �e pr�dzej zaprowadzi do celu. Z drugiej strony wiem, �e bezpo�redni, wr�cz kolokwialny styl tej ksi��ki, zupe�nie naturalny w ksi��kach na Zachodzie - w Polsce mo�e zaskoczy� nie- kt�rych czytelnik�w. t) Uwaga do bie��cego wydania: Poniewa� dzi� ju� wiadomo, �e ten eksperyment by� udany i owe poj�cia wesz�y do C++ na sta�e - po�wi�ci�em im osobn� ksi��k� pod tytu�em �Pasja C++". S� w niej om�wione szablony funkcji, szablony klas, klasy pojemnikoWe i obs�uga sytuacji wyj�tkowych. Zajrzyj do niej je�li ju� przeczytasz �Symfoni� C++" i j� polubisz. Dla kogo jest ta ksi��ka? Pisz�c t� ksi��k� musia�em najpierw okre�li� sobie czytelnika, dla kt�rego jest ta ksi��ka. Ot� jest ona dla tzw. szerokiego grona czytelnik�w. Pisa�em j� tak, by by�a podr�cznikiem dla czternastoletniego programisty amatora, jak i dla zawodowego informatyka. Trudno te sprawy pogodzi�, wi�c s� w niej kom- promisy w obu kierunkach. Co do jednego z takich kompromis�w mam najwi�- cej obaw: Czo�em bracia angli�ci! Gdy s�ysza�em, jak pocz�tkuj�cy programi�ci wymawiaj� wyst�puj�ce w j�zyku C++ angielskie s�owa takie jak np. �unsigned", �yolatile", �width" � postano- wi�em w miejscach, gdzie si� pojawiaj� po raz pierwszy - zamie�ci� adnotacje 0 ich wymowie. Wymowa podana jest nie w transkrypcji fonetycznej, ale za pomoc� polskich liter. Wiem, �e fakt ten mo�e razi� wielu czytelnik�w. Prosz� wtedy o wyrozumia�o�� - pami�tajcie, �e ta ksi��ka ma s�u�y� r�wnie� malucz- kim. Wymowa podana jest chy�kiem - w przypisie, w nawiasie, a w dodatku jeszcze w cudzys�owie - wi�c nie trzeba jej koniecznie czyta�. Spodziewam si�, �e fakt zamieszczenia wymowy nie b�dzie przeszkadza� Czytelnikom, kt�rzy j�zykiem angielskim pos�uguj� si� na codzie� od lat - ale na pewno wzbudzi protest tych, kt�rzy angielskiego nauczyli si� przedwczoraj. A swoj� drog�, to nawet w�r�d moich koleg�w fizyk�w i programist�w - nie spotka�em poprawnie wymawiaj�cych s�owo: �width". A teraz o strukturze tej ksi��ki Mo�na j� podzieli� na dwie zasadnicze cz�ci - t� klasyczn�, opisuj�c� zwyk�e narz�dzia programowania, i drug� (zaczynaj�c� si� od rozdzia�u o klasach) opisuj�c� narz�dzia do programowania obiektowo orientowanego. Po tym nast�puje rozdzia� omawiaj�cy operaqe wej�cia/wyj�cia - czyli sposoby pracy z takimi urz�dzeniami zewn�trznymi jak klawiatura, ekran, dyski magnety- czne. Wreszcie nast�puje rozdzia� o projektowaniu programu obiektowo orien- towanego - zawieraj�cy szczeg�owy instrukta�. Uzna�em te sprawy za bardzo wa�ne, gdy� cz�sto programista maj�c w r�ce to doskona�e narz�dzie progra- mowania, jakim jest C++, nie wie, co z nim pocz��. Metod� kolejnych przybli�e� Nie licz� na to, �e czytaj�c t� ksi��k� zrozumiesz wszystko od razu. Wr�cz przeciwnie - w tek�cie wielokrotnie sugeruj�, by� opu�ci� niekt�re paragrafy przy pierwszym czytaniu ksi��ki. Nie wszystkie aspekty s� wa�ne ju� na samym pocz�tku nauki. Lepiej mie� najpierw og�lny pogl�d, a dopiero potem zag��bia� si� w trudniejsze szczeg�y. Licz�c na to, �e po pierwszym czytaniu ca�o�ci w niekt�re miejsca wr�cisz - pewne fragmenty tekstu opatrzy�em adno- tacj�: �dla wtajemniczonych". S� tam uwagi wybiegaj�ce nieco do przodu, ale dotycz�ce spraw, kt�re po pierwszym czytaniu b�dziesz ju� przecie� zna�. Nie szanuj tej ksi��ki. Przygotuj sobie kolorowe (tzw. niekryj�ce) flamastry 1 czytaj�c zakre�laj wa�ne dla Ciebie wyrazy czy my�li. Na marginesach pisz o��wkiem swoje uwagi i komentarze. Chocia�by mia�y to by� teksty typu �Co za bzdura!" albo �Nie rozumiem dlaczego ..." albo �por�wnaj dwie strony me czyta� tego : wcze�niej". Ta aktywno�� zaprocentuje Ci natychmiast, bo maj�c tak osobisty stosunek do tekstu, �atwiej koncentrowa� na nim uwag� - co jest warunkiem sine quo. non szybkiej nauki. Je�li znasz j�zyk C �klasyczny" (czyli tzw. ANSI C) to zapewne pierwsze rozdzia�y b�d� dla Ciebie wyra�nie za �atwe. Mimo to radz� je przejrze� chocia� pobie�nie, gdy� wyst�puj� pewne r�nice w j�zykach C i C++ - nawet na tym etapie (oczywi�cie na korzy�� C++). Gor�co natomiast zach�cam do uwa�nego przeczytania rozdzia�u o wska�ni- kach. Z do�wiadczenia wiem, �e te sprawy zna si� zwykle najgorzej. Tymczasem zar�wno w klasycznym C jak i w C++ wska�nik jest bardzo wa�nym i po�y- tecznym narz�dziem. Dlatego ten rozdzia� tak rozbudowa�em. Podzi�kowania Winien jestem wdzi�czno�� przyjacio�om, kt�rzy w jaki� spos�b przyczynili si� do powstania tej ksi��ki. Byli to: Sven Blaser, Olaf Boebel, Johannes Diemer, Jeffrey Erxmeyer, Bengt Skogvall, Kai Sommer, Klaus Spohr, Joachim Steiger i Detlef Weidenhammer. Zupe�nie wyj�tkowe podzi�kowania nale�� si� Sycylij- czykowi Pierpaolo Figuera za wiele godzin, kt�re mi po�wi�ci�. Poniewa� ta ksi��ka pisana by�a od razu po polsku, dlatego �aden z nich nigdy jej nie czyta�. Wszystko, co dobre w tej ksi��ce, jest jednak ich zas�ug�, wszystko co z�e - to wy��cznie moja wina. Jestem winien wdzi�czno�� pierwszym czytelnikom tej ksi��ki: Mirkowi Zi�bli�skiemu i Bo�enie Potempie. Ich uwagi krytyczne spra- wi�y, �e ksi��ka sta�a si� lepsza, ich uwagi pozytywne - zawsze wprawia�y mnie w dobry nastr�j. Oczywi�cie na pewno niejedno da si� w tej ksi��ce poprawi�. Je�li b�dziesz mia� jakie� uwagi, to prosz� przy�lij mi je poczt� elektroniczn� na adres: [email protected] lub poczt� tradycyjn� na adres wydawnictwa. Z g�ry wyra�am moj� wdzi�cz- no�� za nawet najdrobniejsze przyczynki. Kod �r�owy przyk�adowych program�w z tej ksi��ki mo�na sobie �atwo sprowadzi� z moich stron WWW w Internecie. Jej obecny adres to: http://www.ifj.edu.pl/~grebosz Nawet je�li ten adres si� kiedy� zmieni - �atwo znale�� now� lokalizacj� robi�c tzw. search has�a "SYMFONIA C++", lub mojego nazwiska. Na koniec wypada mi si� wyt�umaczy� z tytu�u tego wst�pu. Chcia�em tu powiedzie� par� wa�nych, ale i troch� nudnych spraw. Wiedz�c, �e czytelnicy najcz�ciej opuszczaj� wst�py - da�em taki tytu� podejrzewaj�c, �e zakazany owoc najlepiej smakuje. Startujemy ! A by pisa�, trzeba pisa�.... - Tak� rad� zwyk�o si� dawa� pocz�tkuj�cym literatom. T� sam� zasad� mo�na zastosowa� do pisz�cych programy. Pro- gramowa� w danym j�zyku mo�na nauczy� si� tylko pisz�c w nim programy. Dlatego bez dalszych wst�p�w napiszmy nasz 1.1 Pierwszy program * #include <iostream.h> main() { cout << "Witamy na pok�adzie" ; } Wykonanie tego programu spowoduje pojawienie si� na ekra- nie tekstu: Witamy na pok�adzie Przyjrzyjmy si� bli�ej temu programowi W ka�dym programie w j�zyku C++ musi by� specjalna funkcja zwana main.+) Od tej funkcji zaczyna si� wykonywanie programu. Tre�� tej funkcji - jej cia�o - czyli innymi s�owy instrukcje wykonywane w ramach tej funkcji - zawarte s� mi�dzy dwoma nawiasami klamrowymi: {} +) main - ang. g��wna (czytaj: �mejn"). Uwaga zecerska: je�li z przyczyn typograficznych przypis nic mo�e pojawi� si� u do�u strony, nale�y go szuka� na stronie nast�pnej. Rozdz. l. Startujemy ! Pierwszy program 7 W naszym wypadku w funkcji main jest tylko jedna instrukcja cout << "Witamy na pok�adzie" ; kt�ra sprawia, �e na standardowym urz�dzeniu wyj�ciowym cout - czyli po prostu na ekranie - ma si� pojawi� tekst, zamieszczony tu w cudzys�owie. Skr�t cout wymawia si� po polsku Si-aut. (B�agam, tylko nie: �i-aut!) Znaki << oznaczaj� w�a�nie akcj�, kt�r� ma podj�� cout - czyli wyprowadzi� na ekran tekst. Umieszczony na ko�cu �rednik jest znakiem ko�ca instrukcji. Operacje wej�cia/wyj�cia Nale�y tu wyra�nie podkre�li�, �e operacje zwi�zane z wprowadzaniem i wy- prowadzaniem informacji na urz�dzenia takie, jak np. ekran - czyli tzw. opera- cje wej�cia/wyj�cia - nie s� cz�ci� definicji j�zyka C++. Podprogramy od- powiedzialne za to s� w jednej ze standardowych bibliotek, w kt�re zwykle wyposa�ane s� kompilatory. Aby�my mogli z takiej biblioteki skorzysta� w pro- gramie, musimy na pocz�tku umie�ci� linijk� #include <iostream.h> kt�ra oznacza, �e �yczymy sobie, by kompilator przed przyst�pieniem do pracy nad dalszymi linijkami programu wstawi� w tym miejscu tak zwany pli� nag��wkowy biblioteki iostream. Dla zainteresowanych dodam, �e ten�e plik nag��wkowy biblioteki zawien dok�adne deklaracje funkcji bibliotecznych, z kt�rych ewentualnie mo�ni korzysta�. Dzi�ki temu, �e kompilator zapoznaje si� z tymi deklaracjami mo�e od tej pory sprawdza� nas czy pos�ugujemy si� tymi funkcjam poprawnie. To bardzo korzystna cecha. Bibliotek� t� zajmiemy si� bli�ej pod koniec tej ksi��ki. Wolny format zapisu programu A teraz uwaga natury og�lnej. Program pisze si� umieszczaj�c kolejne instrukcji w linijkach jedna pod drug�. Ot� w niekt�rych j�zykach programowania (np FORTRAN'ie, BASIC'u) obowi�zuj� �cis�e regu�y okre�laj�ce pozycj� (w linijce l na kt�rej dany sk�adnik instrukcji mo�e si� znale��. Np. w FORTRAN'ie - Je�li chcemy umie�ci� znak komentarza, to stawiamy g< w kolumnie pierwszej, je�li ma to by� numer etykiety - to do tego s�u�� kolumn* 1-5, je�li chcemy umie�ci� znak kontynuacji z poprzedniej linijki � to umiesz czarny go w kolumnie sz�stej. Podobnie w BASICu - linia instrukcji musi si� zacz�� od numeru etykiety. W j�zyku C++ jest inaczej. J�zyk C++ (podobnie jak C) jest j�zykiem o tzv wolnym formacie. Kr�tko m�wi�c - nie ma �adnych przymus�w. Wszystk mo�e znale�� si� w ka�dym miejscu linii, a nawet zosta� rozpisane na l O linijel Poza nielicznymi sytuacjami, w dowolnym miejscu instrukcji mo�na przej�� d' t) od ang. C-onsole OUT-put tt) ang. include (czytaj: �inklud") i-ierwszy program nowej linii i tam kontynuowa� pisanie. To dlatego, �e koniec instrukcji okre�lany jest nie przez koniec linii, ale przez �rednik, kt�ry stawiamy na ko�cu. Bia�e znaki Wewn�trz instrukcji mo�na postawi� dodatkowe znaki spacji i tabulatory, czy nawet znaki nowej linii. S� to tzw. bia�e znaki - bia�e, bo na papierze objawiaj� si� jako niezadrukowane. Znaki te napotkane wewn�trz instrukcji s� prawie zawsze ignorowane. Zatem nasza instrukcja r�wnie dobrze mog�aby wygl�da� tak: cout << "witamy na pok�adzie" ; Wstawianie bia�ych znak�w s�u�y nie kompilatorowi lecz programi�cie. Poma- ga w tym, �eby program wygl�da� czytelnie. Je�li nam na tym wcale nie zale�y, to mo�emy r�wnie dobrze napisa� program tak: #include <iostream.h> main(){cout<<"witamy na pok�adzie";} Nikt rozs�dny jednak tak nie robi z dw�ch powod�w: o program staje si� wtedy nieprzejrzysty, o korzystaj�c z r�nych specjalnych narz�dzi do uruchamiania progra- m�w (tzw. debugger�w) mamy mo�liwo�� �ledzenia wykonywania programu krokowo: linijka za linijk�. Dobrze jest wi�c mie� w jednej linijce tylko jedn� instrukcj�. Kompilator i Linker W ten spos�b om�wili�my sobie pierwszy program. Oczywi�cie program w ta- kiej postaci, jak napisali�my, jest dla komputera niezrozumia�y. Musi zosta� przet�umaczony na j�zyk maszyny. S�u�y do tego kompilator. Nasz program poddajemy wi�c kompilacji i otrzymujemy wersj� skompilowan�. Taka skompilowana wersja jest jeszcze niepe�na - musi zosta� po��czona z bib- liotekami. Ten proces ��czenia wykonywany jest przez program zwany zwy- kle linkerem (link - ang. ��czenie), a w �argonie programist�w okre�lane jest to jako linkowanie. Nie s�ysza�em by kto� nazywa� to inaczej. Poprawne, lansowane niegdy� okre�lenie �konsolida- cja" i �konsolidowanie" chyba si� nie przyj�o. My u�ywa� b�dzie- my sformu�owania linkowanie wzgl�dnie ��czenie. Przy��czenie funkcji bibliotecznych nast�puje dopiero w czasie linkowania. Nasza dyrektywa (instrukcja) #include zapozna�a kompilator jedynie z sa- mym nag��wkiem biblioteki. Potrzebny by� on po to, by kompilator m�g� t) bug - ang. owad ; st�d debugger (czytaj: �debager") - jakby: �odpluskwiacz" pierwszy program sprawdzi� poprawno�� naszego odnoszenia si� do biblioteki. Natomiast sama tre�� funkcji bibliotecznych do��czana jest dopiero na etapie linkowania. A teraz do dzie�a. W rezultacie linkowania otrzymali�my program w wersji nadaj�cej si� do uruchomienia. Zach�cam Ci� czytelniku, by� teraz spr�bowa� uruchomi� nasz program na swoim komputerze. Mimo, �e program jest prymitywny. Wa�ne tu jest, by� opanowa� technik� kompilacji i linkowania. Niestety nie mog� Ci tu nic pom�c. Istnieje bardzo wiele typ�w komputer�w i wiele r�nych typ�w kompilator�w. Jak Twojego kompilatora u�ywa� - musisz przeczyta� w swojej dokumentacji lub zapyta� koleg�. Wszystko to nie jest trudne, najcz�ciej wcale nie musisz my�le� o linkowaniu, bo kompilator sam to uruchamia. Wtedy jest to tylko jedna komenda, a np. w kompilatorze Borland C++ naci�ni�cie jednego tylko klawisza. Uwaga: � kompilatory, kt�re mog� kompilowa� programy napisane w kla- sycznym C, a tak�e w C++. W�wczas trzeba im powiedzie� w jakim j�zyku jest napisany program przedstawiony w�a�nie do kompilacji. Jednym ze sposob�w powiedzenia tego mo�e by� rozszerzenie nazwy naszego progra- mu. Je�li rozszerzeniem jest CPP, w�wczas kompilator podejdzie do pracy jak do programu w j�zyku C++. Czyli nasz program powinien si� nazywa� na przyk�ad moj_progr.cpp W Kiedy ju� program zadzia�a poprawnie i na ekranie pojawi si� nasz tekst Witamy. . . w�wczas mo�emy spr�bowa� zmodyfikowa� ten program. Dzia- �ania te pozwol� nam bli�ej zapozna� si� z technik� wypisywania na ekran. To si� nam bardzo szybko przyda. A zatem w �rodek tekstu uj�tego w cudzys��w wpiszmy znaki \n "Witamy \nna pok�adzie" Zmiana ta powoduje, �e tekst wypisany na ekranie wygl�da� b�dzie nast�puj�- co: Witamy na pok�adzie Znak \n (n - jak: new lin�, czyli: nowa linia) powoduje, �e w trakcie wypisywania tekstu na ekranie nast�puje przej�cie do nowej linii i dalszy ci�g tekstu wypisywany jest poni�ej. Ewentualna nast�pna instrukcja wyprowadzania tekstu zacznie go wyprowa- dza� od miejsca, w kt�rym poprzednia sko�czy�a. Zatem dwie instrukcje cout << "Witamy \nna pok�adzie" ; cout << "Lecimy na " << "wysoko�ci 3500 stop" ; spowoduj� pojawienie si� na ekranie tekstu L-rugi program Witamy na pok�ad�ieLecimy na wysoko�ci 3500 stop Nie ma te� znaczenia czy napiszemy cout << "lecimy na " ; cout << "wysoko�ci 3500 stop" ; czy te� mo�e z�o�ymy te instrukcje i zapiszemy kr�cej cout << "lecimy na " << "wysoko�ci 3500 stop" ; W obu sytuacjach rezultat na ekranie b�dzie ten sam: lecimy na wysoko�ci 3500 stop Dlaczego w�a�ciwie mo�liwe jest tak wygodne sk�adanie - nie mog� Ci jeszcze teraz wyja�ni�. Musisz by� cierpliwy i doczyta� do rozdzia�u o bibliotece iostream. 1.2 Drugi program To by�o wypisywanie informacji na ekranie. Natomiast z wczytywaniem da- nych z klawiatury spotykamy si� w naszym drugim programie. Oto on: / * ---------------------------------- Program na przeliczanie wysoko�ci podanej w stopach na wysoko�� w metrach. �wiczymy tu operacje wczytywania z klawiatury i wypisywania na ekranie -----* / #include <iostream.h> main() { int stopy ; //to do przechowywania // liczby stop float metry ; //do wpisania wyniku float przelicznik = 0.3 ; // przelicznik: // stopy na metry cout << "Podaj wysoko�� w stopach : " ; cin >> stopy ; // przyj�cie danej // z klawiatury metry = stopy * przelicznik; // w�a�ciwe przeliczenie cout << "\n" ; //to samo co: cout << endl ; //--wypisanie wynik�w cout << stopy << " stop - to jest : " << metry << " metrow\n" ; Drugi program Komentarze Ju� na pierwszy rzut oka wida�, �e w programie pojawi�y si� opisy w �ludzkim" j�zyku. S� to komentarze. Komentarze s� tekstami zupe�nie ignorowanymi przez kompilator, ale za to s� bardzo po�yteczne dla programisty, bo przypomi- naj� nam co w danym miejscu programu chcieli�my zrobi�. W j�zyku C++ komentarze mo�na umieszcza� dwojako. o Pierwszy spos�b to ograniczenie jakiego� tekstu znakami /* (z lewej) oraz */ (z prawej). Spos�b ten zastosowali�my na pocz�tku programu. Komentarz taki mo�e si� ci�gn�� przez wiele linijek - to tak�e widzimy w przyk�adzie. o Drugi spos�b to zastosowanie znak�w / / (dwa uko�niki). Kompilator po napotkaniu takiego znaku ignoruje reszt� znak�w do ko�ca linijki - traktuj�c je jako komentarz. Uwaga: | Komentarze typu /*... */ nie mog� by� w sobie zagnie�d�ane. To znaczy, �e niepoprawna jest taka forma /* KOMENTARZ "ZEWN�TRZNY" TAK SI� CI�GNIE /* komentarz wewn�trzny */ DOKO�CZENIE ZEWN�TRZNEGO */ Chcia�oby si� powiedzie�: niestety! Ca�e szcz�cie niekt�re kompilatory, mimo zalece� ANSI, pozwalaj� na to . Mo�liwo�� zagnie�d�e� komen- tarzy jest czasem bardzo pomocna. Wyobra�my sobie kawa�ek wi�kszego programu, wyposa�onego ju� w ko- mentarze. Nagle chcieliby�my zrezygnowa� chwilowo z 10 linijek. Usun�� je z procesu kompilacji, ale nie skasowa� zupe�nie. Naturalnym odruchem jest wtedy przerobienie tego fragmentu na komentarz. Robi si� to przez uj�cie tych linijek w symbole komentarza: /* oraz */ - stawiaj�c pierwszy symbol na pocz�tku, a drugi na ko�cu tych l O linijek. Je�li jednak w rzeczonym fragmencie programu s� ju� jakie� komentarze typu /* ... */ , to kompilator (niepozwalaj�cy na zagnie�d�anie ich) uzna to za b��d. Jak powiedzia�em, post�pi tak kompilator niepozwalaj�cy na zagnie�d�anie, bo s� kompilatory, kt�re po wybraniu odpowiedniej opcji pozwalaj� na to. Ograniczenie o zagnie�d�aniu komentarzy nie dotyczy wsp�ycia komentarzy typu /*...*/ z komentarzami typu / / cout << "Uwaga pasa�erowie : \n" ; /* chwilowo rezygnuje z tych dw�ch linijek - cout << "Pali si� drugi silnik \n" ; // opis sytuacji i cout << "Nie ma szans ratunku \n" ; // niech si� modl� t) ANSI - American National Standards Institute - ameryka�ski instytut normali- zacyjny. program cout << "Prosz� zapia� pasy...\n" ; Je�li Tw�j kompilator nie pozwala na zagnie�d�anie komentarzy, to mo�esz sobie poradzi� stosuj�c tak zwan� kompilacj� warunkow�. (Patrz rozdz. o pre- procesorze, str 122). Na koniec dobra rada natury og�lnej: Czas zu�yty na pisanie komentarzy nigdy nie jest czasem straconym. Bardzo szybko zauwa�ysz, �e czas ten odzyskasz z nawi�zk� w trakcie | uruchamiania programu lub przy p�niejszych jego modyfikacjach. Opisuj znaczenie ka�dej zmiennej, opisuj funkcje i ich argumenty, opisuj te� to, co w danym fragmencie programu robisz. Nawet je�li wtedy, gdy to piszesz, jest to jeszcze dla Ciebie jasne. Opisuj przede wszystkim wszystkie �kruczki", kt�re zastosowa�e�. Dla samego siebie i dla tych, kt�rzy modyfikowa� b�d� Twoje programy wtedy, gdy Ty b�dziesz ju� pisa� w j�zyku C++ systemy operacyjne. Zmienne Dosy� ju� o komentarzach, wr��my do naszego drugiego programu. W funkcji main Zauwa�amy linijki int float stopy metry S� to definicje zmiennych wyst�puj�cych w programie. Zmiennym tym nada- li�my nazwy: stopy oraz metry. Nazwy te s�, jak wida�, tak przez nas wybrane, by okre�la�y zastosowanie zmiennych. Mo�na jednak zapyta� og�l- niej: Co mo�e by� nazw� w j�zyku C++ ? Mo�e to by� dowolnie d�ugi ci�g liter, cyfr oraz znak�w podkre�lenia'_'. Nazwa nie mo�e si� zacz�� od cyfry. Ma�e i wielkie litery w nazwach s� rozr�niane. Nazw� nie mo�e by� identyczna z �adnym ze s��w kluczowych j�zyka C++. Te s�owa kluczowe to: asm class double friend new return switch union auto const else goto operator short template unsigned break continue enum if private signed this virtual case catch char default delete do extern float for inline int long protectedpublic register sizeof static struct throw try typedef void volatile while Zatem je�li wymy�lamy swoj� nazw�, to musimy unika� powy�szych s��w. Nazwy s� nam potrzebne po to, by za ich pomoc� odnosi� si� w programie do naszych zmiennych, czy starych - og�lnie m�wi� b�dziemy: do obiekt�w. W j�zyku C++ ka�da nazwa musi zosta� zadeklarowana zanim zostanie u�yta. T� z�ot� my�l mo�esz napisa� sobie na �cianie. Swoj� drog� - je�li o tym zapomnisz, to kompilator Ci natychmiast o tym przypomni. We wspomnianym fragmencie programu deklarujemy, �e � zmienna s topy s�u�y do przechowywania liczby typu ca�ko- witego int . Deklarujemy te�, �e � metry oraz przelicznik s� zmiennymi do przechowy- wania liczby rzeczywistej - inaczej: liczby zmiennoprzecinko- wej- f loat++). Definicja a deklaracja Jest subtelna r�nica mi�dzy tymi dwoma poj�ciami. Za��my, �e chodzi o nasz� nazw� stopy. Deklaracja w momencie, gdy napotka j� kompilator m�wi mu: I �Jakby� zobaczy� kiedy� s�owo stopy, to wiedz, �e oznacza ono obiekt typu ca�kowitego." Definicja za� m�wi mu: I �A teraz zarezerwuj mi w pami�ci miejsce na obiekt typu ca�ko- witego o nazwie stopy" Nasz fragment programu zawiera w sobie jednocze�nie i jedn� i drug� wy- powied�. Rezerwujemy miejsce w pami�ci i od razu oznajmiamy co to za obiekt. Zatem: | Definicja jest r�wnocze�nie deklaracj�. Ale nie odwrotnie. Mo�e by� bowiem deklaracja, kt�ra nie jest definicj�. Mo�emy przecie� tylko zdeklarowa�, �e konkretna nazwa oznacza obiekt jakiego� typu, ale obiektu tego w danym miejscu nie definiujemy. Chocia�by dlatego, �e ju� jest zdefiniowany w zupe�nie innym module programu. Przy definicji obiektu przelicznik widzimy taki zapis float przelicznik = 0.3 ; Jest to nie tylko zwyk�a definiqa rezerwuj�ca miejsce w pami�ci, ale taka definicja, kt�ra to miejsce w pami�ci dodatkowo inicjalizuje wpisuj�c tam war- to�� 0.3 +) integer - ang. liczba ca�kowita (czytaj: �intid�er") ++) float (czytaj: �flout") od s��w: floating point - ang. zmienny przecinek. u^iugi program Wczytywanie danych z klawiatury Przejd�my dalej. W naszym programie instrukcja cin >> stopy ; jest operacj� zwi�zan� z klawiatur�, czyli m�wi�c inaczej ze standardowym urz�dzeniem wej�ciowym cin-skr�t od: C-onsole IN-put. Instrukcja ta umo�liwia wczytanie z klawiatury liczby. Warto�� tej liczby zostaje umieszczona w zmiennej s t opy. Przy odrobinie wyobra�ni mo�na powiedzie�, �e to w�a�nie sugeruje kierunek strza�ek >> Dygresja dla programist�w klasycznego C. Programuj�cych w C klasycznym, ucieszy� zapewne fakt tak prostego wprowadzania danych z klawiatury. Nie trzeba tu my�le� kiedy poda� do funkcji wczytuj�cej (scanf) nazw� zmiennej, a kiedy adres zmiennej. Jeszcze kilka tak mi�ych niespodzianek czeka nas w C++ . Nast�pne linijki programu to przeliczenie st�p na metry i wydruk wyniku. Przyk�adowe wykonanie programu spowoduje wydruk na ekranie poni�szego tekstu (T�ustszym drukiem zaznaczone jest echo tekstu wpisywanego przez u�ytkow- nika programu.) Podaj wysoko�� w stopach : 3500 3500 stop - to jest : 1050 metr�w Sp�jrz jeszcze raz na tekst programu i zauwa� jak to si� sta�o, �e na ekranie pojawi�a si� liczba 1050 - b�d�ca obliczon� warto�ci� umieszczon� w zmiennej metry. W komentarzach wyja�nione s� poszczeg�lne kroki. Zwr�� te� uwag�, na instrukcj� cout << "\n" ; // cout << endl ; W komentarzu zaznaczy�em inny spos�b zapisu tego samego. Je�li chcemy na ekran wyprowadzi� sam znak '\n' to mo�emy go zast�pi� skr�tem endl co oznacza: end of lin� (koniec linii). Mimo, �e jest to dok�adnie tyle samo znak�w do wystukania na klawiaturze, to jednak �atwiej si� to jako� pisze. W rozdziale po�wi�conym operacjom wypisywania na ekran poznamy dalsze takie sztuczki. Tak wi�c wygl�da� nasz program do przeliczania st�p na metry. No c� - pomy�la�e� zapewne: -Tyle pracy z wpisywaniem tekstu programu, po to, by otrzyma� ten wynik... Pro�ciej by�oby obliczy� to �na piechot�". Masz racj�. Cud programowania objawia si� dopiero w p�tlach. M�wi�c szerzej: w instrukcjach steruj�cych. +) Skr�t ten wymawia si� po polsku jako �Si-yn". Z twardym �S" ! Instrukcje steruj�ce C� to bardzo przydatne polecenia s�u��ce do sterowania przebiegiem pro- gramu. Poniewa� za�o�yli�my, �e znasz jakikolwiek inny j�zyk programo- wania, zatem bez dalszych komentarzy przyst�pujemy do prezentacji takich instrukcji. Wyst�puj� one w ka�dym j�zyku programowania i nawet wsz�dzie maj� podobny wygl�d. W instrukcjach steruj�cych podejmowane s� decyzje o wykonaniu tych czy innych instrukcji programu. Decyzje te podejmowane s� w zale�no�ci od spe�- nienia lub niespe�nienia jakiego� warunku. Inaczej m�wi�c, od prawdziwo�ci lub fa�szywo�ci jakiego� wyra�enia. Najpierw wi�c wyja�nijmy sobie co to jest prawda, a co fa�sz w j�zyku C++ 2.1 Prawda - Fa�sz W j�zyku C++ nie ma specjalnego typu okre�laj�cego zmienne logiczne - czyli takie, kt�re przyjmuj� warto�ci: prawda - fa�sz. Za to do przechowywania takiej informacji nadaje si� ka�dy typ. Zasada jest genialnie prosta: Sprawdza si� czy warto�� danego obiektu - np. zmiennej - jest r�wna zero, czy r�na od zera. [ Warto�� zero - odpowiada stanowi: fa�sz j Warto�� inna ni� zero - odpowiada stanowi: prawda Nie musi to by� nawet zawarto�� jednego obiektu. Mo�e to by� tak�e bardziej skomplikowane wyra�enie, kt�re trzeba obliczy�, aby przekona� si� jaka jest jego warto��. Co ciekawe - wynik nie musi by� wcale liczb�. Nawet obiekt przechowuj�cy znaki alfanumeryczne mo�e by� w ten spos�b sprawdzany. Sprawdza si� w�w- Instrukcja warunkowa ir czas kod liczbowy z�o�onego tam znaku. Je�li jest r�ny od zera, to wyra�enie odpowiada rezultatowi �prawda", je�li kod jest zerowy (czyli tzw. znak NULL) - odpowiada to rezultatowi �fa�sz". 2.2 Instrukcja warunkowa i f Instrukcja if mo�e mie� 2 formy: if (wyra�enie) instrukcja1 ; lub if (wyra�enie) instrukcjal ; else instrukcja2 ; Wyra�enie to tutaj co�, co ma jak�� warto��. Mo�e by� to po prostu obiekt wybrany przez nas do przechowywania zmiennej logicznej, ale mo�e to by� te� naprawd� wyra�enie, kt�re najpierw trzeba obliczy�, by w rezultacie tego poz- na� jego warto��. Najpierw zatem obliczana jest warto�� wyra�enia. Je�li jest ona niezerowa (prawda), to wykonywana jest instrukcjal. Je�li warto�� wyra�enia jest zero (fa�sz), to instrukcjal nie jest wykonywana. W drugiej wersji instrukcji if widzimy dodatkowo s�owo else , co mo�na przet�umaczy� jako: �w przeciwnym razie". A zatem je�li w tej drugiej sytuacji warto�� wyra�enia jest niezerowa (prawda), to zostanie wykonana instrukcjal w przeciwnym razie (else!), czyli gdy warto�� wyra�enia jest zerowa (fa�sz), zostanie wykonana instrukcja2. Powtarzam - wynik wyra�enia mo�e by� r�nego typu (ca�kowity, rzeczywisty itd). Sprawdza si� tylko czy jest r�wny O czy nie. Oto prosty przyk�ad: int i ; // definicja obiektu int o nazwie i cout << "Podaj jaka� liczb�: " ; cin >> i ; if(i - 4) cout << " zmienna i mia�a warto�� inna ni� 4"; else cout << " zmienna i mia�a warto�� r�wna 4"; Za��my, �e podali�my liczb� 15. Wyra�eniem by�o tu: i-4. Obliczana jest wi�c jego warto�� 15-4 = 11 ,ato jest r�ne od O (zatem: prawda), wi�c wykonana zostaje instrukcja pierwsza. Gdyby�my podali liczb� 4, w�wczas do zmiennej i podstawione zosta�oby 4. Wyra�enie i-4 mia�oby warto�� O (czyli: fa�sz) i wtedy wykonana zosta�aby instrukcja druga. t) if - ang. je�li (czytaj: �yf") tt) (czytaj: �els") i LIJNLJCI wcii unjxuwa i j_ Blok instrukcji Cz�sto si� zdarza, �e chodzi nam o wykonanie warunkowe nie jednej instrukcji, a ca�ego bloku instrukcji. Stosujemy w�wczas instrukcj� sk�adan� zwan� inaczej blokiem. S� to po prostu zwyk�e instrukcje ograniczone nawiasami { } . Zauwa�, �e po klamrze nie trzeba stawia� �rednika. instrl ; instr2 ; instrS ; Oto przyk�ad programu, w kt�rym stosujemy instrukcje sk�adane. #include <iostream.h> main() int wys, punkty_karne ; // definicja dw�ch zmiennych // typu int. Obie s� tego samego typu wiec // wystarczy przecinek odzielajacy nazwy cout << "Na jakiej wysoko�ci lecimy ? [w metrach] : "; cin >> wys ; // rozwa�amy sytuacje - if(wys < 500} cout << "\n" << wys << " metr�w to za nisko !\n"; punkty_karne = l ; else cout << " \nNa wysoko�ci " << wys << " metr�w jeste� ju� bezpieczny \n" punkty_karne = O ; // ocena Twoich wynik�w cout << "Masz " << punkty_karne << " punkt�w karnych \n" ; if(punkty_karne)cout << "Popraw si� !" ; } Przypominam, �e zr�nicowane odst�py od lewego marginesu (wype�nione bia�ymi znakami) nie maj� dla kompilatora �adnego znaczenia. Pomagaj� nato- 0 miast programi�cie. Dzi�ki nim program staje si� bardziej czytelny. Oto przyk�adowy wygl�d ekranu po wykonaniu tego programu Na jakiej wysoko�ci lecimy ? [w metrach] : 2500 Na wysoko�ci 2500 metr�w jeste� ju� bezpieczny Masz O punkt�w karnych Je�li na zadane pytanie odpowiemy inaczej, to ekran mo�e wygl�da� tak: Na jakiej wysoko�ci lecimy ? [w metrach] : 100 100 metr�w to za nisko ! la WI1-LJ Masz l punkt�w karnych Popraw si� ! Zauwa� jak prosto wypisuje si� na ekranie warto�� zmiennej wy s. Wystarczy�a instrukcja cout << wys ; Wyb�r wielowariantowy Przy u�yciu s�owa else mieli�my wi�c mo�liwo�� dwuwariantowego wyboru: Robimy to, w przeciwnym razie robimy tamto. Mo�emy jednak p�j�� dalej - ko�o s�owa else mo�emy postawi� nast�pn� instrukcj� i f. Dzi�ki temu zyskamy mo�liwo�� wyboru wielowariantowego i-f(warunekl) instrukcja"! ; else if (warunek2) instrukcja2 ,- else if (warunek3) instrukcjaS ; else if (warunek4) instrukcja4 ,� (Inn� mo�liwo�ci� wykonania wyboru wielowariantowego jest instrukcja switch, o kt�rej niebawem.) 2.3 Instrukcja while Instrukcja whi l e ma form�: while (wyra�enie) instrukcjal ; Najpierw oblicza si� warto�� wyra�enia. Je�li wynik jest zerowy, w�wczas instrukcjal nie jest wcale wykonywana. Je�li jednak warto�� wyra�enia jest niezerowa (prawda), w�wczas wykonywana jest instrukcjal, po czym ponow- nie obliczana jest warto�� wyra�enia. Je�li nadal warto�� tego wyra�enia jest niezerowa, w�wczas ponownie wykonywana jest instrukcjal, i tak dalej, dop�ki (while!) wyra�enie ma warto�� niezerowa. Je�li w ko�cu kiedy� obliczone wyra�enie b�dzie mia�o warto�� zerow�, w�wczas dopiero p�tla zostanie przer- wana. Zwracam uwag�, �e obliczenie warto�ci wyra�enia odbywa si� przed wykona- niem instrukcji"! ttinclude <iostream.h> main() i int ile ; cout << "Ile gwiazdek ma mie� kapitan ? : " ; cin >> ile ; t) while - ang. podczas gdy, dop�ki (czytaj: ��ajl") P�tla ao . . . wnue . . . cout << "\n No to narysujmy wszystkie " << ile << " : " ; // p�tla while rysuj�ca gwiazdki while(ile) { cout << "*" ; ile = ile -- l ; } //na dow�d ze mia� prawo przerwa� p�tle cout << "\n Teraz zmienna ile ma warto�� " << ile } LJ A oto przyk�adowy wygl�d ekranu po wykonaniu tego pro- gramu Ile gwiazdek ma mie� kapitan ? : 4 No to narysujmy wszystkie 4 : **** Teraz zmienna ile ma warto�� O 2.4 P�tla do. . .while.. . S�owa te oznaczaj� po angielsku: R�b... Dop�ki... P�tla taka ma form� do instrukcja"! while (wyra�enie) ; Czyli jakby po polsku r�b instrukcja"! dop�ki (wyra�enie) ; Dzia�anie jej jest takie: Najpierw wykonywana jest instrukcja"!. Nast�pnie obli- czona zostaje warto�� wyra�enia. Je�li jest ono niezerowe (prawda), to wykona- nie instrukcji"! zostanie powt�rzone, po czym znowu obliczone zostanie wyra- �enie... i tak w k�ko, dop�ki wyra�enie b�dzie r�ne od zera. Jak wida� dzia�anie tej p�tli przypomina t� opisan� poprzednio. R�nica polega tylko na tym, �e warto�� wyra�enia obliczana jest nie przed, ale po wykonaniu instrukcji"! .Wynika st�d, �e instrukcja"! zostanie wykonana co najmniej raz. Czyli nawet wtedy, gdy wyra�enie nie b�dzie nigdy prawdziwe. Na przyk�ad: #include <iostream.h> main(} { char litera ; do { cout << "Napisz jaka� liter� : " ; cin >> litera ; cout << "\n Napisa�e� : " << litera << " \n" ; t) (czytamy: �du...�ajl") lj�tla tor }while(litera != 'K'); //O cout << "\n Skoro Napisa�e� K to ko�czymy !" ; } A oto przyk�adowy wygl�d ekranu po wykonaniu tego pro- gramu Napisz jaka� liter� : A Napisa�e� : A Napisz jaka� liter� : K Napisa�e� : K Skoro Napisa�e� K to ko�czymy ! Program nasz oczekuje na napisanie litery, p�tla wczytywania liter odbywa si� dop�ki nie podamy litery K (wielkiej). Wtedy to wykonywanie p�tli zako�czy si�. Zwracam uwag� - p�tla wczytuj�ca znaki zostanie wykonana przynajmniej raz. W programie - w miejscu, kt�re oznaczy�em jako O - pojawi� si� w wyra�eniu nieznany nam jeszcze dot�d operator != kt�ry oznacza: �r�ny od ...". Zatem zapis while(litera != 'K') rozumiany jest jako �dop�ki litera jest r�na od K ". Temu i innym opera- torom przyjrzyjmy si� dok�adnie p�niej. 2.5 P�tla for Ma ona form� for(instrjni ; wyraz_warun ; instr_krok) tre��_p�tli ; co w przyk�adzie mo�e wygl�da� cho�by tak: for(i=0 ; i < 10 ; i=i+l) { cout << "Ku-ku ! " ; } Wyja�nijmy co oznaczaj� poszczeg�lne cz�ony: *#* for - (ang. dla...) oznacza: dla takich warunk�w r�b... *>>* instr_ini- jest to instrukcja wykonywana zanim p�tla zostanie po raz pierwszy uruchomiona. � W naszym przyk�adzie jest to podstawienie i = 0. *<<* wyraz_warun - jest to wyra�enie, kt�re obliczane jest przed ka�dym obiegiem p�tli. Je�li jest ono r�ne od zera, to wykonywane zostaj� instrukcje b�d�ce tre�ci� p�tli. � U nas wyra�eniem warunkowym jest wyra�enie: i < 10 . Je�li rzeczywi�cie i jest mniejsze od 10, w�wczas wykonywana P�tla tor zostaje instrukcja b�d�ca tre�ci� p�tli, czyli wypisanie tekstu "Ku-ku!" *>>* instrjcrok - to instrukcja wykonywana na zako�czenie ka�dego obiegu p�tli. Jest to jakby ostatnia instrukcja, wykonywana bezpo�rednio przed obliczeniem wyra�enia wyraz_warun. � U nas jest to po prostu i = i+1 Praca tej p�tli odbywa si� wi�c jakby wed�ug takiego harmonogramu: 1) Najpierw wykonuj� si� instrukcje inicjalizuj�ce prac� p�tli. 2) Obliczane jest wyra�enie warunkowe. Je�li jest r�wne O - praca p�tli jest przery- wana. 3) Je�li powy�ej okaza�o si�, �e wyra�enie by�o r�ne od zera, w�wczas wykony- wane zostaj� instrukcje b�d�ce tre�ci� p�tli. 4) Po wykonaniu tre�ci p�tli wykonana zostaje instrukcja inst_krok, po czym powta- rzana jest akcja 2). Oto kilka ciekawostek: instr_ini - nie musi by� tylko jedn� instrukcj�. Mo�e by� ich kilka, wtedy oddzielone s� przecinkami. Podobnie w wypadku instrjcrok Wyszczeg�lnione elementy: instrjni, wyraz_warun, instr_krok - nie musz� wys- t�pi�. Dowolny z nich mo�na opu�ci�, zachowuj�c jednak �rednik oddzielaj�cy go od s�siada. Opuszczenie wyra�enia warunkowego traktowane jest tak, jakby sta�o tam wyra�enie zawsze prawdziwe. Tak wi�c zapis for ( ; ; ) { Jest niesko�czon� p�tl�. Inny typ niesko�czonej p�tli to oczywi�cie: while(l) { Przyk�ad Przyjrzyjmy si� p�tli for w programie #include <iostream.h> main ( ) { int i , // licznik ile ; // liczba pasa�er�w cout << "Stewardzie, ile leci pasa�er�w ? cin >> ile ; lnstrukqa switcn for(i = l ; i <= ile ; i = i + 1) { cout << "Pasa�er nr ' << i << " prosz� zapia� pasy ! \n" ; } cout << "Skoro wszyscy ju� zapieli, to �adujemy. ; ) Je�li w trakcie wykonywanie programu steward odpowie, �e leci 4 pasa�er�w to na ekranie pojawi si�: Stewardzie, ile leci pasa�er�w ?4 Pasa�er nr l prosz� zapia� pasy ! Pasa�er nr 2 prosz� zapia� pasy ! Pasa�er nr 3 prosz� zapia� pasy ! Pasa�er nr 4 prosz� zapia� pasy ! Skoro wszyscy ju� zapieli, to �adujemy. 2.6 Instrukcja switch Switch - jak sama nazwa sugeruje - s�u�y do podejmowania wielowarian- towych decyzji. Przyjrzyjmy si� przyk�adowemu fragmentowi programu. int kt�ry ; cout << "Kapitanie, kt�ry podzesp� sprawdzi� ? \n" << "nr 10 - Silnik \nnr 35 - Stery \nnr 28 - radar\n" << "Podaj kapitanie numer : " ; cin >> kt�ry ; switch (kt�ry) { case 10 : cout << "sprawdzamy silnik \n" ; break ; case 28 : cout << "sprawdzamy radar \n" ; break ; case 35 : cout << "sprawdzamy stery \n" ; break ,- ' default : cout << "Za��da�e� nr " << kt�ry << " - nie znam takiego ! ; break ; t) switch - ang. prze��cznik (czytaj: �s�icz") Instrukcja switch W wypadku, gdy kapitan (czyli Ty!) odpowie, �e numer 35, to na ekranie b�dzie nast�puj�cy tekst: Kapitanie, kt�ry podzesp� sprawdzi� ? nr 10 - Silnik nr 35 -- Stery nr 28 - radar Podaj kapitanie numer : 35 sprawdzamy stery Je�li jednak za��da podzesop�u nr 77 to na ekranie zobaczy: Kapitanie, kt�ry podzesp� sprawdzi� ? nr 10 - Silnik nr 35 -- Stery nr 28 - radar Podaj kapitanie numer : 77 Za��da�e� nr 77 - nie znam takiego ! Oto jak taka instrukcja switch dzia�a: Obliczane jest wyra�enie umieszczone w nawiasie przy s�owie switch switch (wyra�enie) case wartl: instrA ; break ; case wart2 : instrB ,- break ; default : instrC ,- break ; Je�li jego warto�� odpowiada kt�rej� z warto�ci podanej w jednej z etykiet case , w�wczas wykonywane s� instrukcje pocz�wszy od tej etykiety. Wyko- nywanie ich ko�czy si� po napotkaniu instrukcji break . Powoduje to wyskok z instrukcji swi tch - czyli jakby wyj�cie poza jej doln� klamr�. Je�li warto�� wyra�enia nie zgadza si� z �adn� z warto�ci podanych przy etykietach case, w�wczas wykonuj� si� instrukcje umieszczone po etykiecie default . U nas etykieta ta znajduje si� na ko�cu instrukcji switch, jednak mo�e by� w dowolnym miejscu, nawet na samym jej pocz�tku. Co wi�cej, etykiety default mo�e nie by� wcale. Je�li warto�� wyra�enia nie zgadza si� z �adn� z warto�ci przy etykietach case, a etykiety default nie ma wcale, w�wczas opuszcza si� instrukcj� switch nie wykonuj�c niczego. t) case - ang. wypadek, sytuacja (czytaj: �kejs") tt) break - ang. przerwij (czytaj: �brejk") ttt) default - ang. domniemanie (czytaj: �difolt") instruKcja Instrukcji nast�puj�cych po etykiecie case nie musi ko�czy� instrukcja break. Je�li jej nie umie�cimy, to zaczn� si� wykonywa� instrukcje umieszczone pod nast�pn� etykiet� case. Konkretniej: w naszym ostatnim programie brak in- strukcji break w case 10 spowodowa�by, �e po wykonywaniu instrukcji dla case 10 nast�pi�oby wykonywanie instrukcji z case 28. Nie jest to nieudolno�� j�zyka C++. Czasem si� to przydaje. Lepiej przecie�, gdy programista sam mo�e zadecydowa� czy przerwa� (break) wykony- wanie danych instrukcji, czy te� kontynuowa�. Czasem wi�c celowo nie umieszczamy instrukcji break . Np. switch (nr) { case 3 : cout << "*" ; case 2 : cout << "-" ; case l : cout << " ! " ; break ; Zale�nie od warto�ci zmiennej nr mo�liwe s� nast�puj�ce wydruki na ekran: dla nr = 3 *-! dla nr = 2 - ! dla nr = l ! dla innego n nic si� nie wydrukuje 2.7 Instrukcja break Zapoznali�my si� powy�ej dzia�aniem instrukcji break - polegaj�cym na przer- waniu wykonywania instrukcji switch. Jest jeszcze inne, cho� podobne dzia- �anie break w stosunku do instrukcji p�tli: for, while, do. . .while. In- strukcja ta powoduje natychmiastowe przerwanie wykonywania tych p�tli. Je�li mamy do czynienia z kilkoma p�tlami - zagnie�d�onymi jedna wewn�trz drugiej, to instrukcja break powoduje przerwanie tylko tej p�tli, w kt�rej bezpo�rednio tkwi. Jest to wi�c jakby przerwanie z wyj�ciem tylko o jeden poziom wy�ej. Oto jak instrukcja break przerwie p�tl� while: int i = 7 ; while(1) cout << "P�tla, i = " << i << "\n" ; i = i -l ; if(i < 5) { cout << "Przerywamy !" ; break ; d Wykonanie tego fragmentu programu spowoduje wypisanie na ekranie P�tla, i = 7 P�tla, i = 6 P�tla, i = 5 Przerywamy ! A oto przyk�ad z zagnie�d�onymi p�tlami. int i, m ; int dlugosc_linii = 3 ; for(i=0 ; i < 4 ; i = i + 1) for (m =0;m<10;m = m+l) //O cout << "*" ; if(m > dlugosc_linii)break ; //tu wyskok // z for (m...) cout << "\nKontynuujemy zewn�trzna p�tle" << " for dla i = " << i << "\n" ; Wykonanie tego fragmentu objawi si� na ekranie jako: ***** Kontynuujemy zewn�trzna p�tle for dla i = O ***** Kontynuujemy zewn�trzna p�tle for dla i = l ***** Kontynuujemy zewn�trzna p�tle for dla i = 2 ***** Kontynuujemy zewn�trzna p�tle for dla i = 3 To instrukcja break sprawi�a, �e nie by�o 10 gwiazdek w rz�dzie, (jakby to wynika�o z zapisu p�tli w linii O). Za pomoc� instrukcji break przerywana zosta�a ta p�tla, w kt�rej break tkwi�o bezpo�rednio. 2.8 Instrukcja goto W zasadzie na tym mogliby�my sko�czy� omawianie instrukcji steruj�cych, ' gdyby nie jeszcze jedna, wstydliwa instrukcja goto. Ma ona form�: goto etykieta ; Po napotkaniu takiej instrukcji wykonywanie programu przenosi si� do miejsca, gdzie jest dana etykieta. t) go to - ang. id� do (czytaj: �go� tu") Powiedzmy jasno: u�ywanie instrukcji goto zdradza, �e si� jest z�ym programist�. To dlatego, �e instrukcji tej zawsze da si� unik- n��. Program (nad-) u�ywaj�cy instrukcji goto jest dla progra- misty nieczytelny, a z kolei dla kompilatora stanowi to przeszkod� w eleganckim skompilowaniu. Z instrukcja goto wi��e si� zawsze etykieta, do kt�rej nale�y przeskoczy�. Etykieta jest to nazwa, po kt�rej nast�puje dwukropek. W j�zyku C++ nie mo�na sobie skoczy� z dowolnego punktu programu w do- wolne inne. Etykieta, do kt�rej przeskakujemy, musi le�e� w obowi�zuj�cym w danej chwili tzw. zakresie wa�no�ci. (O tym pom�wimy na stronie 42). Oto przyk�ad u�ycia goto cout << "Cos piszemy \n" ; goto aaa ; // stad przeskok cout << "Tego nie wypiszemy " ; aaa: // w to miejsce cout << "Piszemy " ; Ten fragment objawi si� na ekranie jako: Cos piszemy Piszemy Przypominam, �e to, i� w naszym przyk�adzie etykiet� wysun��em bli�ej lewe- go marginesu, nie ma �adnego znaczenia dla kompilatora. Jemu jest to wszystko jedno. Nam jednak nie. Dla nas chyba lepiej, by etykieta bardziej rzuca�a si� w oczy, �atwiej j� odszuka� w tek�cie programu. W Mimo tej nies�awy s� sytuacje, gdy instrukcja goto si� przydaje Na przyk�ad dla natychmiastowego opuszczenia wielokrotnie zagnie�d�onych p�tli. Instrukcj� break przerwa� mo�emy przecie� tylko t� najbardziej zag- nie�d�on� p�tl�. Dzi�ki instrukcji goto mo�emy w wyj�tkowych wypadkach od razu wyskoczy� na zewn�trz. Na zewn�trz - oznacza tu - na zewn�trz tych zagnie�d�onych p�tli. (Zawsze jednak tylko w ramach tego bloku programu, w kt�rym znana jest etykieta). Oto przyk�ad: int m, i, k ; while(m < 500) while(i < 20) for(k = 16 ; k < 100 ; k = k+4 ) { // tu wyskoczymy! if (blad_operacji ) goto berlin ; // O berlin : // etykieta, @ cout << "Po opuszczeniu wszystkich p�tli " ; Je�li w jaki� spos�b w trakcie pracy tych p�tli zmienna blad_operacji przybierze warto�� niezerow�, w�wczas nast�pi wyskok O z p�tli, i wykony- wane b�d� instrukcje pocz�wszy od etykiety berlin � 2.9 Instrukcja continue Instrukcja continue przydaje si� wewn�trz p�tli for, while, do ... while. Powoduje ona zaniechanie realizacji instrukcji b�d�cych tre�ci� p�tli, jednak (w przeciwie�stwie do instrukcji break) sama p�tla nie zostaje przerwana. Continue przerywa tylko ten obieg p�tli i zaczyna nast�pny, kontynuuj�c prac� p�tli. Oto przyk�ad : int k ; for (k =0 ; k < 12 ; k = k + 1} { COUt << "A" ; if(k > 1) continue ; cout << "b" << endl ; } W rezultacie wykonania tego fragmentu programu na ekranie pojawi si�: Ab Ab . AAAAAAAAAA Innymi s�owy napotkanie instrukcji continue odpowiada jakby takiemu u�y- ciu instrukcji goto for(. -