Podstawy Programowania 2 wykład 1 - Pascal

Nasza ocena:

3
Pobrań: 42
Wyświetleń: 1442
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Podstawy Programowania 2 wykład 1 - Pascal - strona 1

Fragment notatki:

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)

Zaloguj się, aby dodać komentarz