Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Podobne dokumenty
Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Lab 9 Podstawy Programowania

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Wskaźniki. Informatyka

Programowanie w Turbo Pascal

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Struktury, unie, formatowanie, wskaźniki

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Zmienne i struktury dynamiczne

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Język programowania PASCAL

Pascal - wprowadzenie

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Lekcja 6: Pascal. Procedura i funkcja

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Warsztaty dla nauczycieli

Podstawy programowania

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Języki i metodyka programowania. Wskaźniki i tablice.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Tablice. Jones Stygar na tropie zmiennych

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

6 Przygotował: mgr inż. Maciej Lasota

Wykład PASCAL - Pliki tekstowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Adam Kotynia, Łukasz Kowalczyk

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Podstawy Programowania C++

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

W dowolnym momencie można zmienić typ wskaźnika.

Kurs Pascala LO Biecz 2010/2011. Kurs Pascala oparty na zadaniach i problemach z lekcji Informatyki.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Pliki. Operacje na plikach w Pascalu

Wykład 1: Wskaźniki i zmienne dynamiczne

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy programowania skrót z wykładów:

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

1 Podstawy c++ w pigułce.

KURS C/C++ WYKŁAD 6. Wskaźniki

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Podstawy Programowania

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Tworzenie własnych komponentów

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

Wstęp do programowania 2

Zajęcia 6 wskaźniki i tablice dynamiczne

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

Zasady programowania Dokumentacja

r. Tablice podstawowe operacje na tablicach

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Laboratorium 10: Maszyna stanów

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Programowanie komputerowe. Zajęcia 3

Ada-95. Dariusz Wawrzyniak

Informatyka 1. Przetwarzanie tekstów

Stałe, tablice dynamiczne i wielowymiarowe

Pascal_cwiczenia_do_ksiazki_helionu_32_6 wykonał Tomasz Roszczyk

Inicjacja tablicy jednowymiarowej

Transkrypt:

Instrukcja laboratoryjna 1 Podstawy programowania 2 Temat: Wprowadzenie do wskaźników Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Rysunek przedstawia najważniejszą różnicę pomiędzy zmiennymi, a wskaźnikami: zmienna przechowuje dane (bezpośrednio wskazuje na komórkę w pamięci z danymi), natomiast wskaźnik przechowuje adres w pamięci, za pomocą którego można uzyskać dostęp do danych. To, jak zostaną rozpoznane dane znajdujące się pod tym adresem, zależy od zadeklarowanego typu wskaźnika (istnieje możliwość zmiany rozpoznawanego typu za pomocą rzutowania, jednak nie będziemy się tym na razie zajmowali). 1.1 Deklarowanie wskaźników Wskaźniki deklaruje się bardzo podobnie jak zwykłe zmienne - w celu utworzenia wskaźnika wystarczy poprzedzić typ znakiem ^ : nazwawskaźnika : ^typ; W celu uzyskania dostępu do wartości, która znajduje się pod wskazywanym przez wskaźnik adresem, należy użyć znaku ^ za wskaźnikiem. Dostęp taki pozwala zarówno na odczyt, jak i modyfikację. Przykładowo, wskaźnik typu integer można zadeklarować następująco:

Natomiast odczytanie wartości i wyświetlenie jej na ekranie może zostać napisane następująco: writeln( 'Wartosc odczytana przez wskaznik: ', wskaznik^ ); 1.2 Wskaźniki i zmienne Wskaźniki mogą wskazywać na zmienne deklarowane standardowo (w sekcji ) oraz na zmienne dynamiczne (tworzone w trakcie działania programu), z którymi najczęściej są wykorzystywane. Aby powiązać wskaźnik ze zwykłą zmienną, wystarczy przypisać do niego adres tej zmiennej. Adres zmiennej można uzyskać poprzedzając zmienną znakiem @. przykład: liczba : integer; {...} wskaznik := @liczba; writeln('liczba odczytana przez wskaznik: ', wskaznik^ ); {...} Początkowo taki sposób dostępu do danych może wydawać się niepotrzebnym utrudnieniem, jednak jak się zaraz okaże może być przydatny. Przykład 1. Wskaźnik może być przydatny, gdy chcemy zdecydować podczas działania programu, którą zmienną przetwarzać bez niepotrzebnego kopiowania tego samego kodu dla każdej zmiennej. Alternatywnym rozwiązaniem jest użycie dodatkowej zmiennej (która przechowa wartość do przetworzenia), jednak nie jest zalecane ze względu na większe zużycie pamięci i konieczność ponownego przypisania wartości do właściwej zmiennej. program przyklad1; a,b,c : integer; wybor : char; Kod z użyciem wskaźnika write('podaj wybor (a, b lub c): '); readln(wybor); a:=1; b:=2; c:=3; wskaznik:=@a; case wybor of 'a': wskaznik:=@a; 'b': wskaznik:=@b; 'c': wskaznik:=@c; program przyklad1; a,b,c : integer; wybor : char; Kod bez użycia wskaźników write('podaj wybor (a, b lub c): '); readln(wybor); a:=1; b:=2; c:=3; case wybor of 'a': writeln('wybrano liczbe: ', a); a:=2-a; a:=sqr(a); writeln('liczba po przeksztalceniach: ', a);

writeln('wybrano liczbe: ', wskaznik^); wskaznik^:=2-wskaznik^; wskaznik^:=sqr(wskaznik^); writeln('liczba po przeksztalceniach: ', wskaznik^); readln; 'b': writeln('wybrano liczbe: ', b); b:=2-b; b:=sqr(b); writeln('liczba po przeksztalceniach: ', b); 'c': writeln('wybrano liczbe: ', c); c:=2-c; c:=sqr(c); writeln('liczba po przeksztalceniach: ', c); readln; Przykład 2. Przekazywanie przez parametr w procedurach i funkcjach odpowiednik słowa kluczowego (w większości języków jest to jedyny sposób na stworzenie odpowiednika słowa ). program przyklad2; type Pinteger = ^integer; liczba : integer; procedure dodajdziesiec( wskliczba : Pinteger ); wskliczba^:= wskliczba^ + 10; liczba:=2; writeln('liczba = ', liczba); dodajdziesiec(@liczba); writeln('liczba = ', liczba); readkey; 1.3 Wskaźniki i zmienne dynamiczne. Zmienne dynamiczne są zmiennymi tworzonymi w trakcie działania programu, w dowolnym momencie jego działania. Ich utworzenie zazwyczaj jest związane z akcją użytkownika lub określonym stanem programu, co powoduje że trudno jest użyć zwykłych zmiennych. Często są związane również z dużymi danymi, które nie mogą zostać utworzone w Pascalu w zwykły sposób (właśnie z powodu rozmiaru) lub gdy niezbędna jest większa kontrola nad zużyciem pamięci.

Utworzenie zmiennej dynamicznej odbywa się za pomocą procedury New(wskaźnik), która przydziela aplikacji odpowiedni fragment pamięci, a następnie zapisuje jej adres w podanym jako parametr wskaźniku. Wielkość przydzielonej pamięci zależy od typu wskaźnika. Bardzo ważne jest, aby później taki fragment pamięci zwolnić za pomocą procedury Dispose(wskaźnik), ponieważ w przeciwnym wypadku może dojść do tzw. wycieku pamięci 1. Wycieki pamięci polegają na niezwalnianiu całej przydzielonej pamięci, co przy dużej liczbie alokacji może spowodować całkowite zapełnienie pamięci dostępnej dla programu. W celu wykrywania takich błędów przydatna jest zdefiniowana w Pascalu stała o nazwie MemAvail, wyświetlająca ilość wolnej pamięci. Przykład: Program przyklad3; uses CRT; clrscr; New(wskaznik); Dispose(wskaznik); readkey; Wynik działania: {wyczyszczenie ekranu} {wolna pamięć przed alokacją} {alokacja pamięci} {wolna pamięć po alokacji} {zwolnienie przydzielonej pamięci} {wolna pamięć pod koniec programu} Jak widać powyżej, ilość wolnej pamięci zmniejszyła się po utworzeniu zmiennej dynamicznej, natomiast po jej usunięciu wróciła do poprzedniej wartości. 2 Zadania Zadanie 1. Wypisz liczbę wolnej pamięci (w bajtach). Zadanie 2. Napisz program, w którym za pomocą wskaźnika zmienisz wartość zmiennej (tego samego typu). Wyświetl wyniki na każdym etapie działania programu. 1 Więcej pod adresem: http://pl.wikipedia.org/wiki/wyciek_pami%c4%99ci

Zadanie 3. Napisz program, w którym: a) utworzysz zmienną typu Real (nazwijmy ją zmiennareal) i przypiszesz jej dowolną wartość rzeczywistą, np.: zmiennareal:=1.5; utworzysz wskaźnik typu integer (wsk), który wskazuje na zmiennareal wyświetlisz zawartość zmiennareal wyświetlisz zawartość wsk^ do wsk przypiszesz dowolną liczbę integer, np.: wsk^:=10; wyświetlisz zawartość zmiennareal wyświetlisz zawartość wsk^ co można było zauważyć? b) utworzysz zmienną o nazwie znak typu char i przypiszesz do niej dowolną literę (lub inny znak drukowalny) utworzysz wskaźnik o nazwie wskznak typu byte, który wskazuje na znak wyświetlisz zawartość znak oraz zawartość wskznak do wskznak przypiszesz dowolną liczbę z przedziału od 33 do 126 wyświetlisz zawartość znak oraz zawartość wskznak co można było zauważyć? Zadanie 4. Napisz program, który utworzy dwie tablice, każda typu integer indeksowana od 1 do 30000 (rozmiar 60000 bajtów). Spróbuj najpierw utworzyć je jako zwykłe zmienne, a następnie jako zmienne dynamiczne. Wskazówka: zadeklaruj typ tablicowy. Zadanie 5. Napisz procedurę, która będzie dynamicznie tworzyła rekord wizytówki (imię, nazwisko, telefon, e- mail) z wartości podanych jako parametry. Równocześnie procedura ma zwracać poprzez parametr wskaźnik na nowo utworzony rekord (bez wykorzystania słowa w parametrze).