Wprowadzenie do języka C++. Składnia, tworzenie zmiennych.

C++ to uniwersalny język programowania, stworzony jako rozszerzenie języka C o
mechanizmy programowania obiektowego. Umożliwia łączenie różnych
paradygmatów programowania (proceduralnego, obiektowego, generycznego) w
jednym kodzie. Język zaprojektował Bjarne Stroustrup na początku lat 80. XX w. (pierwsza wersja
powstała w 1979 r.) w laboratoriach Bell Labs. Początkowo nazywał się „C z
klasami”, później nazwę zmieniono na C++ Nazwa „C++” nawiązuje do operatora inkrementacji ++ (zwiększania wartości o 1) – symbolicznie oznacza „C zwiększony o jeden”, czyli ulepszony następca języka C. C++ jest językiem kompilowanym – kod źródłowy tłumaczony jest przez kompilator na kod maszynowy. Dzięki temu programy napisane w C++ działają bardzo szybko i
wydajnie. C++ znajduje zastosowanie wszędzie tam, gdzie liczy się wysoka wydajność i
kontrola nad sprzętem. Używa się go do tworzenia systemów operacyjnych (np.
Microsoft Windows, Apple macOS), gier i silników gier, aplikacji desktopowych
(pakiet Microsoft Office) czy oprogramowania wymagającego bezpośredniego
dostępu do pamięci.

Składnia języka C++

  • Średnik (;) – każda instrukcja w C++ musi być zakończona średnikiem, który
    oznacza koniec polecenia dla kompilatora. Brak średnika na końcu instrukcji
    spowoduje błąd kompilacji.
  • Nawiasy klamrowe { } – wyznaczają bloki kodu, np. ciało funkcji lub pętli,
    obejmując zestaw instrukcji. Nawiasy okrągłe () używane są przy definicjach i
    wywołaniach funkcji oraz do otaczania warunków w instrukcjach sterujących (if,
    while, for itp.).
  • C++ rozróżnia duże i małe litery w nazwach (tzw. case-sensitive). Przykładowo
    nazwy liczba i Liczba to dwie różne zmienne. Należy konsekwentnie stosować
    jednolitą pisownię identyfikatorów.
  • Komentarze – fragmenty kodu, które nie są wykonywane przez program. W C++
    komentarz jednoliniowy rozpoczyna się od //, a komentarz blokowy otaczamy
    między /* a */. Służą one do opisywania działania kodu dla programisty i są
    ignorowane przez kompilator.
    Struktura programu w C++
  • Dyrektywy dołączenia – na początku pliku źródłowego umieszczamy poleceniainclude dodające potrzebne biblioteki nagłówkowe. Np. #include dołącza standardową bibliotekę wejścia-wyjścia, co umożliwia użycie funkcji do
    obsługi konsoli.
  • Funkcja main() – każdy program C++ musi zawierać funkcję główną o nazwie
    main. To od niej zaczyna się wykonanie programu. Najczęściej definiujemy ją jako
    int main(), co oznacza funkcję zwracającą wartość całkowitą (kod wyjścia
    programu).
  • Ciało funkcji – instrukcje składające się na działanie programu umieszczamy
    wewnątrz nawiasów klamrowych { } funkcji main. Każda instrukcja kończy się ;
    zgodnie ze składnią języka. Przykład minimalnej struktury:

int main() {
// … (ciało programu)
return 0;
}
  • Zakończenie programu – w końcowej części main często umieszczamy return 0;,
    co zwraca do systemu kod 0 oznaczający poprawne wykonanie programu. W
    nowszych standardach C++ instrukcja return 0; w main nie jest obowiązkowa
    (domyślnie i tak zwracane jest 0), ale jej dodanie poprawia czytelność kodu.
  • Wejście/wyjście – aby wypisać tekst lub wartości na ekran, możemy użyć
    standardowego strumienia wyjścia. Np. wyrażenie std::cout << „Tekst”; wypisze podany tekst do konsoli (wymaga dołączenia ).

Przykład programu – Hello, World!

Poniżej przedstawiono prosty program w C++, który wypisuje napis „Hello,
World!”. Kod ten można skompilować i uruchomić w środowisku Code::Blocks lub
innym kompilatorze zgodnym z C++:

using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}

Pierwsza linia using namespace std; ustawia domyślne używanie przestrzeni nazw
std, dzięki czemu można pisać cout zamiast std::cout. Deklarujemy funkcję główną programu: int main() { … }. W nawiasach klamrowych umieszczone są instrukcje, które zostaną wykonane po uruchomieniu programu. Wewnątrz funkcji, linia cout << „Hello, World!” << endl; wypisuje na ekran konsoli tekst Hello, World! (instrukcja endl powoduje przejście do nowej linii po wypisaniu tekstu). Na końcu return 0; zwraca kod wyjścia 0 do systemu operacyjnego, informując o poprawnym zakończeniu działania programu. Program po wykonaniu tej instrukcji kończy swoje działanie. Po skompilowaniu program wyświetli w oknie konsoli napis Hello, World! i natychmiast się zakończy. (W Code::Blocks wynik można zobaczyć w oknie Console, a aby zobaczyć rezultat, często trzeba dodać pauzę lub uruchamiać program poprzez Debug/Run).

Podstawowe typy danych w C++

  • int – typ całkowitoliczbowy (integer). Przechowuje liczby całkowite (bez części
    ułamkowej), np. -10, 0, 42. Zakres możliwych wartości zależy od implementacji
    (typowo 32-bitowy, około od -2 miliardów do 2 miliardów).
  • float – typ zmiennoprzecinkowy pojedynczej precyzji (float). Służy do
    przechowywania liczb rzeczywistych z częścią ułamkową, z ograniczoną precyzją
    (~7 cyfr znaczących). Przykład wartości: 3.14F, -0.5F.
  • double – typ zmiennoprzecinkowy podwójnej precyzji. Pozwala przechowywać
    liczby rzeczywiste z większą precyzją (~15 cyfr znaczących) niż float. Np.
    3.1415926535 (domyślnie literały zmiennoprzecinkowe traktowane są jako double).
  • char – typ znakowy (character). Przechowuje pojedynczy znak (literę, cyfrę,
    symbol) w kodowaniu ASCII/Unicode – na przykład 'A’, '9′, '$’. Technicznie jest to
    najmniejszy typ całkowity (1 bajt = 8 bitów) reprezentujący kod znaku.
  • bool – typ logiczny (boolean). Może przyjmować tylko dwie wartości: true (prawda)
    albo false (fałsz)ww2.ii.uj.edu.pl. Używany jest do wyrażania wyników porównań i
    warunków logicznych.

Tworzenie zmiennych – deklaracja, inicjalizacja, nazewnictwo

  • Deklaracja zmiennej – aby móc użyć zmiennej, należy najpierw zadeklarować jej
    typ i nazwę. Deklaracja rezerwuje miejsce w pamięci na dany typ. Przykład: int
    licznik; – tworzy zmienną o nazwie licznik typu całkowitego. (Do momentu nadania
    wartości zmienna ma niezdefiniowaną zawartość).
  • Inicjalizacja – to jednoczesne stworzenie zmiennej i ustawienie jej początkowej
    wartości. Można to zrobić za pomocą operatora = podczas deklaracji. Np. int licznik
    = 0; deklaruje zmienną typu int i od razu zapisuje w niej wartość 0. Inicjalizacja
    zapobiega pozostawaniu w zmiennej śmieciowych danych.
  • Nazwy zmiennych – powinny zaczynać się od litery (ew. znaku _) i mogą zawierać
    litery, cyfry oraz podkreślenia. Nie wolno zaczynać nazwy od cyfry ani używać
    spacji i znaków specjalnych. Nazwa musi być unikalna i nie może być słowem
    kluczowym języka (np. int, while, class są zarezerwowane).
    Przykłady poprawnych nazw: waga, srednia_ocen, ilosc1.
  • Stosowanie zmiennych – po deklaracji można zmiennej przypisywać różne
    wartości w trakcie działania programu. Ważne jest, by nadać zmiennej sensowną
    nazwę, opisującą przechowywane dane (np. suma_punktow zamiast x), co ułatwia
    czytanie kodu. Zmienną należy zadeklarować przed jej pierwszym użyciem w
    kodzie, w przeciwnym razie kompilator zgłosi błąd.
    Operacje na zmiennych
  • Przypisanie wartości – operator = służy do nadania zmiennej nowej wartości (po
    prawej stronie). Lewa strona musi być nazwą zmiennej, której wartość chcemy
    zmienić. Np. x = 10; ustawia wartość zmiennej x na 10. Jeśli zmienna x miała
    wcześniej inną wartość, zostaje ona zastąpiona.
  • Operacje arytmetyczne – na zmiennych liczbowych można wykonywać
    podstawowe działania matematyczne: dodawanie (+), odejmowanie (-), mnożenie
    (*), dzielenie (/) oraz modulo (% – reszta z dzielenia całkowitego). Można używać
    zarówno stałych, jak i innych zmiennych w tych operacjach. Np. mając int a=5, b=2;:
    • int sum = a + b; (sum = 7),
    • int różnica = a – b; (różnica = 3),
    • int iloczyn = a * b; (iloczyn = 10),
    • int iloraz = a / b; (iloraz = 2, dzielenie całkowite zaokrągla w dół)*,
    • int reszta = a % b; (reszta = 1, ponieważ 5÷2 daje resztę 1)*.
  • Złożone wyrażenia – w przypisaniach można korzystać z wcześniejszych wartości
    zmiennych. Np. a = a + 1; zwiększa wartość zmiennej a o 1. Podobnie a = a * 2;
    pomnoży bieżącą wartość a przez 2 i zapisze wynik ponownie w a.
  • Kolejność działań – C++ respektuje standardowe prawa kolejności operatorów
    (najpierw mnożenie/dzielenie/modulo, potem dodawanie/odejmowanie). Można
    używać nawiasów () w wyrażeniach, aby zmienić kolejność obliczeń lub poprawić
    czytelność.
  • Konwersje typów – przy operacjach na zmiennych różnych typów może zachodzić
    konwersja (np. int z double). W prostych obliczeniach typy całkowite i
    zmiennoprzecinkowe można mieszać – wynik będzie promowany do typu o
    większej precyzji (np. wyrażenie 5 + 2.5 zostanie obliczone jako typ double). W
    razie potrzeby można też stosować rzutowanie typów, ale to temat na później.
    Operatory w C++ (przegląd)
  • Operatory arytmetyczne: służą do wykonywania działań na liczbach. Należą do
    nich: + (dodawanie), – (odejmowanie), * (mnożenie), / (dzielenie), % (modulo –
    reszta z dzielenia, np. 23 % 7 = 2).
  • Operatory porównania (relacyjne): pozwalają porównać dwie wartości. Wynikiem
    takiego porównania jest wartość logiczna true albo false. Do operatorów
    porównania należą: == (równość – sprawdza czy lewa i prawa strona są sobie
    równe), != (czy różne), > (więcej niż), < (mniej niż), >= (większe lub równe), <=
    (mniejsze lub równe). Np. wyrażenie (x != 0) zwraca true, jeśli x nie jest zerem.
  • Operatory logiczne: umożliwiają łączenie warunków logicznych. Główne to: &&
    (koniunkcja, logiczne AND – zwraca true, gdy oba warunki są spełnione), ||
    (alternatywa, logiczne OR – true, gdy przynajmniej jeden z warunków jest
    spełniony), ! (negacja, NOT – zwraca przeciwny stan logiczny, true zmienia na false
    i vice versa). Przykład: (a > 0 && b > 0) jest true, gdy a i b są jednocześnie większe
    od zera.
  • Operatory przypisania: służą do modyfikacji wartości zmiennej.. Podstawowy to =
    (proste przypisanie wartości z prawej strony). Istnieją też operatory przypisania z
    operacją, które skracają zapis: += (dodaj i przypisz), -= (odejmij i przypisz), *=
    (pomnóż i przypisz), /= (podziel i przypisz) itp. Np. x += 5; jest równoważne x = x +
    5; (zwiększy x o 5). Można w ten sposób wygodnie modyfikować bieżącą wartość
    zmiennej.
  • Inne operatory: C++ udostępnia także szereg innych operatorów, np.
    inkrementacji ++ (zwiększa wartość zmiennej o 1), dekrementacji — (zmniejsza o
    1), operatory bitowe (&, |, ^, ~, przesunięcia bitowe <<, >>), operator warunkowy ?: i
    wiele innych. Ich poznawanie następuje stopniowo – na początku warto opanować
    powyższe podstawy, które są najczęściej używane.