Podstawy programowania
Podstawy programowania
w j
w języku C i C++
ęzyku C i C++
Łagodny start
Część pierwsza Roman Simiński roman.siminski@us.edu.pl www.us.edu.pl/~siminski Autor KontaktJak powstał język C, ludzie
Jak powstał język C, ludzie
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ą,
Kenneth Thompson
Jak powstał język C, ludzie
Jak powstał język C, ludzie
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
Jak powstał język C, ludzie
Jak powstał język C, ludzie
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,
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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.
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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.
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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.
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
Denis Ritchie i Ken Thompson przenoszą system Unix na z PDP-7 na PDP-11 za pośrednictwem terminalu telegraficznego.
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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).
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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ścia i wyjścia.
W 1978 roku Dennis Ritchie i Brian Kernighan publikują książkę Język
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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.
Jak powstał język C, kalendarium
Jak powstał język C, kalendarium
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.
Rozwój C a inne języki programowania
Rozwój C a inne języki programowania
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.
Jak powstał język C++
Jak powstał język C++
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++).
Jak powstał język C++, kalendarium
Jak powstał język C++, kalendarium
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
Jak powstał język C++, kalendarium
Jak powstał język C++, kalendarium
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.
Jak powstał język C++, kalendarium
Jak powstał język C++, kalendarium
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 1995-1998
Jak powstał język C++, kalendarium
Jak powstał język C++, kalendarium
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.
Literatura — język C
Literatura — język C
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!
Literatura — język C++
Literatura — język C++
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
Zaczynamy — problem do rozwiązania
Zaczynamy — problem do rozwiązania
Należy napisać program pozwalający na przeliczenie odległości podanej w kilometrach na mile amerykańskie.
Scenariusz działania programu: Problem
Odległość w milach = 0.625 · odległość w kilometrach
Pierwsza przymiarka — program, który robi nic
Pierwsza przymiarka — program, który robi nic
int main() { return 0; } int main() { return 0; } Typ rezultatu Wartość przekazywna w 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łkowitoliczbowy
Kto wywołuje funkcję main?
Kto wywołuje funkcję main?
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
Typowy scenariusz uruchomienia programu wykonywalnego
Typowy scenariusz uruchomienia programu wykonywalnego
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 System operacyjny kod startowy call main ko d pr og ra m u te st .e xe Plik wykonywalny main kod powrotu reszta programu + dane
Wykorzystanie kodu wyjścia w skryptach systemu operacyjnego
Wykorzystanie kodu wyjścia w skryptach systemu operacyjnego
@echo off
echo Testowanie kodu powrotu
test.exe
if errorlevel 2 goto dwa if errorlevel 1 goto jeden if 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
: koniec
@echo off
echo Testowanie kodu powrotu 1 : petla
test.exe
if errorlevel 1 goto koniec if errorlevel 0 goto petla : koniec
echo Koniec programu pause
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:
Wariacje na temat funkcji main
Wariacje na temat funkcji main
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:
`
Wariacje na temat funkcji main
Wariacje na temat funkcji main
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ści pliku stdlib, zawierającego definicje symboli
Dyrektywa #include powoduje włączenie zawartości pliku stdlib, zawierającego definicje symboli
Do czego służy dyrektywa #include?
Do czego służy dyrektywa #include?
#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.
Kłopot z rozszerzeniami plików nagłówkowych
Kłopot z rozszerzeniami plików nagłówkowych
#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 , ANSI89 C , ANSI89
Nagłówek standardowej biblioteki Nagłówek biblioteki wejścia/wyjścia
C++ C++
#include <cstdlib>
Nagłówek standardowej biblioteki C Nagłówek biblioteki wejścia/wyjścia C
Wariacje na temat funkcji main, ciąg dalszy
Wariacje na temat funkcji main, ciąg dalszy
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 , ANSI89 C , ANSI89 C++ C++ Program robiący nic, zapisany w języku C++:
Wyprowadzanie komunikatów do strumienia wyjściowego programu
Wyprowadzanie komunikatów do strumienia wyjściowego programu
#include <stdlib.h>
#include <stdio.h>
int main() {
puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" );
return EXIT_SUCCESS; }
C , ANSI89 C , ANSI89
Dyrektywa #include powoduje włączenie zawartości pliku 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ści pliku stdio.h, zawierającego definicje niezbędne do obsługi standardowego wejścia-wyjścia w języku C
Wyprowadzanie komunikatów do strumienia wyjściowego programu
Wyprowadzanie komunikatów do strumienia wyjściowego programu
#include <stdlib.h> #include <stdio.h> int main()
{
puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" );
return EXIT_SUCCESS; }
C , ANSI89 C , 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”
Co to standardowe strumienie programu?
Co to standardowe strumienie programu?
Program jako proces Pamięć operacyjna stdout stderr stdin
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 skojarzony
z klawiaturą;
stdout — standardowy strumień wyjściowy programu, jest zwykle skojarzony
z ekranem monitora;
stderr — standardowy strumień wyjściowy błędów programu, jest zwykle
Redyrekcja (przekierowanie) strumieni programu
Redyrekcja (przekierowanie) strumieni programu
C:\>test.exe > wyjscie.txt
C:\>test.exe < wejscie.txt
C:\>test.exe < wejscie.txt > wyjscie.txt
Program jako proces Pamięć operacyjna stdout stderr stdin Standardowe skojarzenie strumieni. Standardowe skojarzenie strumieni.
Strumienie programu w języku C++
Strumienie programu w języku C++
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ń do
plików nagłówkowych Aktualny standard
Wyprowadzanie komunikatów do strumienia wyjściowego programu
Wyprowadzanie komunikatów do strumienia wyjściowego programu
#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ści pliku iostream, zawierającego definicje niezbędne do obsługi standardowego wejścia-wyjścia w języku C++
Dyrektywa #include powoduje włączenie zawartości pliku iostream, zawierającego definicje niezbędne do obsługi standardowego wejścia-wyjścia w języku C++
Wyprowadzanie komunikatów do strumienia wyjściowego programu
Wyprowadzanie komunikatów do strumienia wyjściowego programu
#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.
Wyprowadzanie komunikatów do strumienia wyjściowego programu
Wyprowadzanie komunikatów do strumienia wyjściowego programu
#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
Wyświetlenie komunikatu powitalnego — wersja w języku C vs. C++
Wyświetlenie komunikatu powitalnego — wersja w języku C vs. C++
#include <stdlib.h> #include <stdio.h> int main()
{
puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" ); return EXIT_SUCCESS; } C , ANSI89 C , ANSI89 #include <cstdlib> #include <iostream> using namespace std; int main() {
cout << "Przeliczanie odleglosci wyrazonej w kilometrach na mile" << endl;
return EXIT_SUCCESS;
C++ C++
Wprowadzamy zmienne — deklaracje zmiennych w języku C
Wprowadzamy zmienne — deklaracje zmiennych w języku C
#include <stdlib.h> #include <stdio.h> int main()
{
float kilometry, wynik ;
puts( "Przeliczanie odleglosci wyrazonej w kilometrach na mile" );
return EXIT_SUCCESS; }
C , ANSI89 C , 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 { }.
Wprowadzamy zmienne — deklaracje zmiennych w języku C++
Wprowadzamy zmienne — deklaracje zmiennych w języku C++
#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 ;
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.
Zapytaj o odległości w kilometrach, funkcja printf — język C
Zapytaj o odległości w kilometrach, funkcja printf — język C
#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 , ANSI89 C , ANSI89
Funkcja printf wyprowadzane sformatowane dane do stdout.
Zapytaj o odległości w kilometrach — język C++
Zapytaj o odległości w kilometrach — język C++
#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ściowego
Wyprowadzenie napisu do strumienia wyjściowego C++ C++
Manipulator flush powoduje opróżnienie bufora strumienia cout.
Manipulator flush powoduje opróżnienie bufora strumienia cout.
Wczytanie odległości w kilometrach, funkcja gets — język C
Wczytanie odległości w kilometrach, funkcja gets — język C
#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 , ANSI89 C , ANSI89
Przyjrzyjmy się temu bliżej...
Bufor dla wczytywanego napisu
Bufor dla wczytywanego napisu
Wczytanie napisu do bufora
Wczytanie napisu do bufora
Konwersja do liczby rzeczywistej
Wczytanie odległości w kilometrach, funkcja gets — język C
Wczytanie odległości w kilometrach, funkcja gets — język C
tekst
kilometry
Pamięć operacyjna
gets( tekst )
kilometry = atof( tekst )
5 0 1 2 3 4 19 18 17 O O \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ą.
Wczytanie odległości w kilometrach, przepełnienie bufora — język C
Wczytanie odległości w kilometrach, przepełnienie bufora — język C
tekst kilometry Pamięć operacyjna gets( tekst ) 0 1 2 3 4 19 18 17 T o j e s t n a p i s . . .
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.
Wczytanie odległości w kilometrach, funkcja fgets — język C
Wczytanie odległości w kilometrach, funkcja fgets — język C
#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 , ANSI89 C , ANSI89
Wczytanie napisu z ochrona przed przepełnieniem bufora
Wczytanie odległości w kilometrach, funkcja fgets — język C
Wczytanie odległości w kilometrach, funkcja fgets — język C
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).
Wczytanie odległości w kilometrach, obiekt cin — język C++
Wczytanie odległości w kilometrach, obiekt cin — język C++
#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 liczby
Obliczenia, wyprowadzenie wyników — język C
Obliczenia, wyprowadzenie wyników — język C
#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 , ANSI89 C , ANSI89
Wyrażenia wykorzystujące operator przypisania =
Wyrażenia wykorzystujące operator przypisania =
Wyprowadzanie zawartości zmiennej do stdout
Wyprowadzanie zawartości zmiennej do stdout Przyjrzyjmy się bliżej funkcji printf...
Funkcja printf — wyprowadzanie danych w sposób sformatowany
Funkcja printf — wyprowadzanie danych w sposób sformatowany
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.
Funkcja printf — wyprowadzanie danych w sposób sformatowany
Funkcja printf — wyprowadzanie danych w sposób sformatowany
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.
Funkcja printf — kilka przykładów formatowania
Funkcja printf — kilka przykładów formatowania
printf( "To w milach: %10.2f", wynik );
printf( "To w milach: %-10.2f", wynik );
Funkcja printf — kilka przykładów formatowania
Funkcja printf — kilka przykładów formatowania
printf( "%g km to w %g mil", kilometry, wynik );
%f — wyprowadza liczbę rzeczywistą,
Niech użytkownik ma szansę zobaczyć wyniki
Niech użytkownik ma szansę zobaczyć wyniki
#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 , ANSI89 C , ANSI89
Wywołanie funkcji getchar, wczytującej pojedynczy znak, skutkuje
Wywołanie funkcji getchar, wczytującej pojedynczy znak, skutkuje
W tym miejscu zostanie złamana linia. Znak \n spowoduje przejście kursora do początku następnego wiersza
w strumieniu wyjściowym.
W tym miejscu zostanie złamana linia. Znak \n spowoduje przejście kursora do początku następnego wiersza
Wybrane znaki sterujące
Wybrane znaki sterujące
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”
Zmienna wynik jest właściwie zbędna...
Zmienna wynik jest właściwie zbędna...
. . .
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 , ANSI89 C , ANSI89 C , ANSI89 C , ANSI89
Obliczenia, wyprowadzenie wyników — język C++
Obliczenia, wyprowadzenie wyników — język C++
#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ź wyniki Wyprowadź wyniki
cin to obiekt posiadający wbudowane funkcje składowe
cin to obiekt posiadający wbudowane funkcje składowe
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 obiektu Selektor wyboru składowej obiektu
Niech użytkownik ma szansę zobaczyć wyniki
Niech użytkownik ma szansę zobaczyć wyniki
#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.
Zmienna wynik jest właściwie zbędna...
Zmienna wynik jest właściwie zbędna...
. . .
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++
Wyprowadzanie danych do cout można uprościć
Wyprowadzanie danych do cout można uprościć
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:
Kilometry na mile — podsumowanie, język C
Kilometry na mile — podsumowanie, język C
#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 , ANSI89 C , ANSI89
Kilometry na mile — podsumowanie, język C++
Kilometry na mile — podsumowanie, język C++
#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++
Kolejny problem do rozwiązania
Kolejny problem do rozwiązania
Zadaniem programu jest obliczanie, ile średnio litrów paliwa zużywa pojazd na trasie 100 km.
Scenariusz działania programu: Problem
Kolejny problem do rozwiązania — analiza
Kolejny problem do rozwiązania — analiza
Ś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.
Rozwiązanie w C — wersja pierwsza
Rozwiązanie w C — wersja pierwsza
#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();
C , ANSI89 C , 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.
Rozwiązanie w C — wersja pierwsza
Rozwiązanie w C — wersja pierwsza
#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 , ANSI89 C , ANSI89
Deklaracje zmiennych — bufor dla wczytywania liczb oraz zmienne dla przechowania dystansu i ilości paliwa.
Deklaracje zmiennych — bufor dla wczytywania liczb oraz zmienne dla przechowania dystansu i ilości paliwa.
Rozwiązanie w C — wersja pierwsza
Rozwiązanie w C — wersja pierwsza
#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();
C , ANSI89 C , ANSI89
Wczytanie dystansu
Rozwiązanie w C — wersja pierwsza
Rozwiązanie w C — wersja pierwsza
#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 , ANSI89 C , ANSI89
Wczytanie ilości paliwa
Rozwiązanie w C — wersja pierwsza
Rozwiązanie w C — wersja pierwsza
#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(); C , ANSI89 C , ANSI89 Obliczenie i wyprowadzenie średniego spalania Obliczenie i wyprowadzenie średniego spalania
Rozwiązanie w C — wersja druga, kontrola dzielenia przez zero
Rozwiązanie w C — wersja druga, kontrola dzielenia przez zero
#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 , ANSI89 C , ANSI89 Instrukcja alternatywy Instrukcja alternatywy
Operator != oznacza różne, nierówne
Instrukcje warunkowe
Instrukcje warunkowe
if( W ) I if( W ) I1 else I2Instrukcja 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. I I W W tak nie I1I1 W W tak nie I2 I2
Kontrola dzielenia przez zero
Kontrola dzielenia przez zero
...
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ą.
Rozwiązanie w C++ — wersja z kontrolą dzielenia przez zero
Rozwiązanie w C++ — wersja z kontrolą dzielenia przez zero
#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();
C ++ C ++
Podsumowanie
Podsumowanie
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.
Podsumowanie, cd...
Podsumowanie, cd...
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).