====== Wprowadzenie do programowania w C++ ====== //How C%%++%% is like teenage sex:// - //It is on everyone's mind all the time.// - //Everyone talks about it all the time.// - //Everyone thinks everyone else is doing it.// - //Almost no one is really doing it.// - //The few who are doing it are: **A.** Doing it poorly. **B.** Sure it will be better next time. **C.** Not practising it safely.// ==Ciekawostka== Nieco przewrotny [[http://home.agh.edu.pl/~wojnicki/interview.html|Wywiad z twórcą C++]] ;-) ===== Typy ===== Lista typów wbudowanych w standard C%%++%% ^Nazwa^Opis^Rozmiar^ |char |Znak, albo mała liczba całkowita| 1 bajt | |short int \\ (short) |Mała liczba całkowita | 2 bajty | |int |Liczba całkowita | 4 bajty | |long int \\ (long)|Długa liczba całkowita | 4 bajty | |bool |Wartość **true** albo **false** | 1 bajt | |float | Liczba zmiennoprzecinkowa | 4 bajty | |double |Liczba zmiennoprzecinkowa podwójnej precyzji |8 bajtów| |long double |Duża liczba zmiennoprzecinkowa podwójnej precyzji | 12 bajtów | |void | Pusty typ danych | -- | Typy //char, short, int, long int// posiadają warianty **signed** i **unsigned**. ===== Instrukcje sterujące ===== W C%%++%% dostępne są następujące instrukcje sterujace: * instrukcja warunkowa **if ... else ... ** * instrukcja warunkowa **switch ... case** * pętla **while** * pętla **do ... while** * pętla **for** * **break** - przerywa aktualną pętle * **continue** - kontynuuje pętle przechodząc do następnej iteracji * **return** ===== Funkcje ===== - Główną funkcją każdego programu jest funkcja //main()//. * musi ona zwracać typ //int// * może przyjmować dwa parametry: //int argc, char* argv[]//, oznaczające odpowiednio liczbę parametrów przekazanych do programu i listę tych parametrów. Zerowym parametrem jest zawsze nazwa programu. - Pisanie funkcji można rozdzielić na dwie fazy: * opcjonalna deklarację (tworzenie tzw. prototypu funkcji): double potega(double); * definicję: double potega(double liczba){ return liczba*liczba; } - Domyślnym typem zwracanym (jeśli nie określono) jest //int//. - Brak określenia typu zwracanego przez funkcję w jej definicji jest błędem składniowym jeśli prototyp określa typ zwracany inny niż int - Zapomnienie o zwróceniu wartości z funkcji, która zadeklarowana została jako zwracająca wartość, jest błędem składniowym. - Funkcje rozróżniane są po nazwie i liście parametrów, a nie po zwracanym typie. Dlatego nie można zdefiniować dwóch funkcji o takich samych nazwach i liście parametrów a innych zwracanych typach:// NIEPOPRAWNIE void foo(int a, int b){...} double foo(int c, int d){...} ===== Tablice ===== ==== Tablice jednowymiarowe ==== Tablice jednowymiarowe w C%%++%% można deklarować na cztery sposoby: - Deklarując jedynie rozmiar tablicy, bez podawania jej elementów: int tab[100]; - Deklarując rozmiar i podając elementy tablicy:int tab[5] = {1,2,3,4,5}; - Deklarując rozmiar, ale nie podając wartości wszystkich elementów: int tab[10] = {1,2,3,4,5}; - Podając listę elementów a nie podając rozmiaru tablicy:int tab[] = {1,2,3,4,5}; ====Tablice wielowymiarowe==== Tablice wielowymiarowe deklaruje się analogicznie do jednowymiarowych, jednakże podczas deklaracji tablicy wielowymiarowej konieczne jest podanie rozmiarów wymiarów, poza pierwszym: //Poprawnie int tab[][4] = {{1,2,3,4},{5,6,7,8}}; //NIEPOPRAWNIE int tab[][] = {{1,2,3,4},{5,6,7,8}}; Definiując funkcję, której parametrem jest tablica wielowymiarowa, również konieczne jest podanie wszystkich rozmiarów wymiarów, poza pierwszym: void foo(int tab[][10]){ ... } ===== Prosty program w C++ ===== ==== Przykład ==== Program ma za zadanie wczytanie imienia i wyświetlenie powitania na ekranie. // W pliku o nazwie program.cpp #include // Dołączamy bibliotekę odpowiedzialna za // operacje wejścia i wyjścia using namespace std; int main(int argv, char* arg[]){ char imie[20]; cout << "Podaj swoje imie: "; cin >> imie; cout << "Witaj " << imie << endl; return 0; } ==== Jak kompilujemy ==== W konsoli g++ program.cpp -o program ==== Omówienie ==== Warto zauważyć: * Nie jest wymagane podanie rozszerzenia biblioteki //iostream//. * Biblioteka //iostream// jest ekwiwalentem znanej z C biblioteki //stdio//. C%%++%% wprowadza //strumienie// za pomocą których odbywają się wszystkie operacje wejścia/wyjścia. * Przekierowanie danych do/ze strumienia możliwe jest dzięki operatorom //<>//. Obiektem strumienia odpowiedzialnym za wyświetlanie na ekranie jest //cout// natomiast //cin// jest to strumień wejściowy. * **using namespace std** określa, że korzystamy z przestrzeni nazw **std** z biblioteki //iostream//. ====== Ćwiczenia ====== - Skompiluj i uruchom przykład z sekcji [[#prosty_program_w_c|Prosty program w C++]] - [1 plus] Napisz program obliczający silnię. Silnia powinna być obliczana przez funkcję int silnia(int);Wykonaj dwie wersje funkcji: * rekurencyjną * iteracyjną - [2 plusy] Wyświetlanie napisu wspak. Napisz funkcję która jako parametr będzie przyjmowała tablicę znaków i wyświetlała ją wspak. Funkcja powinna być rekurencyjna! Podpowiedź: przerwij rekurencję po napotkaniu zerowego znaku końcowego //\0//. - **[2 punkty] Napisz funkcję palindrom, sprawdzającą czy podany jako parametr napis jest palindromem. Funkcja powinna zwracać **//true//** gdy napis jest palindromem, a **//false//** gdy nie jest. \\ Napisz proste menu posiadające dwie opcje: //Wyjście// i //Sprawdź palindrom//. Po wybraniu //Sprawdź palindrom// program powinien poprosić o wpisanie słowa a następnie sprawdzić i wyświetlić na ekranie czy podane słowo jest palindromem. Po wybraniu //Wyjście// program powinien kończyć działanie.** - [2 plusy] Napisz funkcję która będzie przyjmować tablicę dwuwymiarową o rozmiarach 10 na 10 i będzie uzupełniać ją iloczynami wierszy i kolumn, tworząc //tabliczkę mnożenia//. Napisz osobną funkcję do wyświetlania tej tablicy. - [3 plusy] [[http://projecteuler.net/index.php?section=problems&id=36|Palindromy liczbowe]] - **[3 punkty] Zadanie 4.24 do pobrania {{.:przypadek_skoczka.pdf|tutaj}}. Zadanie znajduje się w książce Arkana C%%++%%.**