Programowanie w C++ Wykład 4 Katarzyna Grzelak 19 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37
Funkcje cd K.Grzelak (Wykład 1) Programowanie w C++ 2 / 37
Funkcja powtórzenie Funkcje == podprogramy Funkcję uruchamia się podajac jej nazwę i w okragłym nawiasie argumenty (wartości zmiennych na których pracuje funkcja) K.Grzelak (Wykład 1) Programowanie w C++ 3 / 37
Funkcja powtórzenie int potega(int podstawa, int wykladnik){ int wynik=1; for(int i=0;i<wykladnik;i++){ wynik=wynik*podstawa; } return wynik; } potega nazwa funkcji (int podstawa, int wykladnik) argumenty funkcji za return to co funkcja zwraca przed nazwa funkcji typ wyniku K.Grzelak (Wykład 1) Programowanie w C++ 4 / 37
Przykłady deklaracji i wywołania funkcji Deklaracje int fun1(); double f2(double czas, int typ); void rysuj(char znak, int n); Przykładowe wywołania powyższych funkcji int wynik1=fun1(); cout «f2(158.6,5) «endl; rysuj( A,10); K.Grzelak (Wykład 1) Programowanie w C++ 5 / 37
Liczenie n! bez funkcji K.Grzelak (Wykład 1) Programowanie w C++ 6 / 37
Liczenie n! w funkcji K.Grzelak (Wykład 1) Programowanie w C++ 7 / 37
Liczenie n! rekurencyjnie K.Grzelak (Wykład 1) Programowanie w C++ 8 / 37
Przesyłanie argumentów do funkcji Poprzedni wykład Przesyłanie argumentów do funkcji przez wartość Przesyłanie argumentów do funkcji przez referencję Nowe Przesyłanie argumentów do funkcji przy użyciu wskaźników K.Grzelak (Wykład 1) Programowanie w C++ 9 / 37
Wskaźniki K.Grzelak (Wykład 1) Programowanie w C++ 10 / 37
Wskaźniki int *wsk; wsk jest wskaźnikiem do pokazywania na obiekty typu int adres w pamięci gdzie znajduje się dany obiekt K.Grzelak (Wykład 1) Programowanie w C++ 11 / 37
Wskaźniki co zrobić żeby wskaźnik na coś pokazywał? int *wski; int liczba=150; wski= &liczba; K.Grzelak (Wykład 1) Programowanie w C++ 12 / 37
Wskaźniki Wskaźniki pokazuja na obiekty konkretnego typu. int *wski; double *wskd; K.Grzelak (Wykład 1) Programowanie w C++ 13 / 37
Wskaźniki jak odczytać zawartość obiektu na który pokazuje wskaźnik char *wskc; char znak= A ; wskc= &znak; cout «Wskaźnik pokazuje na literę «(*wski) «endl; L-wartość (l-value) Możliwe przypisanie typu *wskc= C ; K.Grzelak (Wykład 1) Programowanie w C++ 14 / 37
Wskaźniki Przykładowy rezultat działania programu: wsk * 0xbfde1498 0xbfde149c numer & 0xbfde149c 855 K.Grzelak (Wykład 1) Programowanie w C++ 15 / 37
Do czego potrzebne sa wskaźniki Przesyłanie argumentów do funkcji (podobnie jak w przypadku referencji funkcja pracuje na oryginale obiektu) Dynamiczna rezerwacja pamięci Praca z tablicami... K.Grzelak (Wykład 1) Programowanie w C++ 16 / 37
Przesyłanie argumentów do funkcji Argumenty przesyłane przez referencje K.Grzelak (Wykład 1) Programowanie w C++ 17 / 37
Przesyłanie argumentów do funkcji Argumenty funkcji sa wskaźnikami K.Grzelak (Wykład 1) Programowanie w C++ 18 / 37
Przesyłanie argumentów do funkcji Przesyłanie prostych obiektów mniej wygodne niż przez referencje (w języku C nie ma referencji) Konieczne przy przesyłaniu tablic K.Grzelak (Wykład 1) Programowanie w C++ 19 / 37
Tablice K.Grzelak (Wykład 1) Programowanie w C++ 20 / 37
Tablice Definicja Tablica to ciag obiektów tego samego typu, zajmujacy ciagły obszar pamięci. Przykłady int tab1[100]; double rzecz[250]; int *twsk[15]; char znaki[10]; int tab2d[10][5]; K.Grzelak (Wykład 1) Programowanie w C++ 21 / 37
Tablice Przykład int tab[6]; Kolejne elementy tablicy to: tab[0], tab[1], tab[2], tab[3], tab[4], tab[5] Ważne! Numeracja tablicy zaczyna się od zera! Ostatni element n-elementowej tablicy ma numer n-1! K.Grzelak (Wykład 1) Programowanie w C++ 22 / 37
Tablice Ważne! Próba odwołania do nieistniejacego elementu tablicy powoduje katastrofę. K.Grzelak (Wykład 1) Programowanie w C++ 23 / 37
Inicjalizacja tablic Równoważne inicjalizacje int tab[6]={5,15,4,0,0,0}; int tab[6]={5,15,4}; int tab[]={5,15,4,0,0,0}; K.Grzelak (Wykład 1) Programowanie w C++ 24 / 37
Adres poczatku tablicy Ważne! Nazwa tablicy (np. tab) jest adresem w pamięci jej zerowego elementu. Równoważne zapisy: tab &tab[0] K.Grzelak (Wykład 1) Programowanie w C++ 25 / 37
Wskaźniki a tablice Wskaźnik można ustawić na dowolnym elemencie tablicy: int *wsk; int tab[10]; wsk=tab; wsk=&tab[5]; K.Grzelak (Wykład 1) Programowanie w C++ 26 / 37
Wskaźniki a tablice Przesuwanie wskaźnika Wskaźnik pokazujacy na kolejny element tablicy: wsk=wsk+1; lub wsk++ Dodanie liczby całkowitej n do wskaźnika powoduje że pokazuje on na element połozony n elementów dalej. K.Grzelak (Wykład 1) Programowanie w C++ 27 / 37
Wskaźniki a tablice Ważne! Wskaźnik pokazuje na obiekt konkretnego typu => wiedza o ile bajtów musi się przesunać. K.Grzelak (Wykład 1) Programowanie w C++ 28 / 37
Wskaźniki - arytmetyka Kolejne przykłady przesuwania wskaźników wsk++; wsk--; wsk=wsk+10; wsk=wsk-5; K.Grzelak (Wykład 1) Programowanie w C++ 29 / 37
Przesuwanie wskaźników - przykład K.Grzelak (Wykład 1) Programowanie w C++ 30 / 37
Przesuwanie wskaźników - wynik działania programu K.Grzelak (Wykład 1) Programowanie w C++ 31 / 37
Przekazywanie tablicy do funkcji Ważne! Tablicę przesyła się do funkcji podajac adres jej poczatku (i jej rozmiar). K.Grzelak (Wykład 1) Programowanie w C++ 32 / 37
Przekazywanie tablicy do funkcji - przykład Zapis z nawiasami kwadratowymi K.Grzelak (Wykład 1) Programowanie w C++ 33 / 37
Przekazywanie tablicy do funkcji - przykład Zapis wskaźnikowy K.Grzelak (Wykład 1) Programowanie w C++ 34 / 37
Przekazywanie tablicy do funkcji - przykład Zapis mieszany K.Grzelak (Wykład 1) Programowanie w C++ 35 / 37
Przekazywanie tablicy do funkcji - przykład Wszystkie trzy funkcje wywołuje się tak samo. K.Grzelak (Wykład 1) Programowanie w C++ 36 / 37
Na następnym wykładzie Tablice znakowe Tablice wielowymiarowe Dynamiczna alokacja tablicy Argumenty funkcji main... K.Grzelak (Wykład 1) Programowanie w C++ 37 / 37