Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje Grupa: 1A Prowadzący: Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Wydział Odlewnictwa Akademia Górniczo – Hutnicza im. Stanisława Staszica Kraków, 29-11-2012
15 zajęć laboratoryjnych Kalendarium zajęć 15 zajęć laboratoryjnych 11-10: Organizacyjne. 18-10: Typy, operatory, instrukcje warunkowe. 25-10: Pętle (zajęcia powtórkowe). 01-11: Wszystkich świętych 08-11: Pętle. 15-11: Tablice i operacje na nich. 22-11: Funkcje, deklaracja, argumenty 29-11: Wskaźniki i referencje. 06-12: Rekurencja i rekurencja. 13-12: String – jako tablica char’ów 20-12: Operacje IO – obsługa strumieni. 27-12: Święta 03-01: Wyjątki – idea i obsługa. 10-01: Struktury – idea i obsługa. 17,24-01: Uzupełnienie materiału + zaliczenia
Funkcje::Deklaracja, definicja użycie Definicja funkcji: typ_zwracany nazwa_funkcji( argumenty ); Deklaracja funkcji: typ_zwracany nazwa_funkcji( argumenty ) { ciało funkcji }; Funkcja jest to część programu, która możemy wywołać w kodzie programu poprzez podanie jej nazwy w programie oraz poprzez (opcjonalne) przekazanie argumentów do funkcji. Uwaga! Możliwa jest jednoczesna deklaracja z definicja funkcji, ale musi się ona odbyć przed użyciem funkcji w kodzie Przekazywanie argumentów do funkcji jest opcjonalne. Możliwe jest również przekazywanie kilku argumentów jednocześnie. By to zrobić należy rozdzielić jest przecinkami. Przykład: int funkcja(int arg1, int arg2);
Funkcje::Przeładowanie Może istnieć zdefiniowanych wiele funkcji o tej samej nazwie z różną liczbą argumentów jednak ich deklaracja ma być jednoznaczna!
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 Operacja Wskaźnik Referencja Zmienne bezpośrednie int a, b; Deklaracja bez inicjalizacji int *wskaznik; - BRAK - Deklaracja z inicjalizacją int *ptr = &a; Int &ref = a; Zmiana zmiennej wskazywanej ptr = &b;
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];
Zadania 0 – nie oceniane Napisz prosty kalkulator (dodawanie, odejmowanie, mnożenie, dzielenie, modulo) wykorzystujący funkcje. Funkcje obliczające wartości powinny być typu zwracającego, Wyniki wyświetl na ekran, Parametry do funkcji przekaż jako: Zmienne Wskaźniki Referencje
Zadania 1 Napisz program wczytujący z klawiatury zmienną, a następnie przekaż tą zmienną do funkcji jako argument i wykonaj na niej operację zmieniającą jej wartość. Wynik zwróć do zmiennej. Po wyjściu z funkcji wyświetl wynik działania funkcji oraz zmienną przekazaną do funkcji. Wykonaj to samo zadanie przekazując do funkcji referencję do zmiennej.
Zadania 2 Napisz program, który generuje 2 wektory statyczne o zadanym stałym rozmiarze (użyj „const rozmiar = … ;”), a następnie napisz następujące funkcje: Dodawanie wektorów, Odejmowanie wektorów, Zwracanie wartości mniejszej z tych wektorów. Funkcje powinny mieć osobne nazwy i umożliwiać zwracanie wektora. Napisz funkcję „void wypisz()”, która umożliwi wyświetlanie wektorów.
Zadanie 3 Napisz program, który utworzy tablicę 3x3 i uzupełni je losowymi wartościami tylko na pierwszej przekątnej, pozostałe wartości mają wynosić 0. Następnie funkcję, która obliczy wskaźnik tej macierzy wiedząc, że: detA = tab[0][0]*tab[1][1]*tab[2][2];