Podstawy informatyki Powtórka 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, 6-12-2012
Kalendarium zajęć 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 (zajęcia powtórkowe). 13-12: Rekurencja i rekurencja. 20-12: String – jako tablica char’ów 27-12: Święta 03-01: Operacje IO – obsługa strumieni. 10-01: Wyjątki – idea i obsługa. 17-01: Struktury – idea i obsługa. 24-01: Uzupełnienie materiału + zaliczenia
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];
Zadanie 1 - pętle Napisz program, który przy pomocy dowolnej pętli oblicza dwudziesty element ciągu arytmetycznego: a(n+2) = 3*a(n+1)^2 – 4*a(n) + 3; dla: a(0) = 0; a(1) = 5;
Zadanie 2 – tablice i operacje Na podstawie poprzedniego zadania zapisz wybraną z klawiatury ilość elementów do tablicy. utwórz dynamiczną tablicę o zadanym rozmiarze operuj na wartościach tablicy, a nie na zmiennych!
Zadanie 3 – funkcje Na podstawie programu z poprzedniego zadania obliczanie kolejnego elementu umieść w funkcji, tak by każdy kolejny element ciągu był wynikiem zwracanym przez funkcje. Funkcja ma być trybu zwracającego Funkcja zwraca bezpośrednio do tablicy kolejny element ciągu
Zadanie 4 – Wskaźniki i referencja Na podstawie programu z poprzedniego zadania zmodyfikuj funkcję w taki sposób by przekazywany był wskaźnik dwie pierwsze wartości (zmienne): Przekaż całą tablicę do funkcji, Funkcja zwraca tablicę Wykorzystaj fakt, że nazwa tablicy jest wskaźnikiem na jej pierwszy element
Zadanie 5 – Wskaźniki i referencja Napisz funkcję, która wyświetli wszystkie elementy w tablicy (przekaż ją jako wskaźnik do funkcji) w formacie: element 1 = wartość element 2 = wartość …