Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C...

78
Podstawy programowania Podstawy programowania w j w języku C i C++ ęzyku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione. Roman Simiński [email protected] www.us.edu.pl/~siminski Autor Kontakt

Transcript of Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C...

Page 1: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Podstawy programowaniaPodstawy programowaniaw jw języku C i C++ęzyku C i C++

Łagodny start

Część pierwsza

Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa.Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne.

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

Roman Simiński

[email protected]/~siminski

Autor

Kontakt

Page 2: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, ludzie Jak powstał język C, ludzie Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 2Strona :

Łagodny s ta r tŁagodny s ta r t

Urodzony w 1943 roku w Nowym Orleanie. Otrzymuje tytuł magistra Uniwersytetu Kalifornijskiego w 1966, jest entuzjastą elektroniki, jednak to informatyka staje się jego pasją.

Zaraz po studiach dołącza do grupy z laboratorium firmy Bell, pracującej wspólnie z GE i MIT nad systemem Multics.

W 1969 projektuje i opracowuje system Unix, wkrótce potem język B. W 1971 przenosi system Unix na komputer PDP-11, potem przepisuje jego kod w języku C. Rozwija system Unix (np. implementuje koncepcję potoków opracowaną przez D.McIlroy'a).

W połowie lat 70-tych rozpoczyna również pracę dydaktyczną, na początku lat 80-tych stworzony przez niego komputer szachowy Belle zdobywa mistrzostwo świata w zawodach komputerów szachowych. Kontynuuje pracę dydaktyczną, otrzymuje wiele nagród. W roku 2000 odchodzi z Laboratorium firmy Bell.

Kenneth Thompson

Page 3: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, ludzie Jak powstał język C, ludzie Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 3Strona :

Łagodny s ta r tŁagodny s ta r t

Dennis M. Ritchie

Urodzony w 1941 w Bronxville (N.Y.), w 1963 kończy Harvard z dyplomem fizyka, pięć lat później broni doktorat z matematyki.

Zainteresowany teoretycznymi podstawami informatyki trafia, wzorem ojca, do laboratorium firmy Bell. W 1968 dołącza do zespołu pracującego nad systemem Multics. Tu spotyka się z K. Thompsonem.

Po wycofaniu się firmy Bell z projektu Multics kontynuuje współpracę z K. Thompsonem, w 1972 roku tworzy język C w oparciu o opracowany przez Thompsona język B.

Kieruje i bierze udział w wielu projektach związanych z rozwojem systemów operacyjnych. Wielokrotnie nagradzany, wybrany do U.S. National Academy of Engineering .

Napisana wspólnie z Brianem Kernighan'em książka The C Programming Language staje się biblią entuzjastów języka C.

Page 4: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, ludzie Jak powstał język C, ludzie Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 4Strona :

Łagodny s ta r tŁagodny s ta r t

Brian Kernighan

Urodzony w 1942 w Toronto (Ontario), w roku 1964 kończy Uniwersytet w Toronto i otrzymuje dyplom w zakresie fizyki inżynieryjnej, w roku 1969 broni doktorat z elektroniki na Uniwersytecie w Princeton.

W 1969 rozpoczyna pracę w laboratorium badawczym firmy Bell. Opracowuje i współuczestniczy w opracowaniu wielu programów dla systemu Unix – AWK, ditroff, opracowuje język AMPL.

Jest, wspólnie z Dennisem Ritchie, współautorem książki The C Programming Language, która staje się biblią entuzjastów języka C.

Jest autorem książki The UNIX Programming Environment. Aktualnie, jego zainteresowania koncentrują się na rozwoju języków programowania, metodykach programowania i budowaniu interfejsów użytkownika.

Page 5: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 5Strona :

Łagodny s ta r tŁagodny s ta r t

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

Prace nad protoplastą tego systemu zostały rozpoczęte pod koniec lat sześćdziesiątych w laboratoriach telekomunikacyjnej firmy Bell – BTL – wspólnie z General Electric Company oraz MIT. Powstać miał wielodostępny system operacyjny Multics – Multiplexed Information and Computing Service.

Mimo iż system Multics działa, prace przerwano w 1969 roku, programiści z BTL szukają innych projektów. Ciągle chcą napisać uniwersalny system operacyjny. Jednak w BTL nie ma dla takiego projektu dobrej atmosfery.

Page 6: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 6Strona :

Łagodny s ta r tŁagodny s ta r t

Jeden z członków zespołu — Ken Thompson — pisze grę Space Travel. Thompson pisze ją na komputerze GE Honeywell 635, następnie używa asemblera skrośnego i przenosi kod binarny na komputer PDP-7 używając taśmy papierowej.

Komputer DEC PDP-7 ma w 1968 roku pamięć 8K 18-sto bitowych słów.

Komputer PDP-7

Page 7: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 7Strona :

Łagodny s ta r tŁagodny s ta r t

Praca nad rozwojem gry Space Travel wymaga napisania systemu operacyjnego dla PDP-7, Ken Thompson wspólnie z Denisem Ritchie rozpoczynają pracę nad tym systemem.

Powstaje pierwsza wersja systemu nazwanego Unix — jego nazwa jest kalamburem nazwy Multics.

Powstaje wersja systemu obejmującej proste jądro oraz podstawowe narzędzia (edytor, asembler, powłoka). Wszystko zostało zaimplementowane w języku symbolicznym, jednak rozpoczynają się próby wykorzystania języka programowania wywodzącego się z języka BCPL.

Page 8: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 8Strona :

Łagodny s ta r tŁagodny s ta r t

Komputer PDP-7 jest przestarzały. Zespół podejmuje próbę zdobycia komputera PDP-11. Kosztuje on wtedy 65 000$.

Ostatecznie zespół otrzymuje komputer w lecie 1970r., jednak prace nad przeniesieniem nań systemu Unix startują dopiero w grudniu, po doposażeniu go w dysk.

Oficjalnie prace poświęcone są opracowaniu systemu dla wydziału patentowego BTL.

Komputer PDP-11

Page 9: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 9Strona :

Łagodny s ta r tŁagodny s ta r t

Denis Ritchie i Ken Thompson przenoszą system Unix na z PDP-7 na PDP-11 za pośrednictwem terminalu telegraficznego.

Page 10: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 10Strona :

Łagodny s ta r tŁagodny s ta r t

Ken Thompson potrzebuje nowego języka programowania do tworzenia oprogramowania systemowego.

Istnieje już jego własny język o nazwie B. Nazwa ta prawdopodobnie pochodzi od języka BCPL, alternatywna teoria mówi, iż nazwa pochodzi od języka Bon.

Język Bon został stworzony przez Thompson'a wcześniej, a jego nazwa miała pochodzić ponoć od imienia jego żony — Bonnie.

Język B miał sporo ograniczeń, co spowodowało rozpoczęcie przez Ritchie’go w roku 1971 prac nad rozszerzeniem tego języka. Doprowadziło to do powstania dialektu NB (ang. new B).

Page 11: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 11Strona :

Łagodny s ta r tŁagodny s ta r t

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

Nowy język otrzymuje nazwę C, otwartą pozostaje kwestię jego pochodzenia — czy C pochodzi od następnej litery w alfabecie po B czy też od drugiej litery z protoplasty języków B i C — czyli języka BCPL.

W roku 1973 powstaje specyfikacja języka C (zawierającego typ strukturalny) oraz odpowiednie narzędzia – rozpoczynają się prace nad przepisanie jądra Unix’a dla komputera PDP-11.

Również w tym okresie następuje przeniesienia kompilatora języka C na inne platformy sprzętowe (np. Honeywell 635, IBM 360/370) oraz przygotowania bibliotek podprogramów — np. podprogramów obsługi standardowego wejściai wyjścia.

W 1978 roku Dennis Ritchie i Brian Kernighan publikują książkę Język programowania C (oryginał ang. The C Programming Language).

Page 12: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 12Strona :

Łagodny s ta r tŁagodny s ta r t

W latach siedemdziesiątych, w trakcie prac nad implementacją jądra Unix’a, okazało się, że język jest na tyle elastyczny i efektywny, że rozpoczęto proces przepisywania narzędzi systemowych.

Aby wspomóc programistów Steve Johnson tworzy narzędzie lint analizujące zawartość plików źródłowych i sygnalizujące niebezpieczne konstrukcje.

Na początku lat osiemdziesiątych stało się jasne, że język C wymaga standaryzacji. Stało się to konieczne między innymi ze względu na wzrost zainteresowania językiem C w projektach rządowych.

Page 13: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C, kalendariumJak powstał język C, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 13Strona :

Łagodny s ta r tŁagodny s ta r t

Ostatecznie w lecie 1983 roku ANSI powołało komitet X3J11, którego celem było opracowanie standardu języka C. Komitet ten opracował raport (ANSI 89) w końcu roku 1989, standard ten został zaakceptowany przez ISO jako ISO/IEC 9899-1990.

Standaryzacja przyczynia się do poprawy przenośności kodu źródłowego. Kompilatory języka C dostępne są na każdej, szanującej się platformie sprzętowej. Pośrednio ułatwia to przenoszenie systemu Unix i powstawanie jego dedykowanych wersji.

Page 14: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwój C a inne języki programowania Rozwój C a inne języki programowania Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 14Strona :

Łagodny s ta r tŁagodny s ta r t

Najbardziej znane rozwinięcia języka C: Concurrent C, Objective C, C*, C++.

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

Po określeniu standardu języka C, jego specyfikacja przez dłuższy czas nie zmienia się. W tym samym czasie specyfikacja języka C++ ciągle ewoluuje.

Rozwój języka C++ pośrednio wpływa na modyfikację standardu C.

Powstaje standard C99, opublikowany przez ISO w 1999 r. Standard ten zostaje przyjęty przez ANSI w marcu 2000 r.

Większość zmian standardu C99 zbliża język C do C++. Z tego powodu wielu producentów kompilatorów nie jest zainteresowanych implementacją C99, preferując zamiast niego programowania w C++ bez wykorzystania obiektów .

Powstają – specjalizowane i niszowe – języki: C––, D, P.

Page 15: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C++Jak powstał język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 15Strona :

Łagodny s ta r tŁagodny s ta r t

Urodzony w 1950 w Aarhus (Dania), skończył studia w swym rodzinnym mieście, doktorat obronił na Uniwersytecie w Cambridge. Od 1979 roku związany z centrum badawczym firmy Bell.

Aktualnie pracuje jako profesor w Texas A&M University, utrzymując jednocześnie swoje związki z firmą AT&T jako członek zespołu badawczego laboratorium tej firmy.

Twórca języka C++, autor książek:

● Język programowania C++ (ang. The C++ Programing Language), trzy edycje + edycja specjalna;

● Projektowanie i ewolucja C++ (ang. The Design and Evolution of C++).

Bjarne Stroustrup

Page 16: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C++, kalendariumJak powstał język C++, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 16Strona :

Łagodny s ta r tŁagodny s ta r t

Bjarnie Sroustrup, pracujący w Centrum Badań Komputerowych Laboratorium firmy Bell (ang. Computing Science Research Center of Bell Labs) prowadzi badania symulacyjne związane z sieciami komputerowymi.

Język Simula, idealny do symulacji pod względem funkcjonalnym, jest za mało efektywny. Stroustrup potrzebuje nowego, obiektowego języka programowania łączącego funkcjonalność języka Simula z efektywnością języka C.

1979

Bjarne Stroustrup projektuje język programowania łączący w sobie cechy języków Simuli i C.

Język zostaje nazwany C z klasami (ang. C with Classes). Wersja ta nie zawiera jeszcze znanych aktualnie z C++ rozbudowanych mechanizmów obiektowych.

1980

Page 17: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C++, kalendariumJak powstał język C++, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 17Strona :

Łagodny s ta r tŁagodny s ta r t

Rick Mascitti proponuje nazwę C++ dla nowego języka. Nazwa sugeruje ewolucyjna naturę C++ w stosunku do języka C.

Nowy język nie został nazwany D, ponieważ stanowi on rozszerzenie C a nie próbę stworzenia nowego jakościowo języka programowania.

1983

Język C++ zostaje zaprezentowany publicznie z możliwością wykorzystania poza Laboratorium Bell.

Powstaje pierwszy komercyjny kompilator C++ : cfront. Jest to tak na prawdę translator, tłumaczący kod w języku C++ na kod w języku C, kompilowany następnie zwykłym kompilatorem języka C.

1985

Page 18: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C++, kalendariumJak powstał język C++, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 18Strona :

Łagodny s ta r tŁagodny s ta r t

Michael Tiemann (firma Cygnus Support) implementuje pierwszy „prawdziwy” kompilator C++, zwany G++.

Publikacja pierwszej specyfikacji C++ w postaci książki „The Annoutated C++ Reference Manual” autorstwa Stroustrupa i Ellisa, znanej jako ARM. Rozpoczyna się proces standaryzacji języka.

1989

Komitet ANSI publikuje pierwszą wersję zarysu standardu C++. Rozpoczyna się uciążliwy proces rewizji standardu — wymaga on wielu poprawek.

Grudzień 95, zostaje opublikowany szkic standardu ANSI C++, grudzień 97, oficjalna premiera pełnej wersji standardu ANSI C++.

Czerwiec 98, oficjalna aprobata dla opublikowanego standardu. Standard zostaje również zaaprobowany przez ISO. Zamrożenie prac na pięć lat — okres na adaptację producentów kompilatorów i poprawę błędów.

1995-1998

Page 19: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Jak powstał język C++, kalendariumJak powstał język C++, kalendariumPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 19Strona :

Łagodny s ta r tŁagodny s ta r t

Aktualnie

Obowiązuje standard ISO/IEC 14882:1998 (Standard for the C++ Programming Language) z drobnymi poprawkami zatwierdzonymi w 2003 r. (ISO/IEC 14882:2003).

Ogłoszenie nowego standardu (tzw. C++0x) planowane było na 2009.

Jednak pod koniec 2009 roku dostępna jest jedynie wersja robocza.

Należy się spodziewać pojawienia oficjalnego standardu w roku 2010, a na standard międzynarodowy być może przyjdzie poczekać do roku 2011.

Page 20: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Literatura — język CLiteratura — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 20Strona :

Łagodny s ta r tŁagodny s ta r t

Brian W. Kernigham, Dennis M. Richie, Język ANSI C, Wydawnictwo Naukowo–Techniczne, Warszawa, 2003. Klasyka!

Clovis L. Tondo, Scott E. Gimpel, Język ANSI C, ćwiczenia i rozwiązania, Wydawnictwo Naukowo–Techniczne, Warszawa, 2003. Kopalnia sztuczek!

Adam Sapek, Wgłąb języka C, Helion, Gliwice, 1993. Stare ale jare!

Stephen Prata, Szkoła programowania. Język C, 2006, Helion.Może być tą jedyną :) Gorąco polecam!

Page 21: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Literatura — język C++Literatura — język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 21Strona :

Łagodny s ta r tŁagodny s ta r t

S. Prata, Szkoła programowania. Język C++, 2006, Helion.Może być tą jedyną :) Gorąco polecam!

J. Liberty, C++ dla każdego, Helion, 2002.Jeżeli programowanie to nie Twoja pasja, to to książka dla Ciebie ;)

S.B. Lippman, J. Lajoie, Podstawy języka C++, WNT, 2003.Świetne, ale trzeba już coś o C++ wiedzieć.

P.J. Plauger, Biblioteka standardowa C++, WNT, 1997.Przydatne.

B. Stroustrup, Język C++, WNT, 2002.Dobre lecz trudne.

B. Eckel, Thinking in C++ 2nd Edition, dostępne via Internet:http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Lektura na wiele tygodni.

Page 22: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Zaczynamy — problem do rozwiązaniaZaczynamy — problem do rozwiązaniaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński

Należy napisać program pozwalający na przeliczenie odległości podanej w kilometrach na mile amerykańskie.

22Strona :

Łagodny s ta r tŁagodny s ta r t

Scenariusz działania programu:

Problem

Odległość w milach = 0.625 · odległość w kilometrach

Odległość w kilometrach = 1.6 · odległość w milach

Page 23: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Pierwsza przymiarka — program, który robi nicPierwsza przymiarka — program, który robi nicPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 23Strona :

Łagodny s ta r tŁagodny s ta r t

int main(){ return 0;}

int main(){ return 0;}

Typ rezultatu

Wartość przekazywnaw miejscu wywołania

Instrukcja powrotu z podprogramu

Nazwa funkcji

Parametry

Ciało funkcji

Każdy program C/C++musi posiadać funkcję o nazwie main, stanowiącą tzw. punkt wejściowy programu.

Od niej się rozpoczyna wykonanie programu napisanego w języku C/C++.

Każdy program C/C++musi posiadać funkcję o nazwie main, stanowiącą tzw. punkt wejściowy programu.

Od niej się rozpoczyna wykonanie programu napisanego w języku C/C++.

int (integer) to podstawowy typ całkowitoliczbowyint (integer) to podstawowy typ całkowitoliczbowy

Page 24: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kto wywołuje funkcję main?Kto wywołuje funkcję main?Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 24Strona :

Łagodny s ta r tŁagodny s ta r t

Funkcja main stanowi punkt programu, od którego zaczyna się jego wywołanie.

Upraszczając, można powiedzieć, że funkcja main jest wywoływana przez system operacyjny.

Wartość, będąca rezultatem funkcji main jest przekazywana systemowi operacyjnemu, stanowiąc kod wyjścia programu.

Kod wyjścia programu może być wykorzystywany w skryptach systemu operacyjnego oraz jako środek komunikacji pomiędzy procesami.

Page 25: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Typowy scenariusz uruchomienia programu wykonywalnegoTypowy scenariusz uruchomienia programu wykonywalnegoPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 25Strona :

Łagodny s ta r tŁagodny s ta r t

Użytkownik przekazuje systemowi operacyjnemu zlecenie uruchomienia programu.

System ładuje kod programu do pamięci, przygotowuje jego środowisko, przekazuje sterowanie do bloku kodu startowego programu (tzw. startup).

Kod startowy wykonuje czynności inicjalizujące. Na zakończenie wywołuje funkcje main.

Po zakończeniu działania funkcji main bieżący proces jest kończony i do systemu przekazywany jest kod wyjścia.

Pamięć operacyjna

Systemoperacyjny

kod startowy

call main

kod

prog

ram

u te

st.e

xe

Plik wykonywalnynp. test.exe

main

kod powrotu

resztaprogramu

+dane

Page 26: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wykorzystanie kodu wyjścia w skryptach systemu operacyjnegoWykorzystanie kodu wyjścia w skryptach systemu operacyjnegoPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 26Strona :

Łagodny s ta r tŁagodny s ta r t

@echo offecho Testowanie kodu powrotutest.exeif errorlevel 2 goto dwaif errorlevel 1 goto jedenif errorlevel 0 goto zero: zero echo Kod powrotu 0 goto koniec: jeden echo Kod powrotu 1 goto koniec: dwa echo Kod powrotu 2 goto koniec: koniecpause

@echo offecho Testowanie kodu powrotu 1: petla test.exe if errorlevel 1 goto koniec if errorlevel 0 goto petla: koniececho Koniec programupause

Kod zakończenia programu może być wykorzystywany w skryptach systemu operacyjnego oraz jako środek komunikacji pomiędzy procesami.

Przykładowe skrypty (będący w istocie plikami wsadowymi systemu DOS) testujący kod wyjścia programu test.exe:

Page 27: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wariacje na temat funkcji mainWariacje na temat funkcji mainPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 27Strona :

Łagodny s ta r tŁagodny s ta r t

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

EXIT_SUCCESS — oznacza bezbłędne zakończenie programu.

EXIT_FAILURE —zakończenie z informacją o błędzie.

Stosowanie tych symboli jest zalecane przez standard POSIX. POSIX standaryzuje m.in. interfejs programistyczny, dotyczy głównie systemów klasy UNIX.

Niestety, program zapisany tak:

int main(){ return EXIT_SUCCESS;}

Nie skompiluje się prawidłowo:

`

Dlaczego?

Page 28: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wariacje na temat funkcji mainWariacje na temat funkcji mainPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 28Strona :

Łagodny s ta r tŁagodny s ta r t

Symbole:

EXIT_SUCCESS,

EXIT_FAILURE,

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

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

#include <stdlib.h>

int main(){ return EXIT_SUCCESS;}

Dyrektywa #include powoduje włączenie zawartościpliku stdlib, zawierającego definicje symboli

EXIT_SUCCESS i EXIT_FAILURE

Dyrektywa #include powoduje włączenie zawartościpliku stdlib, zawierającego definicje symboli

EXIT_SUCCESS i EXIT_FAILURE

Page 29: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Do czego służy dyrektywa #include?Do czego służy dyrektywa #include?Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 29Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>

Ta dyrektywa #include powoduje włączenie do kodu źródłowego programu w języku C/C++ definicji i deklaracji niezbędnych dla kompilacji.

Informacje te są przechowywane w tzw. plikach nagłówkowych, są to pliku tekstowe.

Dyrektywa:

Powoduje włączenie do kodu programu zawartości pliku nagłówkowego stdlib.h, zawierającego definicje i deklaracje niezbędne dla wykorzystania elementów standardowej biblioteki języka C.

W tym pliku zdefiniowane są właśnie symbole EXIT_SUCCES oraz EXIT_FAILURE.

Dyrektywa #include realizowana jest przez preprocesor języka C/C++.

Page 30: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kłopot z rozszerzeniami plików nagłówkowychKłopot z rozszerzeniami plików nagłówkowychPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 30Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>

Pliki nagłówkowe w języku C mają rozszerzenie .h.

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

Wielość możliwych rozszerzeń nazw plików w C++ to kłopot.

Aktualnie w programach w języku C++ nie pisze się rozszerzeń nazw plików nagłówkowych.

W programach w języku C++, nazwy plików nagłówkowych z języka C pisze się z prefiksem c.

C , ANSI89C , ANSI89

#include <stdio.h>

Nagłówek standardowej biblioteki

Nagłówek biblioteki wejścia/wyjścia

C++C++

#include <cstdlib>

#include <cstdio>

Nagłówek standardowej biblioteki C

Nagłówek biblioteki wejścia/wyjścia C

Page 31: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wariacje na temat funkcji main, ciąg dalszyWariacje na temat funkcji main, ciąg dalszyPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 31Strona :

Łagodny s ta r tŁagodny s ta r t

Program robiący nic, zapisany w języku C:

#include <stdlib.h>

int main(){ return EXIT_SUCCESS;}

#include <cstdlib>

int main(){ return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

C++C++

Program robiący nic, zapisany w języku C++:

Page 32: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie komunikatów do strumienia wyjściowego programuWyprowadzanie komunikatów do strumienia wyjściowego programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 32Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Dyrektywa #include powoduje włączenie zawartościpliku stdio.h, zawierającego definicje niezbędne

do obsługi standardowego wejścia-wyjścia w języku C

Dyrektywa #include powoduje włączenie zawartościpliku stdio.h, zawierającego definicje niezbędne

do obsługi standardowego wejścia-wyjścia w języku C

Page 33: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie komunikatów do strumienia wyjściowego programuWyprowadzanie komunikatów do strumienia wyjściowego programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 33Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

puts — funkcja z biblioteki standardowej, wyprowadzająca dane do strumienia wyjściowego programu, dołączająca znacznik końca linii.

Napisy (inaczej literały łańcuchowe) są w języku C/C++ ujmowane w znaki cudzysłowa:

”Przeliczanie odleglosci wyrazonej w kilometrach na mile”

Kursor

Page 34: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Co to standardowe strumienie programu?Co to standardowe strumienie programu?Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 34Strona :

Łagodny s ta r tŁagodny s ta r t

Program jakoproces

Pamięć operacyjna

stdoutstderrstdin

Strumienie stdin, stdout reprezentują normalny kanał komunikacji programu z użytkownikiem.

Strumienie stdin, stdout reprezentują normalny kanał komunikacji programu z użytkownikiem.

Strumień stderr zarezerwowany jest do wyświetlania komunikatów diagnostycznych programu.

Strumień stderr zarezerwowany jest do wyświetlania komunikatów diagnostycznych programu.

stdin — standardowy strumień wejściowy programu, jest zwykle skojarzonyz klawiaturą;

stdout — standardowy strumień wyjściowy programu, jest zwykle skojarzonyz ekranem monitora;

stderr — standardowy strumień wyjściowy błędów programu, jest zwykle skojarzony również z ekranem monitora.

Page 35: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Redyrekcja (przekierowanie) strumieni programuRedyrekcja (przekierowanie) strumieni programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 35Strona :

Łagodny s ta r tŁagodny s ta r t

C:\>test.exe > wyjscie.txtC:\>test.exe < wejscie.txtC:\>test.exe < wejscie.txt > wyjscie.txt

Program jakoproces

Pamięć operacyjna

stdoutstderrstdin

Standardowe skojarzenie strumieni.Standardowe skojarzenie strumieni.

Redyrekcja (przekierowanie) strumieni z poziomu systemu operacyjnego:

Page 36: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Strumienie programu w języku C++Strumienie programu w języku C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 36Strona :

Łagodny s ta r tŁagodny s ta r t

cin — strumień reprezentujący standardowe wejście programu, odpowiada strumieniowi stdin z C. Strumień cin odczytuje dane i zapisuje je do odpowiednich zmiennych.

cout — strumień reprezentujący standardowe wyjście programu. Odpowiada strumieniowi stdout z C.

cerr — niebuforowany strumień wyjściowy błędów. Odpowiada strumieniowi stderr z C.

clog — buforowany strumień wyjściowy błędów. Odpowiada strumieniowi stderr z C.

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

Starsze kompilatory — przed standaryzacją odwołań doplików nagłówkowych

Aktualny standard

#include <iostream.h> #include <iostream>using namespace std;

Page 37: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie komunikatów do strumienia wyjściowego programuWyprowadzanie komunikatów do strumienia wyjściowego programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 37Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>

using namespace std;

int main(){ cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; return EXIT_SUCCESS;}

C++C++

Dyrektywa #include powoduje włączenie zawartościpliku iostream, zawierającego definicje niezbędne

do obsługi standardowego wejścia-wyjścia w języku C++

Dyrektywa #include powoduje włączenie zawartościpliku iostream, zawierającego definicje niezbędne

do obsługi standardowego wejścia-wyjścia w języku C++

Page 38: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie komunikatów do strumienia wyjściowego programuWyprowadzanie komunikatów do strumienia wyjściowego programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 38Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>

using namespace std;

int main(){ cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; return EXIT_SUCCESS;}

C++C++

W języku C++ wprowadzono przestrzenie nazw. Pozwalająone na powtarzanie tych samych nazw w różnych przestrzeniach.

Ta linia programu mówi, że będziemy korzystali ze standardowej przestrzeni nazw.

W języku C++ wprowadzono przestrzenie nazw. Pozwalająone na powtarzanie tych samych nazw w różnych przestrzeniach.

Ta linia programu mówi, że będziemy korzystali ze standardowej przestrzeni nazw.

Page 39: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie komunikatów do strumienia wyjściowego programuWyprowadzanie komunikatów do strumienia wyjściowego programuPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 39Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>

using namespace std;

int main(){ cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; return EXIT_SUCCESS;}

C++C++

cout — obiekt reprezentujący standardowy strumień wyjściowy programu.

Wyprowadzanie danych odbywa się z wykorzystaniem operatora <<, zwanego wstawiaczem (ang. inserter). Dane są wyprowadzane zgodnie z ich typem, istnieje możliwość formatowania postaci wyjściowej.

Manipulator endl powodują opróżnienie bufora strumienia cout, wstawia znak nowej linii przed opróżnieniem bufora.

Page 40: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyświetlenie komunikatu powitalnego — wersja w języku C vs. C++Wyświetlenie komunikatu powitalnego — wersja w języku C vs. C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 40Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

#include <cstdlib>#include <iostream>

using namespace std;

int main(){ cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; return EXIT_SUCCESS;}

C++C++

Page 41: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wprowadzamy zmienne — deklaracje zmiennych w języku CWprowadzamy zmienne — deklaracje zmiennych w języku CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 41Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik ;

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

float to typ zmiennopozycyjny, służący do reprezentowania liczb rzeczywistych pojedynczej precyzji.

double to typ zmiennopozycyjny, służący do reprezentowania liczb rzeczywistych podwójnej precyzji precyzji.

int to typ całkowitoliczbowy, służący do reprezentowania liczb całkowitych ze znakiem, o zakresie zależnym od implementacji.

Zmienne w C mogą być deklarowane na początku każdego bloku określonego nawiasami { }.

Zmienne w C mogą być deklarowane na początku każdego bloku określonego nawiasami { }.

Page 42: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wprowadzamy zmienne — deklaracje zmiennych w języku C++Wprowadzamy zmienne — deklaracje zmiennych w języku C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 42Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry, wynik ; cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; return EXIT_SUCCESS;}

C++C++

#include <cstdlib>#include <iostream>using namespace std;

int main(){ cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl;

float kilometry, wynik ;

return EXIT_SUCCESS;}

C++C++

Zmienne w C++ mogą być deklarowane w dowolnym miejscu,

dozwolonym syntaktyką języka.

Zmienne w C++ mogą być deklarowane w dowolnym miejscu,

dozwolonym syntaktyką języka.

Page 43: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Zapytaj o odległości w kilometrach, funkcja printf — język CZapytaj o odległości w kilometrach, funkcja printf — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 43Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik;

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " );

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Funkcja printf wyprowadzane sformatowane dane do stdout.Funkcja printf wyprowadzane sformatowane dane do stdout.

Page 44: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Zapytaj o odległości w kilometrach — język C++Zapytaj o odległości w kilometrach — język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 44Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry, wynik;

cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; cout << "Podaj odleglosc w kilometrach: " << flush; return EXIT_SUCCESS;}

Wyprowadzenie napisu do strumienia wyjściowegoWyprowadzenie napisu do strumienia wyjściowego

C++C++

Manipulator flush powoduje opróżnienie bufora strumienia cout.

Manipulator flush powoduje opróżnienie bufora strumienia cout.

Page 45: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, funkcja gets — język CWczytanie odległości w kilometrach, funkcja gets — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 45Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik; char tekst[ 20 ];

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " ); gets( tekst ); kilometry = atof( tekst );

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Przyjrzyjmy się temu bliżej...

Bufor dla wczytywanego napisuBufor dla wczytywanego napisu

Wczytanie napisu do buforaWczytanie napisu do bufora

Konwersja do liczby rzeczywistejKonwersja do liczby rzeczywistej

Page 46: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, funkcja gets — język CWczytanie odległości w kilometrach, funkcja gets — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 46Strona :

Łagodny s ta r tŁagodny s ta r t

tekst

kilometry

Pamięć operacyjna

gets( tekst )

kilometry = atof( tekst )

5 01234

191817

OO\O

500 + znak Enter

500.0

Funkcja wczytuje łańcuch znaków ze strumienia wejściowego programu i zapisuje go w tablicy będącej parametrem wywołania. Na końcu łańcucha zapisywany jest znacznik końca napisu -- znak '. '\0

Funkcja przekształca napis zawarty w tablicy będącej parametrem wywołania na odpowiadającą mu liczbę rzeczywistą.

atof

Page 47: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, przepełnienie bufora — język CWczytanie odległości w kilometrach, przepełnienie bufora — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 47Strona :

Łagodny s ta r tŁagodny s ta r t

tekst

kilometry

Pamięć operacyjna

gets( tekst ) 01234

191817

Tojestnapis...

To jest napis zbyt długi aby się zmieścić w 20-sto znakowym buforze + znak Enter

Nadmiarowe znaki wczytanego napisu niszczą zawartość komórek pamięci operacyjnej obok zmiennej linia.

Page 48: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, funkcja fgets — język CWczytanie odległości w kilometrach, funkcja fgets — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 48Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik; char tekst[ 20 ];

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " ); fgets( tekst, 20, stdin ); kilometry = atof( tekst );

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Wczytanie napisu z ochrona przed przepełnieniem buforaWczytanie napisu z ochrona przed przepełnieniem bufora

Page 49: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, funkcja fgets — język CWczytanie odległości w kilometrach, funkcja fgets — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 49Strona :

Łagodny s ta r tŁagodny s ta r t

Funkcja fgets :

Pierwszy parametr określa bufor, do którego mają być zapisane wczytywane dane.

Drugi parametr określa N ― maksymalną pojemność bufora, uwzględniającą miejsce na znacznik końca napisu.

Trzeci parametr określa strumień (plik), z którego funkcja ma odczytywać dane, może to być również standardowy strumień wejściowy ― stdin.

Działanie funkcji kończy się gdy funkcja odczyta N – 1 znaków lub wcześniej zostanie odczytany znak nowego wiersza (Enter).

Znacznik końca napisu dopisywany jest na jego końcu.

Page 50: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wczytanie odległości w kilometrach, obiekt cin — język C++Wczytanie odległości w kilometrach, obiekt cin — język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 50Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry, wynik;

cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; cout << "Podaj odleglosc w kilometrach: "; cin >> kilometry;

return EXIT_SUCCESS;}

C++C++

cin — globalny obiekt cin umożliwia wczytywanie danych z wykorzystaniem operatora >> zwanego wydobywaczem (ang. extractor), który przeprowadza konieczne konwersje w trakcie pobierania danych.

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

Odczytanie i konwersja do postaci liczbyOdczytanie i konwersja do postaci liczby

Page 51: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Obliczenia, wyprowadzenie wyników — język CObliczenia, wyprowadzenie wyników — język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 51Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik; char tekst[ 20 ];

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " ); fgets( tekst, 20, stdin ); kilometry = atof( tekst ); wynik = kilometry * 0.625;

printf( "To w milach: %f", wynik );

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Wyrażenia wykorzystujące operator przypisania =Wyrażenia wykorzystujące operator przypisania =

Wyprowadzanie zawartości zmiennej do stdoutWyprowadzanie zawartości zmiennej do stdout

Przyjrzyjmy się bliżej funkcji printf...

Page 52: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Funkcja printf — wyprowadzanie danych w sposób sformatowanyFunkcja printf — wyprowadzanie danych w sposób sformatowanyPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 52Strona :

Łagodny s ta r tŁagodny s ta r t

printf( "To w milach: %f", wynik );

Funkcja printf wyprowadzane sformatowane dane do stdout.

Pierwszy parametr funkcji, będący łańcuchem znaków, może zawierać specyfikacje przekształceń, rozpoczynające się znakiem %.

W miejsce specyfikatorów przekształceń wstawiane są wartości kolejnych parametrów wywołania funkcji printf, sformatowane zgodnie z określonym formatem.

Page 53: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Funkcja printf — wyprowadzanie danych w sposób sformatowanyFunkcja printf — wyprowadzanie danych w sposób sformatowanyPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 53Strona :

Łagodny s ta r tŁagodny s ta r t

Sekwencje rozpoczynające się od znaku % stanowią specyfikacje przekształceń kolejnych parametrów funkcji printf:

%d — wyprowadza liczbę całkowitą dziesiętną,

%f — wyprowadza liczbę rzeczywistą,

%c — wyprowadza znak,

%s — wyprowadza napis.

Możliwości formatowania funkcji są bardzo szerokie, omówione zostaną osobno.

printf( "%s ma %d lat%c", "Ala", 18, '!' );

Page 54: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Funkcja printf — kilka przykładów formatowaniaFunkcja printf — kilka przykładów formatowaniaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 54Strona :

Łagodny s ta r tŁagodny s ta r t

printf( "To w milach: %10.2f", wynik );

printf( "To w milach: %-10.2f", wynik );

printf( "To w milach: %0.2f", wynik );

Page 55: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Funkcja printf — kilka przykładów formatowaniaFunkcja printf — kilka przykładów formatowaniaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 55Strona :

Łagodny s ta r tŁagodny s ta r t

printf( "%g km to w %g mil", kilometry, wynik );

%f — wyprowadza liczbę rzeczywistą,

%g — wyprowadza liczbę rzeczywistą w najkrótszej postaci.

Page 56: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Niech użytkownik ma szansę zobaczyć wynikiNiech użytkownik ma szansę zobaczyć wynikiPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 56Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry, wynik; char tekst[ 20 ];

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " ); fgets( tekst, 20, stdin ); kilometry = atof( tekst ); wynik = kilometry * 0.625;

printf( "To w milach: %g\nNacisnij Enter by zakonczyc program...", wynik );

getchar();

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Wywołanie funkcji getchar, wczytującej pojedynczy znak, skutkuje zatrzymaniem programu (czekanie na naciśnięcie klawisza Enter)

Wywołanie funkcji getchar, wczytującej pojedynczy znak, skutkuje zatrzymaniem programu (czekanie na naciśnięcie klawisza Enter)

W tym miejscu zostanie złamana linia. Znak \n spowodujeprzejście kursora do początku następnego wiersza

w strumieniu wyjściowym.

W tym miejscu zostanie złamana linia. Znak \n spowodujeprzejście kursora do początku następnego wiersza

w strumieniu wyjściowym.

Page 57: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wybrane znaki sterująceWybrane znaki sterującePodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 57Strona :

Łagodny s ta r tŁagodny s ta r t

Znak sterujący Symbol Znaczenie

\a BELL Sygnał dźwiękowy

\b BS (backspace) Spacja wsteczna

\n LF (newline, linefeed) Nowa linia

\r CR (Carriage return) Powrót „karetki”

\t TAB Tabulacja

Page 58: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Zmienna wynik jest właściwie zbędna...Zmienna wynik jest właściwie zbędna...Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 58Strona :

Łagodny s ta r tŁagodny s ta r t

. . .fgets( tekst, 20, stdin );kilometry = atof( tekst ); printf( "To w milach: %g\nNacisnij Enter by zakonczyc program...", kilometry * 0.625 );

getchar();. . .

. . .fgets( tekst, 20, stdin );kilometry = atof( tekst ); wynik = kilometry * 0.625;

printf( "To w milach: %g\nNacisnij Enter by zakonczyc program...", wynik );

getchar();. . .

C , ANSI89C , ANSI89

C , ANSI89C , ANSI89

Page 59: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Obliczenia, wyprowadzenie wyników — język C++Obliczenia, wyprowadzenie wyników — język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 59Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry, wynik;

cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; cout << "Podaj odleglosc w kilometrach: " << flush; cin >> kilometry;

wynik = kilometry * 0.625;

cout << "To w milach: "; cout << wynik;

return EXIT_SUCCESS;}

C++C++

Wyznacz wartośćWyznacz wartość

Wyprowadź wynikiWyprowadź wyniki

Page 60: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

cin to obiekt posiadający wbudowane funkcje składowecin to obiekt posiadający wbudowane funkcje składowePodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 60Strona :

Łagodny s ta r tŁagodny s ta r t

cin . ignore() ;

cin . get() ;

Nazwa obiektu (zmiennej obiektowej)

Nazwa obiektu (zmiennej obiektowej)

Odwołanie do funkcji składowej

Odwołanie do funkcji składowej

Selektor wyboru składowej obiektuSelektor wyboru

składowej obiektu

Page 61: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Niech użytkownik ma szansę zobaczyć wynikiNiech użytkownik ma szansę zobaczyć wynikiPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 61Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry, wynik;

cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; cout << "Podaj odleglosc w kilometrach: " << flush; cin >> kilometry;

wynik = kilometry * 0.625;

cout << "To w milach: "; cout << wynik;

cout << endl << "Nacisnij Enter by zakonczyc program..."; cin.ignore(); cin.get();

return EXIT_SUCCESS;}

C++C++

cin.ignore() pomija znak Enter pozostały w buforze po wprowadzeniu liczby kilometrów.

cin.get() pobiera znak ze strumienia wejściowego.

cin.ignore() pomija znak Enter pozostały w buforze po wprowadzeniu liczby kilometrów.

cin.get() pobiera znak ze strumienia wejściowego.

Page 62: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Zmienna wynik jest właściwie zbędna...Zmienna wynik jest właściwie zbędna...Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 62Strona :

Łagodny s ta r tŁagodny s ta r t

. . . cin >> kilometry;

cout << "To w milach: "; cout << kilometry * 0.625;

cout << endl << "Nacisnij Enter by zakonczyc program..." << endl; cin.ignore(); cin.get(); . . .

. . . cin >> kilometry;

wynik = kilometry * 0.625;

cout << "To w milach: "; cout << wynik;

cout << endl << "Nacisnij Enter by zakonczyc program..." << endl; cin.ignore(); cin.get(); . . .

C++C++

C++C++

Page 63: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Wyprowadzanie danych do cout można uprościćWyprowadzanie danych do cout można uprościćPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 63Strona :

Łagodny s ta r tŁagodny s ta r t

cout << "To w milach: " cout << kilometry * 0.625;

cout << "To w milach: " << kilometry * 0.625;

cout << "Odleglosc " << kilometry << " km to w milach " << kilometry * 0.625 << endl;

Inna możliwość sformatowania wyświetlenia wyników:

Page 64: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kilometry na mile — podsumowanie, język CKilometry na mile — podsumowanie, język CPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 64Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

int main(){ float kilometry; char tekst[ 20 ];

puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); printf( "Podaj odleglosc w kilometrach: " ); fgets( tekst, 20, stdin ); kilometry = atof( tekst ); printf( "To w milach: %g\nNacisnij Enter by zakonczyc program...", kilometry * 0.625 );

getchar();

return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Page 65: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kilometry na mile — podsumowanie, język C++Kilometry na mile — podsumowanie, język C++Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 65Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float kilometry;

cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl; cout << "Podaj odleglosc w kilometrach: " << flush; cin >> kilometry;

cout << "To w milach: " << kilometry * 0.625;

cout << endl << "Nacisnij Enter by zakonczyc program..."; cin.ignore(); cin.get();

return EXIT_SUCCESS;}

C++C++

Page 66: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kolejny problem do rozwiązaniaKolejny problem do rozwiązaniaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 66Strona :

Łagodny s ta r tŁagodny s ta r t

Zadaniem programu jest obliczanie, ile średnio litrów paliwa zużywa pojazd na trasie 100 km.

Scenariusz działania programu:

Problem

Page 67: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kolejny problem do rozwiązania — analizaKolejny problem do rozwiązania — analizaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 67Strona :

Łagodny s ta r tŁagodny s ta r t

Średnie spalanie wyznaczamy z proporcji:

przejechany dystans [km] — ilość paliwa [litry]

100 [km] — x [litry] spalanie = ( 100 * ilość paliwa ) / przejechany dystans

Do obliczenia średniego zużycia potrzebne są dwie wartości liczbowe, jak wyżej. Powinny to być liczby rzeczywiste.

Program powinien zapytać użytkownika o te wartości, zapamiętać je, dokonać obliczeń oraz wyświetlić wynik.

Program powinien reagować na niepoprawne dane wejściowe.

Page 68: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja pierwszaRozwiązanie w C — wersja pierwszaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 68Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ char linia[ MAKS_DL ]; float dystans, paliwo;

printf( "\nObliczam ile Twoj pojazd spala paliwa na 100 km\n" );

printf( "Dystans: " ); fgets( linia, MAKS_DL, stdin ); dystans = atof( linia ); printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Dyrektywa #define wprowadza stałą symboliczną MAKS_DL.Przed kompilacją stała ta zastępowana jest wartością 20. Uwaga, na końcu definicji stałej nie występuje średnik!

Dyrektywa #define wprowadza stałą symboliczną MAKS_DL.Przed kompilacją stała ta zastępowana jest wartością 20. Uwaga, na końcu definicji stałej nie występuje średnik!

Page 69: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja pierwszaRozwiązanie w C — wersja pierwszaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 69Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ char linia[ MAKS_DL ]; float dystans, paliwo;

printf( "\nObliczam ile Twoj pojazd spala paliwa na 100 km\n" );

printf( "Dystans: " ); fgets( linia, MAKS_DL, stdin ); dystans = atof( linia ); printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Deklaracje zmiennych — bufor dla wczytywania liczboraz zmienne dla przechowania dystansu i ilości paliwa.

Deklaracje zmiennych — bufor dla wczytywania liczboraz zmienne dla przechowania dystansu i ilości paliwa.

Page 70: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja pierwszaRozwiązanie w C — wersja pierwszaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 70Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ char linia[ MAKS_DL ]; float dystans, paliwo;

printf( "\nObliczam ile Twoj pojazd spala paliwa na 100 km\n" );

printf( "Dystans: " ); fgets( linia, MAKS_DL, stdin ); dystans = atof( linia ); printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Wczytanie dystansuWczytanie dystansu

Page 71: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja pierwszaRozwiązanie w C — wersja pierwszaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 71Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ char linia[ MAKS_DL ]; float dystans, paliwo;

printf( "\nObliczam ile Twoj pojazd spala paliwa na 100 km\n" );

printf( "Dystans: " ); fgets( linia, MAKS_DL, stdin ); dystans = atof( linia ); printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Wczytanie ilości paliwaWczytanie ilości paliwa

Page 72: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja pierwszaRozwiązanie w C — wersja pierwszaPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 72Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ char linia[ MAKS_DL ]; float dystans, paliwo;

printf( "\nObliczam ile Twoj pojazd spala paliwa na 100 km\n" );

printf( "Dystans: " ); fgets( linia, MAKS_DL, stdin ); dystans = atof( linia ); printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Obliczenie i wyprowadzenieśredniego spalania

Obliczenie i wyprowadzenieśredniego spalania

Page 73: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C — wersja druga, kontrola dzielenia przez zeroRozwiązanie w C — wersja druga, kontrola dzielenia przez zeroPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 73Strona :

Łagodny s ta r tŁagodny s ta r t

#include <stdlib.h>#include <stdio.h>

#define MAKS_DL 20

int main(){ . . . printf( "Paliwo: " ); fgets( linia, MAKS_DL, stdin ); paliwo = atof( linia );

if( dystans != 0 ) printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans ); else printf( "Nie dokonam obliczen dla zerowego dystansu." );

printf( "\nNacisnij Enter by zakonczyc program..." ); getchar(); return EXIT_SUCCESS;}

C , ANSI89C , ANSI89

Instrukcja alternatywyInstrukcja alternatywy

Operator != oznacza różne, nierówneOperator != oznacza różne, nierówne

Page 74: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Instrukcje warunkoweInstrukcje warunkowePodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 74Strona :

Łagodny s ta r tŁagodny s ta r t

if( W ) I

if( W ) I1else I2

Instrukcja warunkowa Instrukcja alternatywy

W językach C/C++ każde wyrażenie o wartości numerycznej 0 jest traktowane jako fałszywe, każde wyrażenie o wartości różnej od zera jako prawdziwe.

W językach C/C++ każde wyrażenie o wartości numerycznej 0 jest traktowane jako fałszywe, każde wyrażenie o wartości różnej od zera jako prawdziwe.

II

WWtak

nie I1I1

WWtaknie

I2I2

Page 75: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Kontrola dzielenia przez zeroKontrola dzielenia przez zeroPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 75Strona :

Łagodny s ta r tŁagodny s ta r t

...

if( dystans != 0 ) printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans );

...

...

if( dystans != 0 ) printf( "Spalanie %4.2f l na 100 km", ( paliwo * 100 ) / dystans ) ;else printf( "Nie dokonam obliczen dla zerowego dystansu." );

...

Instrukcja warunkowa

Instrukcja alternatywy

ŚrednikŚrednik

W językach C/C++ średnik kończy instrukcję przed nim zapisaną.W językach C/C++ średnik kończy instrukcję przed nim zapisaną.

Page 76: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Rozwiązanie w C++ — wersja z kontrolą dzielenia przez zeroRozwiązanie w C++ — wersja z kontrolą dzielenia przez zeroPodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 76Strona :

Łagodny s ta r tŁagodny s ta r t

#include <cstdlib>#include <iostream>using namespace std;

int main(){ float dystans, paliwo;

cout << endl << "Obliczam ile Twoj pojazd spala paliwa na 100 km" << endl;

cout << "Dystans: " << flush; cin >> dystans; cout << "Paliwo: " << flush; cin >> paliwo;

if( dystans != 0 ) cout << "Spalanie " << (paliwo*100) / dystans << " l na 100 km" << endl; else cout << "Nie dokonam obliczen dla zerowego dystansu." << endl; cout << "Nacisnij Enter by zakonczyc program..." << endl; cin.ignore(); cin.get();

return EXIT_SUCCESS;}

C ++C ++

Page 77: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

PodsumowaniePodsumowaniePodstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 77Strona :

Łagodny s ta r tŁagodny s ta r t

Każdy program w języku C/C++ musi posiadać funkcję main. Od niej rozpoczyna się wykonanie programu.

Funkcja main według standardu ANSI C powinna „zwracać” wartość całkowitą, stanowiącą kod zakończenia programu przekazywany systemowi operacyjnemu lub procesowi — rodzicowi.

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

Zakończenie wykonania funkcji następuje wraz z osiągnięciem klamry zamykającej ciało funkcji lub po napotkaniu instrukcji powrotu z podprogramu — instrukcji return. Wartość umieszczona po tej instrukcji stanowi rezultat funkcji.

Instrukcja return może wystąpić w ciele funkcji wielokrotnie, w miejscach dozwolonych syntaktyką języka.

W języku C zmienne wewnątrz funkcji wolno deklarować na początku każdego bloku. Na etapie deklaracji zmienne mogą być inicjowane.

Page 78: Podstawy programowania w języku C i C++prac.us.edu.pl/~siminski/c_cxx/c_cxx_w01.pdf · w języku C i C++ Łagodny start Część pierwsza Niniejsze opracowanie zawiera skrót treści

Podsumowanie, cd...Podsumowanie, cd...Podstawy programowania w C++Podstawy programowania w C++

Copyright © Roman Simiński 78Strona :

Łagodny s ta r tŁagodny s ta r t

W języku C++ zmienne wewnątrz funkcji wolno deklarować w dowolnym sensowym miejscu. Na etapie deklaracji zmienne mogą być inicjowane.

W języku C/C++ nie ma funkcji standardowych. Wszystkie funkcje pochodząz bibliotek lub są napisane przez programistę.

Aby kompilator mógł sprawdzić poprawność wywołania funkcji bibliotecznych wykorzystuje się pliki nagłówkowe. Zawierają one informacje o typie rezultatu funkcji, parametrach i są włączane do kodu źródłowego programu dyrektywą #include.

W języku C wywołanie funkcji bez włączenia odpowiedniego pliku nagłówkowego nie spowoduje błędu kompilacji (ang. error) a jedynie ostrzeżenie (ang. warning). W języku C++ wywołanie funkcji bez włączenia odpowiedniego pliku nagłówkowego spowoduje powstanie błędu kompilacji (ang. error).

W instrukcji if-else, przed słowem kluczowym else występuje średnik. W języku C/C++ średnik nie rozdziela instrukcji, a kończy je.