sprawozdanie programowanie lab1

Politechnika Świętokrzyska w Kielcach Wydział Elektrotechniki, Automatyki i Informatyki
Laboratorium Podstaw Programowania 2
Lab. nr 1

Data wykonania ćwiczenia :

01.03.2012

1.Przemysław Wolski
  1. Wstęp teoretyczny

Wskaźniki to adresy pamięci, które pokazują komputerowi miejsce gdzie znajdują się jakieś dane. Możesz przykładowo przechowywać w pamięci wskaźnik na obrazek bitmapowy, podczas gdy przechowywanie obrazu w tablicy byłoby niezbyt praktyczne. Pamięć do której odnoszą się wskaźniki można w każdej chwili zwalniać, deklarować i zmieniać.

Bez wskaźników nie byłoby możliwe nieograniczone tworzenie nowych danych, np. w słowniku. Gdyby nie wskaźniki mielibyśmy z góry określoną liczbę słów, które słownik byłby w stanie zapamiętać. W grach komputerowych, liczba ludzików, zbudowanych elementów w strategii, zawsze byłaby z góry ograniczona. Nie moglibyśmy w systemie uruchomić większej liczby programów niż zaplanowano.

Wskaźniki mogą wskazywać na dowolny obszar pamięci, a adres ten można zmieniać. Są pomocne podczas alokacji pamięci. Kiedy chcemy ją zadeklarować w czasie trwania programu, funkcja GetMem zwraca nam właśnie wskaźnik -czyli miejsce gdzie będziemy mogli wpisywać swoje dane. Gdybyśmy spróbowali wpisać swoje dane bez wcześniejszego zarezerwowania pamięci, w najlepszym wypadku zakończyłby się nasz program, w gorszym zawiesilibyśmy komputer.

Ze względu na ryzyko zawieszenia programu wskaźniki są traktowane jako typy, które należy umiejętnie stosować. Wskaźniki na ogół zbudowane są z 4 bajtów. Pierwsze 2 określają segment danych, kolejne 2 ofset.

Typ wskaźników nazywa się pointer. Gdy jakąś zmienną zadeklarujemy jako poiner, będzie ona wskaźnikiem. Wskaźniki mogą adresować różne typy zmiennych. Mogą adresować liczby, napisy, tablice, itd. Gdy adresują konkretny typ, nie deklaruje się ich jako pointer, tylko tworzy swój własny typ

  1. Pomocne instrukcje.

• new

• dispose

• getmem

• freemem

• mark

• release

• adr

• @

• memavail

  1. Przebieg Laboratium.

Zadanie 1:

Zadeklarować zmienną wskaźnikową w na typ integer i zainicjalizować ją adresem

zmiennej statycznej a = 123 i wyświetlić zawartość zmiennej a na ekran za pomocą zmiennej statycznej i wskaźnikowej. Czy wyniki będą takie same? (1 pkt)

Ilustracja 1. Zrzut ekranu przedstawiający kod programu nr 1.

Ilustracja 2. Zrzut ekranu przedstawiający wynik działania programu nr 1.

Czy wyniki będą takie same?

- tak, gdyż wskaźnik w wskazuje na zmienną a.

Zadanie 2:

Do zmiennej a z zadania 1 dodaj liczbę 2 i ponownie wyświetl zawartość zmiennej

a korzystając ze zmiennej statycznej i wskaźnikowej. Jaki jest wynik? (1 pkt)

Ilustracja 3. Zrzut ekranu przedstawiający kod programu nr 2.

Ilustracja 4. Zrzut ekranu przedstawiający wynik działania programu nr 2.

Jaki jest wynik?

- wartość zmiennej uległa zmianie a więc i zmieniła się wartość wskaźnika.

Zadanie 3:

Do zmiennej wskazywanej przez w z zadania 1 dodaj liczbę 3 i ponownie wyświetl

zawartość zmiennej a korzystając ze zmiennej statycznej i wskaźnikowej. Jaki jest wynik? (1 pkt)

Ilustracja 5. Zrzut ekranu przedstawiający kod programu nr 3.

Ilustracja 6. Zrzut ekranu przedstawiający wynik działania programu nr 3 .

Jaki jest wynik?

- wartość wskaźnika uległa zmianie a więc i zmieniła się też wartość zmiennej.

Zadanie 4:

Zadeklarować zmienne wskaźnikowe: w na word, oraz i na integer. Zainicjalizować

zmienną w wartością 45000. Zmiennej i przypisz zmienną w. Odczytaj wartości obydwu zmiennych. Jakie otrzymaliśmy wyniki? Dlaczego? (2 pkt)

Ilustracja 7. Zrzut ekranu przedstawiający kod programu nr 4.

Ilustracja 8. Zrzut ekranu przedstawiający wynik działania programu nr 4.

Jakie otrzymaliśmy wyniki? Dlaczego?

- zakres integer różni się od zakresu Word. Integer reprezentuje wartości będące w zakresie od -32768 do +32767 natomiast Word od 0 do 65535. Więc licznik się przekręca.

Zadanie 5:

• Zdefiniować typ rekordowy złożony z typów (word, int, char, string)

• Zadeklarować zmienną wskaźnikową na stworzony typ rekordowy

• Zarezerwować pamięć dla danego rekordu i wypełnić go przykładowymi danymi

• Wyświetlić dane z rekordu na ekran

• Zwolnić pamięć zarezerwowaną wcześniej

• Sprawdzić „wycieki pamięci” za pomocą funkcji memAvail (3 pkt)

Ilustracja 9. Zrzut ekranu przedstawiający 1 część kodu programu nr 5.

Ilustracja 10. Zrzut ekranu przedstawiający 2 część kodu programu nr 5.

Ilustracja 11. Zrzut ekranu przedstawiający 3 część kodu programu nr 5.

Ilustracja 12. Zrzut ekranu przedstawiający wynik działania programu nr 5.

Funkcja memAvail zwróciła takie same wartości a wiec nie było wycieku pamięci.

  1. Wnioski

Bardzo ważną i pożyteczną cechą zmiennych wskazywanych jest możliwość ich tworzenia i niszczenia w zależności od potrzeb. Wymaga to co prawda użycia specjalnych procedur, pozwala jednak na znacznie bardziej efektywną gospodarkę pamięcią. W odróżnieniu od statycznych zmiennych globalnych, istniejących przez cały czas wykonywania programu, zmienne wskazywane należą do klasy zmiennych dynamicznych (czyli istnieją dokładnie wtedy, gdy życzy sobie tego programista).


Wyszukiwarka

Podobne podstrony:
sprawozdanie programowanie lab3
sprawozdanie programowanie lab20 fin
8 zalacznik 5 sprawozdawczosc w programach EUWT i EISiP
sprawozdanie programowanie lab4 fin
sprawozdanie programoweanie lab7 fin2
Gotowiec Sprawozdanie PTEL LAB1 1
lrm sprawozdanie kck lab1 id 27 Nieznany
sprawozdanie programowanie lab2
sprawozdanie programowanie lab5 fin
programowanie lab1
sprawozdanie programowanie lab11 fin
sprawozdanie programowanie lab3 fin2
program lab1 1JP3
sprawozdanie programowanie lab9 fin2
sprawozdanie programowanie lab4
sprawozdanie programowanie lab8
programowanie lab1
Sprawozdanie z Programowania wsp¢ˆbie¾nego doc

więcej podobnych podstron