140 likes | 302 Views
Podstawy informatyki. Prowadzący: Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo – Hutnicza im. Stanisława Staszica Kraków, 19-11-2013. Wskaźniki - inicjalizacja.
E N D
Podstawy informatyki Prowadzący: Grzegorz Smyk Wydział Inżynierii Metali i Informatyki PrzemysłowejAkademia Górniczo – Hutnicza im. Stanisława StaszicaKraków, 19-11-2013
Wskaźniki - inicjalizacja • Wskaźnik – zmienna wskaźnikowa – w której zapisywany jest nie obiekt, a adres komórki pamięci, inicjalizowana jest przez dodanie „*” przed nazwą zmiennej; • Dzięki wskaźnikom możemy przechowywać np. adres innej zmiennej oraz umożliwić bezpośredni dostęp do tej zmiennej.
Referencja • Typ referencyjny jest połączeniem funkcjonalności typu wskaźnikowego ze składnią typu bezpośredniego • Definicja zmiennej typy referencyjnego tworzona jest przez dodanie symbolu „&” przez nazwą zmiennej typu wskaźnikowego.
Wskaźniki i referencje - przykład • Przykładowy program przedstawiający wykorzystanie wskaźników i referencji w przekazywaniu argumentów do funkcji. Linijka 11: a = 5, b = 7; Linijka 12: przekazanie obiektów do funkcji – brak rezultatów poza funkcją Linijka 14: przekazanie wartości obiektów do funkcji operującej na wskaźnikach – zamiana wartościami a i b poza funkcją Linijka 16: przekazanie referencji obiektów do funkcji – ponowna zamiana wartości zmiennych poza funkcją
Wskaźniki vs tablice Zapis: int tab[10] jest interpretowany jako ustalony wskaźnik na początek (pierwszy element) tablicy. Wywołanie samego tab zwróci nam adres pierwszego elementu w tablicy, a nie jego wartość; Zapis:int * p; p = tab; Jest równoznaczny z: p = &tab[0];
Wskaźniki vs tablice Nazwa tablicy jest wskaźnikiem na adres jej pierwszego elementu. int *wsk = tab; Zmienne wskaźnikowe można przesuwać, więc zapis tab[0] = 0; tab[1] = 1; … tab[9] = 9; Jest równoznaczny z: *wsk = 0; *(wsk+1) = 1; … *(wsk+9) = 9;
Tablice dynamiczne Istnieje możliwość dynamicznej alokacji pamięci dla tablicy przy wykorzystaniu wskaźników. Generujemy wtedy tablicę o zalokowanej pamięci o zadanym rozmiarze. Istnieje możliwość zrobienia też dynamicznej tablicy wielowymiarowej, generuje się wtedy tablicę wskaźników na wskaźniki. int** tab = new int*[a];
Rekurencja „Aby zrozumieć rekurencję należy najpierw zrozumieć rekurencję” Rekurencja jest sposobem programowania, w którym procedury wywołują same siebie. Cechą charakterystyczną jest to, funkcja wchodzi w kolejny poziom, aby obliczyć iloczyn podanego jej parametru oraz wartość (parametr-1). Dopiero w momencie powrotu z wywołań obliczane są rzeczywiste iloczyny, i wtedy też przeliczana jest wartość silni.
Rekurencja - niebezpieczeństwa „Aby zrozumieć rekurencję należy najpierw zrozumieć rekurencję” Rekurencja jest sposobem programowania, w którym procedury wywołują same siebie. Problemem jest warunek stopu, bez odpowiednio zadanego algorytm będzie wykonywać się w nieskończoność.
Zadanie 1 Napisz program, który przy pomocy twórz funkcji utworzy tablicę 1D, następnie przy pomocy funkcji uzupełni wypełni ją kolejnymi elementami ciągu Fibonacciego. Ilość elementów ma być podana z klawiatury i przekazana do funkcji jako parametr. Po wyświetleniu tablicy usuń ją z pamięci komputera.
Zadanie 2 Napisz program, który zawiera w sobie dwie tablice wielowymiarowe 1D[10] i 2D[5][5]. Uzupełnij je kolejnymi indeksami, a następnie napisz funkcje z przeładowaniem, która wypisze przekazaną do niej macierz. Funkcje mają nazywać się tak samo, różnią się tylko przekazywanymi argumentami.
Zadanie 3 Napisz program, w którym w funkcji zostanie utworzona tablica dwuwymiarowa. Napisz funkcję która uzupełni tą tablicę wg schematów: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13
Zadanie 4 Napisz program, który oblicza miejsca zerowe w funkcji kwadratowej. Argumenty współczynniki do funkcji przekaż w postaci tablicy. W zależności od ilości możliwych rozwiązań wywołaj odpowiednią funkcję liczącą miejsca zerowe. Zastosuj przeładowanie funkcji.