Podstawowe informacje o języku C++

1.

Języki programowania

Przykłady języków: język polski, język suahili, język esperanto, „język muzyczny”, „język matematyczny”, język migowy, języki programowania.

Pięć generacji języków programowania:

I generacja: kod maszynowy

II generacja: język niskiego poziomu

III generacja: języki wysokiego poziomu, np. C++

IV generacja: generatory aplikacji

V generacja: języki sztucznej inteligencji

2.

Składniki języka C++

a) alfabet: cyfry od 0 do 9, litery alfabetu łacińskiego (wielkie i małe rozróŜnialne między sobą), znaki +, -, ), (, *, &, ^, %, #, !, |, /, {, }, <, >, =, ”, spacja, .; b) poprawne słowa (reguły ortograficzne): tzw. słowa kluczowe (np. include, main, for, break, ...), dowolny ciąg znaków alfabetu rozpoczynający i kończący się znakiem cudzysłowu;

c) reguły gramatyczne: np. po nazwie funkcji muszą pojawić się nawiasy okrągłe, istnieje dowolność we wstawianiu spacji przed i po nawiasach, kaŜda instrukcja musi być zakończona średnikiem, ...

3.

Schemat prostego programu w języku C++

1) #include<iostream>

2) using namespace std;

3) int main()

4) {

5) //miejsce na instrukcje realizujące zadanie stawiane przed programem; 6) cout<<”\nNacisnij Enter aby zakonczyc program”;

7) cin.get();

8) return 0;

9) }

Znaczenie wierszy 1) – 9)

1), 2) – wiersze zawierają informację dla preprocesora, Ŝe w plikach iostream oraz std znajdują się pewne definicje potrzebne do prawidłowego działania programu. Dzięki temu zrozumiałe są słowa cout, cin.get() występujące w programie;

3) – nagłówek metody main. KaŜdy program w języku C++ musi zawierać metodę main o takim samym nagłówku. Puste nawiasy oznaczają, Ŝe jest to funkcja bezparametrowa (funkcja stała), a słowo int oznacza, Ŝe ostatecznym wynikiem działania tej funkcji jest liczba całkowita;

4), 9) – oznaczają odpowiednio początek i koniec bloku (ciała, zawartości) funkcji main; 5) – polecenia (instrukcje), odpowiedzialne za poprawne działanie funkcji main w róŜnych programach;

6) – instrukcja wypisująca na konsoli, w nowym wierszu komunikat: Nacisnij Enter aby zakonczyc program;

7) – instrukcja zamykająca okno konsoli po wciśnięciu klawisza Enter; 8) instrukcja wskazująca liczbę 0 jako wartość funkcji main.

4.

Instrukcje

Instrukcje to polecenia wykonania elementarnych czynności przez program, np.

- zarezerwuj w pamięci obszar 4B na zapis liczby całkowitej,

- wpisz do wskazanego obszaru pamięci (wcześniej zarezerwowanego) podaną wartość,

- wykonaj wskazane działania arytmetyczne;

- określ wartość logiczną zdania logicznego...

5.

Funkcje

Funkcje to grupy powiązanych ze sobą poleceń, realizujące pewne zadania. Są wykorzystywane do realizacji celów stawianych przed programem, np. obliczenia wartości wyraŜenia arytmetycznego. W kaŜdym programie musi wystąpić przynajmniej jedna metoda main o następującej składni:

using namespace std;

int main()

{

//miejsce na instrukcje realizujące zadanie stawiane przed programem; return 0;

}

6.

Znaki specjalne w stringach

\n – przejście do nowego wiersza,

\t – znak tabulacji,

\b – backspace,

\r – powrót karetki,

\\ - ukośnik w tył,

\” – cudzysłów,

\a lub \007 - alarm

7. Zmienne, typy podstawowe

W języku C++ występują 3 rodzaje zmiennych: zmienne obiektowe, zmienne statyczne (globalne klasy) oraz zmienne lokalne.

Zmienne lokalne są uŜywane wewnątrz definicji funkcji lub nawet w mniejszych blokach instrukcji wewnątrz ciała funkcji. Są dostępne jedynie podczas wykonywania odpowiednio kodu metody lub kodu bloku instrukcji i natychmiast przestają istnieć po tym czasie.

Deklarowanie zmiennej ma postać:

typ_zmiennej nazwaZmiennej;

Nazwa zmiennej musi spełniać następujące reguły:

• moŜe składać się jedynie z liter, cyfr oraz znaku podkreślenia,

• nie moŜe zaczynać się od cyfry (najlepiej aby nie zaczynała się od znaku podkreślenia),

• duŜe litery są odróŜnialne od małych,

• nazwa zmiennej nie moŜe być słowem kluczowym,

Typem zmiennej moŜe być typ podstawowy, typ pochodny od podstawowego, nazwa klasy bądź tablica.

Typy podstawowe: znak, liczba całkowita, liczba zmiennopozycyjna, liczba zmiennopozycyjna podwójnej precyzji, wartość logiczna

typy przeznaczone do przechowywania liczb całkowitych

nazwa typu

typowy rozmiar

zakres przechowywanych wartości

char (podstawowy)

1 bajt

od -128 do 127

unsigned char

1 bajt

od 0 do 255

short int,

2 bajty

od -32.768 do 32.767

short

unsigned short int,

2 bajty

od 0 do 65535

unsigned short

int (podstawowy)

2, 4 lub 8 bajtów

dla 4B: od -2.147.438.648 do 2.147.438.647

unsigned int

2, 4 lub 8 bajtów

dla 4B: od 0 do 4.294.967.295

long int,

4 lub 8 bajtów

dla 8B: od -9.223.372.036.854.775.808 do

long

9.223.372.036.854.775.807

unsigned long int,

4 lub 8 bajtów

dla 8B: od 0 do 18.446.744.073.709.551.615

unsigned long

przeznaczone do przechowywania liczb wymiernych

nazwa typu

rozmiar

zakres przechowywanych wartości

float (podstawowy)

4 bajty

od -3,4*1038 do 3,4*1038 z dokładnością do 6-ciu cyfr

double (podstawowy)

8 bajtów

od -1,7*10308 do1,7*10308 z dokładnością 10-ciu cyfr

long double

12 bajtów

od -1,2*104932 do1,7*104932 z dokładnością 10-ciu cyfr

przeznaczone do przechowywania pojedynczych znaków

nazwa typu rozmiar

zakres przechowywanych wartości

char

1 bajt

znaki kodu ASCII

przeznaczone do przechowywania jednej z dwóch wartości: prawdy lub fałszu nazwa typu

rozmiar

zakres przechowywanych wartości

bool (podstawowy) 1 bajt

true lub false

np.

int n = 23;

char znak = ‘k’;

bool czyPrawda = true;

bool b = -24; //zmienna przybiera wartość true gdy jest róŜna od 0, a wartość false w p.p.

float x = 6.523;

float z = -1.43e+2; //tutaj e = 10

double w = 2E9; //to samo co 2.0E+9, E oznacza to samo co e;

8.

Operatory

8.1.

Operatory arytmetyczne – wykonywane są od lewej strony do prawej zgodnie z regułami matematyki (*, /, % w pierwszej kolejności), chyba Ŝe nawiasy okrągłe wskazują inaczej

symbol

znaczenie

przykłady, uwagi

operatora

*

mnoŜenie

np. 9.1 * 8 zwróci wartość 72.8

/

dzielenie całkowite,

np. 25 / 10 zwróci wartość 2 gdyŜ dzielna

i dzielnik są liczbami całkowitymi

dzielenie

25.0 / 10 zwróci wartość 2.5 gdyŜ choć

jedna spośród dwu liczb nie jest całkowita

%

reszta z dzielenia liczb całkowitych

np. 5 % 2 zwróci wartość 1

+

dodawanie

np. 4.2 + 13.9 zwróci wynik 18.1

-

odejmowanie

np. 2.9 – 4.5 zwróci wynik -1.6

-

wzięcie liczby przeciwnej

8.2.

Operatory przypisania

symbol operatora znaczenie

przykłady, uwagi

=

przypisz zmiennej wartość

np. x = ‘9’

+=

dodaj, a następnie przypisz

np. x += y zastępuje x = x+y

-=

odejmij, a następnie przypisz

np. x -= y zastępuje x = x - y

*=

pomnóŜ, a następnie przypisz

np. a *= b zastępuje a = a * b

/=

podziel, a następnie przypisz

np. a /= b zastępuje a = a / b

Uwaga, operatory arytmetyczne są wykonywane przed operatorami przypisania, dlatego x /= y + 5 oznacza: x = x / (y + 5)

8.3 Opery inkrementacji i dekrementacji

symbol operatora znaczenie

przykłady, uwagi

++

inkrementuj, czyli zwiększ o 1

np. x++ lub ++x zastępuje x = x + 1

--

dekrementuj, czyli zmniejsz o 1

np. x—lub—x zastępuje x = x -1

Uwaga, zapis y = x++ zastępuje następujące dwie instrukcje y = x; x++; natomiast zapis y = ++x zastępuje następujące dwie instrukcje x++; y = x; podobnie jest dla operatora dekrementacji

8.4 Operatory porównania

symbol operatora znaczenie

przykłady, uwagi

= =

równe

np. x = = 3

!=

róŜne

np. ‘a’ != ‘A’

<

mniejsze

np. x < y

>

większe

np. 3 > 5

<=

niewiększe

np. boolean z; z = 5 <= 1;

>=

niemniejsze

np. y >=x

8.5

Operatory logiczne

symbol operatora znaczenie

przykłady, uwagi

&&

koniunkcja

np. (5>1) && (4<=6) ma wartość true

| |

alternatywa

np. (5>1) || (8<=6) ma wartość true

= =

równowaŜność

np. x = = x++ ma wartość false

!

zaprzeczenie

np. !(4<0) ma wartość true

W języku C++ obowiązują następujące priorytety pomiędzy operatorami róŜnego rodzaju:

• nawiasy okrągłe;

• inkrementacja przyrostkowa, dekrementacja przyrostkowa,

• operatory jednoargumentowe (unarne), np. zaprzeczenie, wzięcie liczby przeciwnej oraz inkrementacja przedrostkowa i dekrementacja przedrostkowa;

• operatory dwuargumentowe (binarne) związane z mnoŜenie lub dzieleniem, np.: *, /,

%;

• operatory arytmetyczne dodawania i odejmowania +, -;

• porównania >, >=, <, <=;

• porównania !=, = =;

• operatory logiczne &&, ||;

• operatory przypisania =, +=, *=, -=, /=; %=;

• operator warunkowy ?: .

9 Podstawowe instrukcje złoŜone

9.1 Instrukcje warunkowe

Instrukcje te pozwalają na warunkowe wykonywanie określonych operacji, powodują

„rozgałęzienie” działania programu.

9.1.1 Instrukcja warunkowa if W najprostszej wersji ma ona postać:

if (wyraŜenie_testowe)

{

// blok instrukcji wykonywanych, jeśli wartość logiczna warunku wyraŜenie_testowe

//jest prawdą lub jest wartością liczbową niezerową

}

JeŜeli blok instrukcji występujący po nagłówku if ( wyraŜenie_testowe) instrukcji jest pojedynczą instrukcją, to moŜna opuścić nawiasy klamrowe.

W postaci rozszerzonej instrukcja warunkowa if ma formę:

if (wyaŜenie_testowe )

{

//blok instrukcji wykonywanych, jeśli wartość logiczna warunku wyraŜenie_testowe

// jest prawdą lub jest wartością liczbową niezerową

}

else

{

//blok instrukcji wykonywanych w przeciwnym przypadku

}

9.1.2 Operator warunkowy ?:

Operator ten moŜe zastępować instrukcję warunkową if. Ma on następującą postać: wyraŜenie_testowe ? wyraŜenie1 : wyraŜenie2;

Operator ten zwraca pojedynczą wartość – albo wyraŜenie1, o ile wartość logiczna wyraŜenia_testowego jest prawdą, albo wyraŜenie2, w przeciwnym przypadku.

9.1.3

Instrukcja switch

Ma ona postać następującą:

switch (zmienna_całkowita)

{

case wartość1 : intrukcje1;

break; //opcjonalnie

case wartość2 : intrukcje2;

break; //opcjonalnie

…

default : instrukcje_inne;

}

Gdy zmienna _ całkowita ma wartość1, wtedy instrukcja switch wykona instrukcje1 i tylko te instrukcje o ile po nich znajduje się słowo break. Brak w tym miejscu słowa break oznacza, Ŝe switch wykona wszystkie instrukcje począwszy od tych, które odpowiadają wartości1, aŜ do napotkania słowa break.

9.2 Pętle

Instrukcje te pozwalają na wielokrotne powtarzanie określonych instrukcji 9.2.1

Pętla while

Ma ona postać:

while (wyraŜenie-testowe)

{

//ciało pętli

}

Jeśli wyraŜenie-testowe ma wartość logiczną prawdy lub ma wartość róŜną od 0, to następuje wykonanie instrukcji z ciała pętli i ponowne sprawdzenie wartości wyraŜenia-testowego.

Czynności te są powtarzane, aŜ do momentu, gdy wyraŜenie-testowe osiąga wartość logiczną fałszu lub wartość 0. Wówczas instrukcje z ciała pętli są pomijane, a wykonywane, te znajdujące się pod ciałem pętli.

Uwaga, działanie pętli while zmieniają instrukcje continue oraz break (patrz rozdział 9.3) 9.2.2

Pętla do while

Ma ona postać:

do

{

//ciało pętli

}

while (wyraŜenie-testowe);

Pętla rozpoczyna się od wykonania instrukcji tworzących ciało pętli. Następnie sprawdzana jest wartość logiczna wyraŜenia wyraŜenie-testowe. Jeśli jest ona prawdą lub wartością róŜną od 0, to następuje powrót do ciała pętli i ponowne sprawdzenie wartości wyraŜenia wyraŜenie-testowe. Czynności te powatrzają się aŜ do momentu, gdy wyraŜenie-testowe okaŜe się fałszywe lub równe 0. Wtedy program wykona instrukcje znajdujące pod pętlą.

Uwaga, działanie pętli do while zmieniają instrukcje continue oraz break (patrz rozdział 9.3) 9.2.3

Pętla for

Ma ona postać:

for (inicjacja_pętli ; warunek_trwania_pętli ; aktualizacja)

{

//ciało pętli

}

Pętla rozpoczyna się od wykonania instrukcji inicjacja_pętli. Następnie sprawdzana jest wartość wyraŜenia warunek_trwania_pętli. Jeśli ma on wartość prawdy lub jest róŜna od 0, to wykonywane są instrukcje z ciała pętli. Po nich następuje wykonanie instrukcji aktualizacja i powtórne sprawdzenie wartości wyraŜenia warunek_trwania_pętli. Te trzy rodzaje czynności:

- sprawdzenie wartości wyraŜenia warunek_trwania_pętli,

- instrukcje z ciała pętli

- aktualizacja

powtarzane są dopóki wartość wyraŜenia warunek_trwania_pętli nie osiągnie wartości logicznej fałszu lub wartości 0. Wtedy program przechodzi do wykonania instrukcji znajdujących się pod ciałem pętli.

Część inicjacja_pętli oraz aktualizacja nie muszą być pojedynczymi instrukcjami. Wtedy wchodzącę w ich skład instrukcje naleŜy oddzielić przecinkiem. W nagłówku pętli for nie muszą wystąpić wszystkie trzy elementy: inicjacja_pętli, warunek_trwania_pętli, aktualizacja. Muszą za to wystąpić dwa średniki. WyraŜenie

for( ; ; )

{

// ciało pętli

}

jest poprawne, a pusty warunek_trwania_pętli uznawany jest za prawdziwy. Dlatego taka pętla w nieskończoność będzie wykonywać instrukcje z ciała.

Uwaga, działanie pętli for zmieniają instrukcje continue oraz break (patrz rozdział 9.3) 9.3 Instrukcje continue i break

Instrukcja continue umieszczona w ciele pętli powoduje, Ŝe instrukcje znajdujące się pod nią nie są wykonywane, a program powraca do nagłówka bieŜącej pętli (tak jakby wszystkie instrukcje z ciała pętli zostały wykonane).

Instrukcja break, umieszczona w ciele pętli powoduje zaniechanie wykonywania instrukcji z ciała bieŜącej pętli znajdujących się pod nią i wyjście poza tę pętlę. W przypadku pętli zagnieŜdŜonych instrukcja break nie pozwala na wyjście poza wszystkie pętle. W tym celu moŜna wykorzystać instrukcję goto.

9.4 Instrukcja goto

Powinna być wykorzystywana tylko w jednym przypadku – gdy chcemy wyjść jednocześnie z kilku pętli zagnieŜdŜonych. Aby tak się stało musi posiadać specjalną etykietę, informującą, w którym miejscu programu naleŜy wznowić wykonywanie instrukcji, po przejściu przez instrukcję goto. Etykieta musi pojawić się w dwóch miejscach: w ciele pętli, tuŜ to słowie goto oraz w miejscu do którego chcemy aby realizacja programu została przeniesiona. Po etykiecie umieszczonej w miejscu gdzie ma zostać przeniesiona realizacja programu musi wystąpić dwukropek.

Np.

//etykieta umieszczona przed pętlą w której ciele występuje instrukcja for ( int i = 0; i < 40; i++ )

// break lub continue z etykietą

{

while ( x < 50 )

{

if ( warunek ) break out;

else instrukcja1;

}

instrukcja2;

}

out:

10. Stałe i funkcje matematyczne w pliku nagłówkowym math.h Plik math.h zawiera definicje następujących stałych:

nazwa stałej

wartość

opis

M_E

2.7182818284590452354

e - stała Eulera

M_LOG2E

1.4426950408889634074

log e

2

M_LOG10E

0.43429448190325182765

log e

10

M_LN2

0.69314718055994530942

log 2

e

= ln 2

M_LN10

2.30258509299404568402

log 10

e

= ln10

M_PI

3.14159265358979323846

π - stosunek długości obwodu okręgu do średnicy

M_PI_2

1.57079632679489661923

π/2

M_PI_4

0.78539816339744830962

π/4

M_1_PI

0.31830988618379067154

1/π

M_2_PI

0.63661977236758134308

2/π

M_2_SQRTPI

1.12837916709551257390

2

π

M_SQRT2

1.41421356237309504880

2

M_SQRT1_2

0.70710678118654752440

1/ 2

Plik math.h zawiera prototypy następujących funkcji matematycznych:

prototyp funkcji

opis funkcji

double sin (double)

sinus zmiennej rzeczywistej

double cos (double)

cosinus zmiennej rzeczywistej

double tan (double)

tangens zmiennej rzeczywistej

double sinh (double)

sinus hiperboliczny

double cosh (double)

cosinus hiperboliczny

double tanh (double)

tangens hiperboliczny

double asin (double)

arcus sinus

double acos (double)

arcus cosinus

double atan (double)

arcus tangens

double exp (double)

x

e , gdzie x jest argumentem funkcji exp

double log (double)

log x = ln x , gdzie x jest argumentem funkcji log e

double log10 (double)

log

x = log x , gdzie x jest argumentem funkcji log10

10

double pow (double, double)

b

a , gdzie a jest pierwszym, zaś b drugim argumentem funkcji pow double sqrt (double)

x , gdzie x jest argumentem funkcji sqrt

double ceil (double)

funkcja zaokrągla argument zawsze w górę

double floor (double)

funkcja zaokrągla argument zawsze w dół

double fabs (double)

wartość bezwzględna z liczby x, gdzie x jest argumentem funkcji fabs

Plik stdlib.h zawiera prototyp funkcji generującej liczby całkowite w sposób pseudolosowy

prototyp funkcji

opis funkcji

int rand(void)

funkcja zwraca całkowitą liczbę

pseudolosową z przedziału [0; 32767]