C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016 ...
Author: Ksawery Stefański
0 downloads 0 Views

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016

2 Z2++ brzmiało: Napisz kompleksowy program który będzie zawierał: 1. Funkcja potęguje dwie wprowadzone liczby A i B i wyświetla wynik na ekranie 2. Funkcja pobiera od użytkownika Imię i wyświetla na ekranie „Witaj $imię!” 3. Funkcja która po wprowadzeniu przez użytkownika liczby całkowitej wykona silnię tej liczby. 4. Funkcja która wypełni tablicę N-elementową liczbami losowymi, wyświetli je, a następnie je przesortuje metodą QuickSort i wyświetli przesortowane. 5. Program po uruchomieniu powinien posiadać menu wyboru (po każdym wyborze i wykonaniu operacji program ma wracać do menu, kończy się dopiero po wyborze opcji 5. Zakończ): 1. Potęguj 2. Przywitaj 3. Silnia 4. Sortuj 5. Zakończ

3 Zajęcia [22.03.2016]  Pętla WHILE  Rekurencja  Wskaźnik  Referencja  Zadanie domowe

4 Pętla WHILE while( /* warunek kończący pętlę */ ) { instrukcja1; instrukcja2; zmiana_wartości_warunku; }

5 #include void odliczanie(int iStart) { while(iStart>=0) { std::cout

6 Rekurencja  Rekurencja (rekursja) – wywołanie samej siebie  Stosuje się często przy potrzebie ponownego wywołania funkcji operującej na tym samym stosie danych (struktury drzewiaste, vide XML).  Stabilizuje przejrzystość kodu, ułatwia implementację rozwiązań  Przykład (w zadaniu domowym: silnia)

7 #include using namespace std; long sumuj(int n) { if(n n; cout

8 Stos Pamięć komputera jest podzielona na bajty, a każdy bajt ma swój adres. Dla przykładu: W 1KB pamięci jest 1024 bajtów i każdy z nich ma adres (0-1023).

9 Po co stosować wskaźniki/referencje?  Za każdym razem gdy programista zadeklaruje zmienną, kompilator umieszcza ją _gdzieś_ w pamięci. Mając wiedzę _gdzie_ w pamięci jest wartość zmiennej – można się do niej odwoływać.  Uproszczenie kodu  Głębsze zrozumienie obsługi pamięci komputera (optymalizacja działnia kodu)  Bezpieczeństwo (memleak, buffer overflow)

10 Wskaźniki  „Zmienne w komputerze są przechowywane w pamięci. To wie każdy programista, a dobry programista potrafi kontrolować zachowanie komputera w przydzielaniu i obsłudze pamięci dla zmiennych. W tym celu pomocne są wskaźniki.” © Wikipedia int main() { int zmienna = 5; cout

11 Wskaźniki – deklaracja

12 #include using namespace std; int main() { int *pc, c; c = 5; cout

13 Referencja  Referencja to: przypisanie adresu zmiennej do innej zmiennej  Referencja to także: przekazanie argumentu do funkcji  Operacje wykonane na zmiennej referencyjnej zostaną odzwierciedlone na zmiennej z której pobrano adres.  W odróżnieniu od wskaźnika adres może być przypisany tylko jeden raz, a następnie operacje wykonywane są jak na zwykłej zmiennej  Analiza dwóch programów (zmienne, funkcje) – przeanalizuj i odpowiedz na pytanie: jakie wartości otrzymano w przypadku zmiennych, a jakie w przypadku wywołania funkcji?

14 #include using namespace std; int main() { int i = 5; int &ref_i = i; //referencja musi być zadeklarowana w momencie inicjalizacji cout

15 #include using namespace std; void update_nie(int liczba) { ++liczba; } void update_tak(int & liczba) //nie musi być zadeklarowana w momencie inicjalizacji { ++liczba; } int main() { int wartosc=0; cout > wartosc; update_nie(wartosc); cout

16 Zadanie domowe (5pkt)  1. Napisz program który:  A) funkcją poprosi o podanie wartości int trzech kolejnych zmiennych X, Y, Z  B) wypisze wartości i adresy zmiennych X, Y, Z za pomocą wskaźników  C) zamieni wartości wskazanych dwóch zmiennych za pomocą wskaźników  D) zamieni wartości wskazanych dwóch zmiennych za pomocą referencji (!)  E) Po wypisaniu A, B, C, D program czeka na ruch użytkownika:  Wpisanie słowa „exit” [enter] -> koniec programu  Wpisanie słowa „run” [enter] -> wyświetlenie na ekranie 1000 liczb od 1 do 1000, następny [enter] -> koniec programu  Wykorzystaj wiedzę nt. operacji we/wy, funkcji, stringów, pętli oraz alokacji w pamięci (punkt E może być realizowany bez wsk/ref), podpowiedź: wykorzystaj zmienne pomocnicze, ostrożnie z mieszaniem wskaźników i referencji

17 Przykład  Podaj X:  Podaj Y:  Podaj Z:  Wartosc X=Adres X=  Wartosc Y=Adres Y=  Wartosc Z=Adres Z=  Podaj zmienne do zamiany wskaźnikowej: Z, Y  Wartosc X=Adres X=  Wartosc Y=Adres Y=  Wartosc Z=Adres Z=  Podaj zmienne do zamiany referencyjnej: X, Y  Wartosc X=Adres X=  Wartosc Y=Adres Y=  Wartosc Z=Adres Z=  Co mam robić, mój Panie? [exit/run]  run  1, 2, 3, 4, 5, … 1000  exit