Tematem przewodnim są podstawy programowania w języku Pascal. Informacje zawarte w notatce poruszają kwestie takie jak: wskaźniki struktury dynamiczne, stos, zastosowania stosu.
Dodatkowo można znaleźć przykłady zadań pomagających lepiej zrozumieć temat.
Podstawy Programowania semestr drugiWykład pierwszy1. Wska nź iki (przypomnienie)
Zmienna wska n
ź ikowa jest zmienną, która nie przechowuje bezpo r
ś ednio danej lecz adres komórki pamięci (lub pierwszej komórki z grupy
komórek), w której zawarta jest dana. Adres ten nazywany jest również wskaźnikiem, dowiązaniem lub odniesieniem. Często również o
zmiennej wskaźnikowej mówi się w skrócie „wskaźnik”. W j z
ę yku (Turbo) Pascal typ zmiennej wskaźnikowej możemy okre l
ś ić w następujący
sposób:
type wskaznik = ^typ_zmiennej;
gdzie typ_zmiennej mo e
ż okre l
ś ać zarówno prosty typ danych, jak i takie typy jak np.: tablica i rekord. Istnieje również typ zmiennej
wskaźnikowej, który nie okre l
ś a typu wartości na którą zmienna wskazuje pointer. Mając zdefiniowany typ możemy utworzyć zmienną typu
wskaźnikowego w następujący sposób:
var wsk:wskaznik;
Możemy to również uczynić w inny sposób (w praktyce może się on okazać mniej u y
ż teczny niż ten zaprezentowany powyżej):
var wsk:^typ_zmiennej;
Warto c
ś ią początkową zmiennej początkowej jest specjalna wartość oznaczająca, e
ż zmienna ta nie wskazuje na nic. W j z
ę yku Pascal nosi ona
nazwę NIL. Zanim będziemy mogli skorzystać ze zmiennej wskaźnikowej musimy przydzielić jej obszar pami c
ę i do której będziemy
zapisywać dane. Poniżej zostaną przedstawione procedury przydzielające i zwalniające pamięć stosownie do naszych potrzeb. Mo e
ż my jednak
sprawić, aby zmienna wska n
ź ikowa wskazywała na ten sam obszar pamięci na który wskazuje „zwykła” zmienna:
Operator „@”1 (wymawiamy jako „et”) odczytuje adres zmiennej globalnej „s” i zapisuje go w
1 program wskazniki;
zmiennej wskaźnikowej „w”, która ma wskazywać na wartość typu integer (wiersz 92), czyli takiegosamego typu jak wartość przechowywana w zmiennej „s”. Po odczytaniu tego na co wskazuje „w” i co
2 uses crt;
jest zapisane w zmiennej „s” okazuje się, że jest to ta sama wartość, co wi c
ę ej wystarczy
3 var
zmodyfikować to wartość dla którejkolwiek zmiennej, aby zmieniła się również dla drugiej zmiennej.
Dzieje się tak, ponieważ zmienna „w” wskazuje na obszar pamięci, z którym zwi z
ą ana jest zmienna
4 s:byte;
„s”. Zanim objaśnimy bliżej to zjawisko warto zwrócić uwagę na to w jaki sposób posługujemy się
zmienną wskaźnikową. Je l
(…)
… lokalne podprogramu oraz adres powrotu z programu. Pozwala to na wywoływanie podprogramów z wnętrza
innych podprogramów, a także na rekurencyjne wywołania podprogramu. W tym przypadku stos jest jednak obsługiwany sprzętowo i
programista nie musi go tworzyć samemu. Stos jest również używany przez translatory języków programowania (kompilatory i interpretery).
W edytorach tekstu struktura stosu może zostać…
… prostych
dynamicznych struktur danych zostały omówione w poprzednim semestrze, więc tutaj zostaną pominięte. Zmienne dynamiczne pozwalają
jednak tworzyć bardziej zaawansowane struktury, które nazywamy strukturami abstrakcyjnymi. Abstrakcyjny typ danej określa nie tylko zbiór
1
2
3
Zamiast tego operatora możemy użyć funkcji „addr”.
Numery wierszy nie są częścią kodu źródłowego!
Zarówno ilość pamięci…
…
dana
NIL
Procedura „dispose” oznacza jedynie pamięć w której jest zapisany element jako zwolnioną, natomiast nie niszczy zawartości tej pamięci, ani
nie zmienia wartości przechowywanej w zmiennej wskaźnikowej (wbrew temu, co pokazuje rysunek). Mimo, że po wywołaniu „dispose”
możliwe jest8 „sięgnięcie” do zwolnionego elementu, nigdy nie należy tego robić ! Taka operacja może w przypadku innych języków
programowania i bardziej zaawansowanych aplikacji okazać bardzo niebezpieczna i co gorsza trudna do wykrycia. Zmienna „bottom”,
podobnie jak zmienna „top” w procedurze „push” jest automatycznie niszczona po zakończeniu wykonania procedury. Aby procedura działała
poprawnie należy zadbać, aby przez parametr „x” nie miał wartości początkowej równej „NIL”. Taka wartość wskaźnika oznaczałaby
oczywiście…
... zobacz całą notatkę
Komentarze użytkowników (0)