====== 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ętlę
* **continue** - kontynuuje pętlę 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 //</ oraz //>>//. 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%%++%%.**