14.01.2015 Views

Podstawy programowania w C++

Podstawy programowania w C++

Podstawy programowania w C++

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Podstawy</strong> <strong>programowania</strong><br />

w języku <strong>C++</strong><br />

Część pierwsza<br />

Łagodny start<br />

Wersja skrócona, tylko <strong>C++</strong><br />

Autor<br />

Roman Simiński<br />

Kontakt<br />

roman.siminski@us.edu.pl<br />

www.us.edu.pl/~siminski<br />

Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa.<br />

Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne.<br />

Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Jak powstał język C, ludzie<br />

Ł a g o d n y s t a r t<br />

Kenneth Thompson<br />

Urodzony w 1943 roku w Nowym Orleanie. Otrzymuje tytuł<br />

magistra Uniwersytetu Kalifornijskiego w 1966, jest entuzjastą<br />

elektroniki, jednak to informatyka staje się jego pasją.<br />

Zaraz po studiach dołącza do grupy z laboratorium firmy Bell,<br />

pracującej wspólnie z GE i MIT nad systemem Multics.<br />

W 1969 projektuje i opracowuje system Unix, wkrótce potem<br />

język B. W 1971 przenosi system Unix na komputer PDP-11,<br />

potem przepisuje jego kod w języku C. Rozwija system Unix (np.<br />

implementuje koncepcję potoków opracowaną przez<br />

D.McIlroy'a).<br />

W połowie lat 70-tych rozpoczyna również pracę dydaktyczną, na początku lat<br />

80-tych stworzony przez niego komputer szachowy Belle zdobywa mistrzostwo<br />

świata w zawodach komputerów szachowych. Kontynuuje pracę dydaktyczną,<br />

otrzymuje wiele nagród. W roku 2000 odchodzi z Laboratorium firmy Bell.<br />

Copyright © Roman Simiński Strona : 2


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Jak powstał język C, ludzie<br />

Ł a g o d n y s t a r t<br />

Dennis M. Ritchie<br />

Urodzony w 1941 w Bronxville (N.Y.), w 1963 kończy Harvard z<br />

dyplomem fizyka, pięć lat później broni doktorat z matematyki.<br />

Zainteresowany teoretycznymi podstawami informatyki trafia,<br />

wzorem ojca, do laboratorium firmy Bell. W 1968 dołącza do<br />

zespołu pracującego nad systemem Multics. Tu spotyka się z K.<br />

Thompsonem.<br />

Po wycofaniu się firmy Bell z projektu Multics kontynuuje współpracę<br />

z K. Thompsonem, w 1972 roku tworzy język C w oparciu o opracowany przez<br />

Thompsona język B.<br />

Kieruje i bierze udział w wielu projektach związanych z rozwojem systemów<br />

operacyjnych. Wielokrotnie nagradzany, wybrany do U.S. National Academy of<br />

Engineering .<br />

Napisana wspólnie z Brianem Kernighan'em książka The C Programming<br />

Language staje się biblią entuzjastów języka C.<br />

Copyright © Roman Simiński Strona : 3


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Jak powstał język C, ludzie<br />

Ł a g o d n y s t a r t<br />

Brian Kernighan<br />

Urodzony w 1942 w Toronto (Ontario), w roku 1964<br />

kończy Uniwersytet w Toronto i otrzymuje dyplom w<br />

zakresie fizyki inżynieryjnej, w roku 1969 broni doktorat<br />

z elektroniki na Uniwersytecie w Princeton.<br />

W 1969 rozpoczyna pracę w laboratorium badawczym<br />

firmy Bell. Opracowuje i współuczestniczy w opracowaniu<br />

wielu programów dla systemu Unix – AWK, ditroff,<br />

opracowuje język AMPL.<br />

Jest, wspólnie z Dennisem Ritchie, współautorem książki The C Programming<br />

Language, która staje się biblią entuzjastów języka C.<br />

Jest autorem książki The UNIX Programming Environment. Aktualnie, jego<br />

zainteresowania koncentrują się na rozwoju języków <strong>programowania</strong>,<br />

metodykach <strong>programowania</strong> i budowaniu interfejsów użytkownika.<br />

Copyright © Roman Simiński Strona : 4


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Początki języka C są związane z wczesną fazą rozwoju systemu Unix.<br />

Prace nad protoplastą tego systemu zostały rozpoczęte pod koniec lat<br />

sześćdziesiątych w laboratoriach telekomunikacyjnej firmy Bell – BTL –<br />

wspólnie z General Electric Company oraz MIT. Powstać miał wielodostępny<br />

system operacyjny Multics – Multiplexed Information and Computing Service.<br />

Mimo iż system Multics działa, prace przerwano w 1969 roku, programiści z BTL<br />

szukają innych projektów. Ciągle chcą napisać uniwersalny system operacyjny.<br />

Jednak w BTL nie ma dla takiego projektu dobrej atmosfery.<br />

Copyright © Roman Simiński Strona : 5


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Jeden z członków zespołu — Ken Thompson<br />

— pisze grę Space Travel. Thompson pisze ją<br />

na komputerze GE Honeywell 635, następnie<br />

używa asemblera skrośnego i przenosi kod<br />

binarny na komputer PDP-7 używając taśmy<br />

papierowej.<br />

Komputer DEC PDP-7 ma w 1968 roku<br />

pamięć 8K 18-sto bitowych słów.<br />

Komputer PDP-7<br />

Copyright © Roman Simiński Strona : 6


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Praca nad rozwojem gry Space Travel wymaga napisania systemu operacyjnego<br />

dla PDP-7, Ken Thompson wspólnie z Denisem Ritchie rozpoczynają pracę nad<br />

tym systemem.<br />

Powstaje pierwsza wersja systemu nazwanego Unix — jego nazwa jest<br />

kalamburem nazwy Multics.<br />

Powstaje wersja systemu obejmującej proste jądro oraz podstawowe narzędzia<br />

(edytor, asembler, powłoka). Wszystko zostało zaimplementowane w języku<br />

symbolicznym, jednak rozpoczynają się próby wykorzystania języka<br />

<strong>programowania</strong> wywodzącego się z języka BCPL.<br />

Copyright © Roman Simiński Strona : 7


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Komputer PDP-7 jest przestarzały. Zespół<br />

podejmuje próbę zdobycia komputera PDP-11.<br />

Kosztuje on wtedy 65 000$.<br />

Ostatecznie zespół otrzymuje komputer w lecie<br />

1970r., jednak prace nad przeniesieniem nań<br />

systemu Unix startują dopiero w grudniu, po<br />

doposażeniu go w dysk.<br />

Oficjalnie prace poświęcone są opracowaniu<br />

systemu dla wydziału patentowego BTL.<br />

Komputer PDP-11<br />

Copyright © Roman Simiński Strona : 8


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Denis Ritchie i Ken Thompson przenoszą system Unix na z PDP-7 na PDP-11 za<br />

pośrednictwem terminalu telegraficznego.<br />

Copyright © Roman Simiński Strona : 9


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Ken Thompson potrzebuje nowego języka <strong>programowania</strong> do tworzenia<br />

o<strong>programowania</strong> systemowego.<br />

Istnieje już jego własny język o nazwie B. Nazwa ta prawdopodobnie pochodzi<br />

od języka BCPL, alternatywna teoria mówi, iż nazwa pochodzi od języka Bon.<br />

Język Bon został stworzony przez Thompson'a wcześniej, a jego nazwa miała<br />

pochodzić ponoć od imienia jego żony — Bonnie.<br />

Język B miał sporo ograniczeń, co spowodowało rozpoczęcie przez Ritchie’go w<br />

roku 1971 prac nad rozszerzeniem tego języka. Doprowadziło to do powstania<br />

dialektu NB (ang. new B).<br />

Copyright © Roman Simiński Strona : 10


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Nazwa NB nie oddaje w pełni różnicy pomiędzy tym językiem a językiem B.<br />

Nowy język otrzymuje nazwę C, otwartą pozostaje kwestię jego pochodzenia —<br />

czy C pochodzi od następnej litery w alfabecie po B czy też od drugiej litery z<br />

protoplasty języków B i C — czyli języka BCPL.<br />

W roku 1973 powstaje specyfikacja języka C (zawierającego typ strukturalny)<br />

oraz odpowiednie narzędzia – rozpoczynają się prace nad przepisanie jądra<br />

Unix’a dla komputera PDP-11.<br />

Również w tym okresie następuje przeniesienia kompilatora języka C na inne<br />

platformy sprzętowe (np. Honeywell 635, IBM 360/370) oraz przygotowania<br />

bibliotek podprogramów — np. podprogramów obsługi standardowego wejścia<br />

i wyjścia.<br />

W 1978 roku Dennis Ritchie i Brian Kernighan publikują książkę Język<br />

<strong>programowania</strong> C (oryginał ang. The C Programming Language).<br />

Copyright © Roman Simiński Strona : 11


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

W latach siedemdziesiątych, w trakcie prac nad implementacją jądra Unix’a,<br />

okazało się, że język jest na tyle elastyczny i efektywny, że rozpoczęto proces<br />

przepisywania narzędzi systemowych.<br />

Aby wspomóc programistów Steve Johnson tworzy narzędzie lint analizujące<br />

zawartość plików źródłowych i sygnalizujące niebezpieczne konstrukcje.<br />

Na początku lat osiemdziesiątych stało się jasne, że język C wymaga<br />

standaryzacji. Stało się to konieczne między innymi ze względu na wzrost<br />

zainteresowania językiem C w projektach rządowych.<br />

Copyright © Roman Simiński Strona : 12


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język C, kalendarium<br />

Ostatecznie w lecie 1983 roku ANSI powołało komitet X3J11, którego celem było<br />

opracowanie standardu języka C. Komitet ten opracował raport (ANSI 89) w<br />

końcu roku 1989, standard ten został zaakceptowany przez ISO jako ISO/IEC<br />

9899-1990.<br />

Standaryzacja przyczynia się do poprawy przenośności kodu źródłowego.<br />

Kompilatory języka C dostępne są na każdej, szanującej się platformie<br />

sprzętowej. Pośrednio ułatwia to przenoszenie systemu Unix i powstawanie jego<br />

dedykowanych wersji.<br />

Copyright © Roman Simiński Strona : 13


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Rozwój C a inne języki <strong>programowania</strong><br />

Najbardziej znane rozwinięcia języka C: Concurrent C, Objective C, C*, <strong>C++</strong>.<br />

Z pnia języka C wyrosły również: Java, JavaScript, PHP, C#, i wiele innych.<br />

Po określeniu standardu języka C, jego specyfikacja przez dłuższy czas nie<br />

zmienia się. W tym samym czasie specyfikacja języka <strong>C++</strong> ciągle ewoluuje.<br />

Rozwój języka <strong>C++</strong> pośrednio wpływa na modyfikację standardu C.<br />

Powstaje standard C99, opublikowany przez ISO w 1999 r. Standard ten zostaje<br />

przyjęty przez ANSI w marcu 2000 r.<br />

Większość zmian standardu C99 zbliża język C do <strong>C++</strong>. Z tego powodu wielu<br />

producentów kompilatorów nie jest zainteresowanych implementacją C99,<br />

preferując zamiast niego <strong>programowania</strong> w <strong>C++</strong> bez wykorzystania obiektów .<br />

Powstają – specjalizowane i niszowe – języki: C––, D, P.<br />

Copyright © Roman Simiński Strona : 14


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Jak powstał język <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Bjarne Stroustrup<br />

Urodzony w 1950 w Aarhus (Dania), skończył studia w swym<br />

rodzinnym mieście, doktorat obronił na Uniwersytecie w<br />

Cambridge. Od 1979 roku związany z centrum badawczym firmy<br />

Bell.<br />

Aktualnie pracuje jako profesor w Texas A&M University,<br />

utrzymując jednocześnie swoje związki z firmą AT&T jako<br />

członek zespołu badawczego laboratorium tej firmy.<br />

Twórca języka <strong>C++</strong>, autor książek:<br />

●<br />

●<br />

Język <strong>programowania</strong> <strong>C++</strong> (ang. The <strong>C++</strong> Programing Language), trzy<br />

edycje + edycja specjalna;<br />

Projektowanie i ewolucja <strong>C++</strong> (ang. The Design and Evolution of <strong>C++</strong>).<br />

Copyright © Roman Simiński Strona : 15


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język <strong>C++</strong>, kalendarium<br />

1979<br />

1980<br />

Bjarnie Sroustrup, pracujący w Centrum Badań Komputerowych Laboratorium<br />

firmy Bell (ang. Computing Science Research Center of Bell Labs) prowadzi<br />

badania symulacyjne związane z sieciami komputerowymi.<br />

Język Simula, idealny do symulacji pod względem funkcjonalnym, jest za mało<br />

efektywny. Stroustrup potrzebuje nowego, obiektowego języka <strong>programowania</strong><br />

łączącego funkcjonalność języka Simula z efektywnością języka C.<br />

Bjarne Stroustrup projektuje język <strong>programowania</strong> łączący w sobie cechy<br />

języków Simuli i C.<br />

Język zostaje nazwany C z klasami (ang. C with Classes). Wersja ta nie zawiera<br />

jeszcze znanych aktualnie z <strong>C++</strong> rozbudowanych mechanizmów obiektowych.<br />

Copyright © Roman Simiński Strona : 16


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język <strong>C++</strong>, kalendarium<br />

1983<br />

Rick Mascitti proponuje nazwę <strong>C++</strong> dla nowego języka. Nazwa sugeruje<br />

ewolucyjna naturę <strong>C++</strong> w stosunku do języka C.<br />

Nowy język nie został nazwany D, ponieważ stanowi on rozszerzenie C a nie<br />

próbę stworzenia nowego jakościowo języka <strong>programowania</strong>.<br />

1985<br />

Język <strong>C++</strong> zostaje zaprezentowany publicznie z możliwością wykorzystania poza<br />

Laboratorium Bell.<br />

Powstaje pierwszy komercyjny kompilator <strong>C++</strong> : cfront. Jest to tak na prawdę<br />

translator, tłumaczący kod w języku <strong>C++</strong> na kod w języku C, kompilowany<br />

następnie zwykłym kompilatorem języka C.<br />

Copyright © Roman Simiński Strona : 17


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język <strong>C++</strong>, kalendarium<br />

1989<br />

Michael Tiemann (firma Cygnus Support) implementuje pierwszy „prawdziwy”<br />

kompilator <strong>C++</strong>, zwany G++.<br />

Publikacja pierwszej specyfikacji <strong>C++</strong> w postaci książki „The Annoutated <strong>C++</strong><br />

Reference Manual” autorstwa Stroustrupa i Ellisa, znanej jako ARM.<br />

Rozpoczyna się proces standaryzacji języka.<br />

1995-1998<br />

Komitet ANSI publikuje pierwszą wersję zarysu standardu <strong>C++</strong>. Rozpoczyna się<br />

uciążliwy proces rewizji standardu — wymaga on wielu poprawek.<br />

Grudzień 95, zostaje opublikowany szkic standardu ANSI <strong>C++</strong>, grudzień 97,<br />

oficjalna premiera pełnej wersji standardu ANSI <strong>C++</strong>.<br />

Czerwiec 98, oficjalna aprobata dla opublikowanego standardu. Standard<br />

zostaje również zaaprobowany przez ISO. Zamrożenie prac na pięć lat — okres<br />

na adaptację producentów kompilatorów i poprawę błędów.<br />

Copyright © Roman Simiński Strona : 18


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Jak powstał język <strong>C++</strong>, kalendarium<br />

Aktualnie<br />

Obowiązuje standard ISO/IEC 14882:1998 (Standard for the <strong>C++</strong><br />

Programming Language) z drobnymi poprawkami zatwierdzonymi w 2003 r.<br />

(ISO/IEC 14882:2003).<br />

Ogłoszenie nowego standardu (tzw. <strong>C++</strong>0x) planowane było na 2009.<br />

Jednak pod koniec 2009 roku dostępna jest jedynie wersja robocza.<br />

Należy się spodziewać pojawienia oficjalnego standardu w roku 2010, a na<br />

standard międzynarodowy być może przyjdzie poczekać do roku 2011.<br />

Copyright © Roman Simiński Strona : 19


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Literatura — język C<br />

Ł a g o d n y s t a r t<br />

Brian W. Kernigham, Dennis M. Richie, Język ANSI C, Wydawnictwo<br />

Naukowo–Techniczne, Warszawa, 2003.<br />

Klasyka!<br />

Clovis L. Tondo, Scott E. Gimpel, Język ANSI C, ćwiczenia i rozwiązania,<br />

Wydawnictwo Naukowo–Techniczne, Warszawa, 2003.<br />

Kopalnia sztuczek!<br />

Adam Sapek, Wgłąb języka C, Helion, Gliwice, 1993.<br />

Stare ale jare!<br />

Stephen Prata, Szkoła <strong>programowania</strong>. Język C, 2006, Helion.<br />

Może być tą jedyną :) Gorąco polecam!<br />

Copyright © Roman Simiński Strona : 20


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Literatura — język <strong>C++</strong><br />

S. Prata, Szkoła <strong>programowania</strong>. Język <strong>C++</strong>, 2006, Helion.<br />

Może być tą jedyną :) Gorąco polecam!<br />

J. Liberty, <strong>C++</strong> dla każdego, Helion, 2002.<br />

Jeżeli programowanie to nie Twoja pasja, to to książka dla Ciebie ;)<br />

S.B. Lippman, J. Lajoie, <strong>Podstawy</strong> języka <strong>C++</strong>, WNT, 2003.<br />

Świetne, ale trzeba już coś o <strong>C++</strong> wiedzieć.<br />

P.J. Plauger, Biblioteka standardowa <strong>C++</strong>, WNT, 1997.<br />

Przydatne.<br />

B. Stroustrup, Język <strong>C++</strong>, WNT, 2002.<br />

Dobre lecz trudne.<br />

B. Eckel, Thinking in <strong>C++</strong> 2nd Edition, dostępne via Internet:<br />

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html<br />

Lektura na wiele tygodni.<br />

Copyright © Roman Simiński Strona : 21


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Zaczynamy — problem do rozwiązania<br />

Problem<br />

Należy napisać program pozwalający na przeliczenie odległości podanej<br />

w kilometrach na mile amerykańskie.<br />

Scenariusz działania programu:<br />

Odległość w milach = 0.625 · odległość w kilometrach<br />

Odległość w kilometrach = 1.6 · odległość w milach<br />

Copyright © Roman Simiński<br />

Strona :<br />

22


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Pierwsza przymiarka — program, który robi nic<br />

int main()<br />

{<br />

return 0;<br />

}<br />

int (integer) to podstawowy typ całkowitoliczbowy<br />

Nazwa funkcji<br />

Typ rezultatu<br />

Parametry<br />

Ciało funkcji<br />

int main()<br />

{<br />

return 0;<br />

}<br />

Instrukcja powrotu<br />

z podprogramu<br />

Wartość przekazywna<br />

w miejscu wywołania<br />

Każdy program C/<strong>C++</strong>musi posiadać funkcję o nazwie main, stanowiącą tzw. punkt<br />

wejściowy programu.<br />

Od niej się rozpoczyna wykonanie programu napisanego w języku C/<strong>C++</strong>.<br />

Copyright © Roman Simiński Strona : 23


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Kto wywołuje funkcję main<br />

Funkcja main stanowi punkt programu, od którego zaczyna się jego<br />

wywołanie.<br />

Upraszczając, można powiedzieć, że funkcja main jest wywoływana przez<br />

system operacyjny.<br />

Wartość, będąca rezultatem funkcji main jest przekazywana systemowi<br />

operacyjnemu, stanowiąc kod wyjścia programu.<br />

Kod wyjścia programu może być wykorzystywany w skryptach systemu<br />

operacyjnego oraz jako środek komunikacji pomiędzy procesami.<br />

Copyright © Roman Simiński Strona : 24


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wariacje na temat funkcji main<br />

Zamiast rezultatu w postaci bezwzględnych wartości można wykorzystać symbole:<br />

EXIT_SUCCESS — oznacza bezbłędne zakończenie programu.<br />

EXIT_FAILURE —zakończenie z informacją o błędzie.<br />

Stosowanie tych symboli jest zalecane przez standard POSIX. POSIX standaryzuje<br />

m.in. interfejs programistyczny, dotyczy głównie systemów klasy UNIX.<br />

Niestety, program zapisany tak:<br />

int main()<br />

{<br />

return EXIT_SUCCESS;<br />

}<br />

Nie skompiluje się prawidłowo:<br />

Dlaczego<br />

`<br />

Copyright © Roman Simiński Strona : 27


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wariacje na temat funkcji main<br />

Symbole:<br />

EXIT_SUCCESS,<br />

EXIT_FAILURE,<br />

Nie są częścią języków C/<strong>C++</strong>, zapisane są w bibliotekach języka C.<br />

Aby z nich skorzystać, należy uzupełnić program do postaci:<br />

#include <br />

int main()<br />

{<br />

return EXIT_SUCCESS;<br />

}<br />

Dyrektywa #include powoduje włączenie zawartości<br />

pliku stdlib, zawierającego definicje symboli<br />

EXIT_SUCCESS i EXIT_FAILURE<br />

Copyright © Roman Simiński Strona : 28


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Do czego służy dyrektywa #include<br />

Ta dyrektywa #include powoduje włączenie do kodu źródłowego programu<br />

w języku C/<strong>C++</strong> definicji i deklaracji niezbędnych dla kompilacji.<br />

Informacje te są przechowywane w tzw. plikach nagłówkowych, są to pliku<br />

tekstowe.<br />

Dyrektywa:<br />

#include <br />

Powoduje włączenie do kodu programu zawartości pliku nagłówkowego<br />

stdlib.h, zawierającego definicje i deklaracje niezbędne dla wykorzystania<br />

elementów standardowej biblioteki języka C.<br />

W tym pliku zdefiniowane są właśnie symbole EXIT_SUCCES oraz<br />

EXIT_FAILURE.<br />

Dyrektywa #include realizowana jest przez preprocesor języka C/<strong>C++</strong>.<br />

Copyright © Roman Simiński Strona : 29


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Kłopot z rozszerzeniami plików nagłówkowych<br />

Pliki nagłówkowe w języku C mają rozszerzenie .h.<br />

Pliki nagłówkowe w języku <strong>C++</strong> mają zwykle rozszerzenie .h, .hpp, .hxx.<br />

Wielość możliwych rozszerzeń nazw plików w <strong>C++</strong> to kłopot.<br />

Aktualnie w programach w języku <strong>C++</strong> nie pisze się rozszerzeń nazw plików<br />

nagłówkowych.<br />

W programach w języku <strong>C++</strong>, nazwy plików nagłówkowych z języka C pisze się<br />

z prefiksem c.<br />

C , ANSI89<br />

Nagłówek standardowej biblioteki<br />

#include <br />

Nagłówek biblioteki wejścia/wyjścia<br />

#include <br />

<strong>C++</strong><br />

Nagłówek standardowej biblioteki C<br />

#include <br />

Nagłówek biblioteki wejścia/wyjścia C<br />

#include <br />

Copyright © Roman Simiński Strona : 30


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wariacje na temat funkcji main, ciąg dalszy<br />

Program robiący nic, zapisany w języku C:<br />

#include <br />

int main()<br />

{<br />

return EXIT_SUCCESS;<br />

}<br />

C , ANSI89<br />

Program robiący nic, zapisany w języku <strong>C++</strong>:<br />

#include <br />

int main()<br />

{<br />

return EXIT_SUCCESS;<br />

}<br />

<strong>C++</strong><br />

Copyright © Roman Simiński Strona : 31


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Co to standardowe strumienie programu<br />

stdin — standardowy strumień wejściowy programu, jest zwykle skojarzony<br />

z klawiaturą;<br />

stdout — standardowy strumień wyjściowy programu, jest zwykle skojarzony<br />

z ekranem monitora;<br />

stderr — standardowy strumień wyjściowy błędów programu, jest zwykle<br />

skojarzony również z ekranem monitora.<br />

Pamięć<br />

operacyjna<br />

Strumienie stdin, stdout reprezentują<br />

normalny kanał komunikacji programu z<br />

użytkownikiem.<br />

stdout<br />

stderr<br />

stdin<br />

Program jako<br />

proces<br />

Strumień stderr zarezerwowany jest do<br />

wyświetlania komunikatów diagnostycznych<br />

programu.<br />

Copyright © Roman Simiński Strona : 34


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Redyrekcja (przekierowanie) strumieni programu<br />

Standardowe skojarzenie<br />

strumieni.<br />

stdout<br />

stderr<br />

stdin<br />

Pamięć<br />

operacyjna<br />

Program jako<br />

proces<br />

Redyrekcja (przekierowanie) strumieni z poziomu systemu operacyjnego:<br />

C:\>test.exe > wyjscie.txt<br />

C:\>test.exe < wejscie.txt<br />

C:\>test.exe < wejscie.txt > wyjscie.txt<br />

Copyright © Roman Simiński Strona : 35


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Strumienie programu w języku <strong>C++</strong><br />

cin — strumień reprezentujący standardowe wejście programu, odpowiada<br />

strumieniowi stdin z C. Strumień cin odczytuje dane i zapisuje je do<br />

odpowiednich zmiennych.<br />

cout — strumień reprezentujący standardowe wyjście programu. Odpowiada<br />

strumieniowi stdout z C.<br />

cerr — niebuforowany strumień wyjściowy błędów. Odpowiada strumieniowi<br />

stderr z C.<br />

clog — buforowany strumień wyjściowy błędów. Odpowiada strumieniowi stderr<br />

z C.<br />

Aby skorzystać z strumieni cin, cout, cerr należy włączyć odpowiedni plik nagłówkowy<br />

Starsze kompilatory — przed standaryzacją odwołań do<br />

plików nagłówkowych<br />

#include <br />

Aktualny standard<br />

#include <br />

using namespace std;<br />

Copyright © Roman Simiński Strona : 36


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wyprowadzanie komunikatów do strumienia wyjściowego programu<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wyprowadzanie komunikatów do strumienia wyjściowego programu<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wyprowadzanie komunikatów do strumienia wyjściowego programu<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wprowadzamy zmienne — deklaracje zmiennych w języku <strong>C++</strong><br />

float to typ zmiennopozycyjny, służący do reprezentowania liczb rzeczywistych<br />

pojedynczej precyzji.<br />

double to typ zmiennopozycyjny, służący do reprezentowania liczb<br />

rzeczywistych podwójnej precyzji precyzji.<br />

int to typ całkowitoliczbowy, służący do reprezentowania liczb całkowitych ze<br />

znakiem, o zakresie zależnym od implementacji.<br />

Copyright © Roman Simiński Strona : 41


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wprowadzamy zmienne — deklaracje zmiennych w języku <strong>C++</strong><br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry, wynik ;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Zapytaj o odległości w kilometrach — język <strong>C++</strong><br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry, wynik;<br />

Manipulator flush powoduje opróżnienie<br />

bufora strumienia cout.<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wczytanie odległości w kilometrach, obiekt cin — język <strong>C++</strong><br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry, wynik;<br />

cout > zwanego wydobywaczem (ang. extractor), który przeprowadza<br />

konieczne konwersje w trakcie pobierania danych.<br />

Operator >> pomija „białe” znaki w strumieniu wejściowym.<br />

Copyright © Roman Simiński Strona : 50


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Obliczenia, wyprowadzenie wyników — język <strong>C++</strong><br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry, wynik;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

cin to obiekt posiadający wbudowane funkcje składowe<br />

cin . ignore() ;<br />

Nazwa obiektu (zmiennej<br />

obiektowej)<br />

Selektor wyboru<br />

składowej obiektu<br />

Odwołanie do<br />

funkcji składowej<br />

cin . get() ;<br />

Copyright © Roman Simiński Strona : 60


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Niech użytkownik ma szansę zobaczyć wyniki<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry, wynik;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Zmienna wynik jest właściwie zbędna...<br />

. . .<br />

cin >> kilometry;<br />

wynik = kilometry * 0.625;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wyprowadzanie danych do cout można uprościć<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Kilometry na mile — podsumowanie<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float kilometry;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Kolejny problem do rozwiązania<br />

Problem<br />

Zadaniem programu jest obliczanie, ile średnio litrów paliwa zużywa pojazd na<br />

trasie 100 km.<br />

Scenariusz działania programu:<br />

Copyright © Roman Simiński Strona : 66


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Kolejny problem do rozwiązania — analiza<br />

Średnie spalanie wyznaczamy z proporcji:<br />

przejechany dystans [km] — ilość paliwa [litry]<br />

100 [km] — x [litry]<br />

spalanie = ( 100 * ilość paliwa ) / przejechany dystans<br />

Do obliczenia średniego zużycia potrzebne są dwie wartości liczbowe, jak<br />

wyżej. Powinny to być liczby rzeczywiste.<br />

Program powinien zapytać użytkownika o te wartości, zapamiętać je, dokonać<br />

obliczeń oraz wyświetlić wynik.<br />

Program powinien reagować na niepoprawne dane wejściowe — uwaga na<br />

dzielenie przez zero!<br />

Copyright © Roman Simiński Strona : 67


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Instrukcje warunkowe<br />

Ł a g o d n y s t a r t<br />

Instrukcja warunkowa<br />

if( W )<br />

I<br />

Instrukcja alternatywy<br />

if( W )<br />

I1<br />

else<br />

I2<br />

W<br />

tak<br />

nie<br />

W<br />

tak<br />

nie<br />

II<br />

I2<br />

I1<br />

W językach C/<strong>C++</strong> każde wyrażenie o wartości numerycznej 0 jest traktowane<br />

jako fałszywe, każde wyrażenie o wartości różnej od zera jako prawdziwe.<br />

Copyright © Roman Simiński Strona : 74


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Wersja z kontrolą dzielenia przez zero<br />

#include <br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float dystans, paliwo;<br />

cout


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Podsumowanie<br />

Każdy program w języku C/<strong>C++</strong> musi posiadać funkcję main. Od niej rozpoczyna<br />

się wykonanie programu.<br />

Funkcja main według standardu ANSI C powinna „zwracać” wartość całkowitą,<br />

stanowiącą kod zakończenia programu przekazywany systemowi operacyjnemu<br />

lub procesowi — rodzicowi.<br />

Każda funkcja posiada swoje ciało ujęte w nawiasy klamrowe { }.<br />

Zakończenie wykonania funkcji następuje wraz z osiągnięciem klamry<br />

zamykającej ciało funkcji lub po napotkaniu instrukcji powrotu z podprogramu —<br />

instrukcji return. Wartość umieszczona po tej instrukcji stanowi rezultat funkcji.<br />

Instrukcja return może wystąpić w ciele funkcji wielokrotnie, w miejscach<br />

dozwolonych syntaktyką języka.<br />

W języku C zmienne wewnątrz funkcji wolno deklarować na początku każdego<br />

bloku. Na etapie deklaracji zmienne mogą być inicjowane.<br />

Copyright © Roman Simiński Strona : 77


<strong>Podstawy</strong> <strong>programowania</strong> w <strong>C++</strong><br />

Ł a g o d n y s t a r t<br />

Podsumowanie, cd...<br />

W języku <strong>C++</strong> zmienne wewnątrz funkcji wolno deklarować w dowolnym<br />

sensowym miejscu. Na etapie deklaracji zmienne mogą być inicjowane.<br />

W języku C/<strong>C++</strong> nie ma funkcji standardowych. Wszystkie funkcje pochodzą<br />

z bibliotek lub są napisane przez programistę.<br />

Aby kompilator mógł sprawdzić poprawność wywołania funkcji bibliotecznych<br />

wykorzystuje się pliki nagłówkowe. Zawierają one informacje o typie rezultatu<br />

funkcji, parametrach i są włączane do kodu źródłowego programu dyrektywą<br />

#include.<br />

W języku C wywołanie funkcji bez włączenia odpowiedniego pliku nagłówkowego<br />

nie spowoduje błędu kompilacji (ang. error) a jedynie ostrzeżenie (ang.<br />

warning). W języku <strong>C++</strong> wywołanie funkcji bez włączenia odpowiedniego pliku<br />

nagłówkowego spowoduje powstanie błędu kompilacji (ang. error).<br />

W instrukcji if-else, przed słowem kluczowym else występuje średnik. W języku<br />

C/<strong>C++</strong> średnik nie rozdziela instrukcji, a kończy je.<br />

Copyright © Roman Simiński Strona : 78

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!