Podstawy programowania w C++
Podstawy programowania w C++
Podstawy programowania w C++
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