Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include <iostream> dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace std; main () dyrektywa, określająca standardową przestrzeń nazw. główna funkcja programu cout standardowy strumień wyjściowy << przesyłanie do strumienia wyjściowego return kończy wykonywanie funkcji i przekazuje określoną wartość do programu (lub innej funkcji). Dla funkcji main () : return 0 oznacza prawidłowe zakończenie programu. Definicje: Program źródłowy dający się odczytać tekst programu. Kod wynikowy przekład tekstu źródłowego programu na język komputerowy. Program wykonywalny program binarny gotowy do wykonania. Kompilator program, wczytujący cały tekst programu źródłowego i przekładający go na język komputerowy. Konsolidator program, łączący oddzielnie skompilowane funkcje w jeden program i wiążący kod wynikowy z funkcjami biblioteki C++. Biblioteka plik zawierający funkcje standardowe, z których można korzystać w programie. Identyfikator nazwa, służąca do oznaczania obiektów zdefiniowanych przez użytkownika w programie. Może zawierać litery, cyfry, znak podkreślenia. UWAGA: może zaczynać się tylko od litery lub znaku podkreślenia! (Rozróżniane są małe i wielkie litery!) Zasady ustalania nazw (identyfikatorów): - używać słów kojarzących się z przeznaczeniem zmiennej, - używać małych liter, a nie wielkich, - jeśli składa się z kilku słów, oddzielać słowa znakiem podkreślenia albo zaczynać każde kolejne słowo od wielkiej litery (poza pierwszą), - nazwy jednoliterowe są dopuszczalne tylko w odniesieniu do liczników pętli, - wybrany styl tworzenia nazw powinien być jednolity w całym programie. Słowa kluczowe w języku C++ są dokładnie 63 słowa kluczowe, których nie można używać jako nazw zmiennych i innych obiektów. Przykłady słów kluczowych: int, if, sizeof.
Podstawowe typy danych: Typy proste są niepodzielne, wykorzystuje się je do przechowywania pojedynczych danych. - Typy arytmetyczne służą do przechowywania liczb całkowitych, rzeczywistych i znaków. Są dostępne w różnych rozmiarach, co pozwala wybrać ilość zużywanej pamięci. - Typ logiczny służy do przechowywania wartości logicznych. Zmienne tego typu mogą przyjmować tylko wartości true (prawda) i false (fałsz). - Typ wskaźnikowy (dla adresów obiektów dane typu) - Typ referencyjny (dla innej nazwy obiektu) - Typ wyliczeniowy (dla reprezentowania zbioru wartości podanych przez użytkownika)
- Typy złożone składają się z elementów typów prostych oraz innych typów złożonych. Wykorzystywane są do przechowywania danych powiązanych ze sobą. - Tablice (obiektów danego typu) - Struktury oraz klasy (zawierające zestawy obiektów różnego typu) - Unie (zawierające dowolny z zestawu obiektów o różnych typach) - Funkcje (zwracające wartości danego typu). Zmienna obszar pamięci o nadanej symbolicznej nazwie, w którym można przechowywać dane, pobierać je i zmieniać podczas wykonywania programu. Deklaracja zmiennej składa się ze specyfikatora typu (np. int, double, char) i występującej po niej nazwy zmiennej (np. wskaźnik, licznik, suma). Musi ona poprzedzać w tekście programu użycie zmiennej. Najlepiej umieszczać deklaracje na początku funkcji. Zmienna przyjmuje wartości w wyniku: - Inicjowania nadania pierwszej wartości zmiennej podczas jej definiowania (nie jest to obowiązkowe), - Przypisania w trakcie działania programu zmiennej przypisuje się wartość za pomocą operatora przypisania =, - Wczytanie w trakcie działania programu można wczytywać wartości do zmiennych za pomocą konstrukcji cin >> nazwa_zmiennej. Stała dana zapisana w sposób dosłowny (liczba, znak, zapis), nie zmienia się podczas wykonywania programu. Z każdą stałą związany jest jej typ i wartość. Wyróżniamy: - Stałe liczbowe całkowite (int), zmiennopozycyjne (double). - Stałe logiczne przyjmujące wartości true (prawda) lub false (fałsz) - Stałe znakowe znaki umieszczone w apostrofach a, których typem jest char. Wartość stałej znakowej to kod liczbowy znaku. - Stałe napisowe - ciągi znaków umieszczone w cudzysłowach Aaaaaa, których typem są tablice typu char. Stała napisowa jest pamiętana jako sekwencja znaków zakończona znakiem pustym ( \ 0 ). const modyfikator, przekształcający obiekt w stałą.
Wyrażenia i operatory: Instrukcja wyrażenie zakończone średnikiem ( ; ) Argumenty na nich wykonuje się operacje (zmienne, stałe, wywołania funkcji, wyrażenia). Operatory reprezentują operacje.
Priorytety podstawowych operatorów C++: Operatory arytmetyczne:
Operatory porównania, relacji oraz logiczne: Prawa De Morgan a: not (p and q) = not (p) or not (q) not (p or q) = not (p) and not (q) Operatory zwiększania (inkrementacji) ++ i zmniejszania (dekremenacji) Konwersja typów ma miejsce wtedy, kiedy wspólnie korzysta się ze zmiennych lub obiektów różnych typów. Może być niejawna (wykonywana automatycznie przez kompilator) lub jawna (wykonywania na życzenie użytkownika). Konwersje muszą być bezpieczne, aby nie utracić przechowywanych informacji. Przykładem bezpiecznej konwersji jest przekształcanie argumentów o mniejszych rozmiarach do typów o większych rozmiarach.
Funkcje: Przekazywanie parametrów: Uwagi o tworzeniu funkcji:
Instrukcje rozgałęziające: Instrukcja if:
Instrukcja if-else: Instrukcja switch:
Instrukcja break: Pętle: Służą do zapisu powtarzania czynności. Zawsze powinny zawierać warunek stopu (zatrzymania). Jeśli warunek stopu jest spełniony, pętla się kończy. Pętla bez warunku stopu lub z warunkiem stopu zawsze prawdziwym jest nazywana pętlą nieskończoną. Może powodować zapętlenie programu (program nigdy się nie kończy). Instrukcja for:
Instrukcja while: Instrukcja continue: Powoduje pominięcie kodu pętli aż do sprawdzenia warunku. W pozostałych miejscach programu nic nie robi.
Pętla do while Adresy i wskaźniki: & operator pobierania adresu Wskaźnik zmienna, która przechowuje adres wartości, a nie samą wartość. Deklaracja wskaźnika: <typ> * <nazwa_wskaźnika> <wskaźnik> = &<zmienna> <zmienna> = *<wskaźnik> przypisanie adresu do wskaźnika pobieranie wartości z komórki wskazywanej przez wskaźnik Zawsze trzeba zainicjować wskaźnik ustalonym i prawidłowym adresem, zanim zastosuje się do niego operator wyłuskiwania (*).
Operator new: Służy do przydzielania (alokowania) pamięci. Składnia: new <nazwa_typu_danych> Operator delete: Składnia: delete <wskaźnik> UWAGA: Operatora delete należy używać tylko do zwalniania pamięci zaalokowanej przez new! Tablice: Tablica statyczna rozmiar zadeklarowany, Tablica dynamiczna dostęp przed indeks i wskaźnik do tablicy. Drzewa: Budowa:
Operacje na drzewach: