IWP JP2 Lab3

background image

J

ęzyki

P

rogramowania i

S

ystemy

O

peracyjne

2

–– I N Ż Y N I E R I A W I R T U A L N A P R O J E K T O W A N I A ––

Lab. 3: Fortran 95 - Wskaźniki

1. Wprowadzenie

Wskaźnik (ang. Pointer) można interpretować jako odnośnik do adresu w pamięci komputera, gdzie

przechowywana jest wskazywana zmienna. Użycie wskaźników ułatwia implementację dynamicznych
struktur danych takich jak listy, drzewa i stosy. Przekazywania danych do procedur/funkcji w postaci
wskaźników zmniejsza wymagania pamięciowe komputera (zmienne nie są deklarowane dwukrotnie).

Z użyciem wskaźników możliwe jest także zadeklarowanie tablicy, której elementami będą tablice o

różniących się rozmiarach.

2. Deklaracja wskaźnika i powiązanie ze zmienną

W języku Fortran wskaźników nie traktuje się jako osobnego typu danych, ale jako właściwość innych

typów. Oznacza to, że deklarując wskaźnik należy określić, na jaki typ zmiennej będzie wskazywał, np.

integer, pointer

:: p1

real*8, dimension(:), pointer

:: p

Po zadeklarowaniu, wskaźnik musi zostać powiązany ze zmienną z użyciem polecenia

=>

.

Wskazywana zmienna musi być tego samego typu i mieć atrybut

target

), np.:

real*8, dimension(:), pointer

:: p

real*8, target

:: x(2)=1.0, y(4)=2.0

p => x
write(*,

'(5F8.4)'

) p

!wynik:

1.0000 1.0000

p => y(1:3)
write(*,

'(5F8.4)'

) p

!wynik:

2.0000 2.0000 2.0000

y(1)= 2.5

p(2)= 2.1
write(*,

'(5F8.4)'

) p

!wynik:

2.5000 2.1000 2.0000

W powyższym przykładzie w zależności na co wskazuje

p

, wyświetlane będą wszystkie elementy

tablicy

x

lub pierwsze trzy elementy tablicy

y

. Zmiana wartości wskazywanej zmiennej nie wymaga

ponownego przypisania wskaźnika, zaś przypisywanie wartości

p

powoduje zmianę wskazywanej

zmiennej.

Wskaźnik może nie być powiązany z żadną zmienną. Aby to uzyskać, stosuje się polecenie

nullify

,

np.

if (associated(p)) nullify(p)

Funkcja

associated

zwraca wartość

.true.

jeżeli wskaźnik jest powiązany ze zmienną. Ponieważ po

zadeklarowaniu wskaźniki znajdują się w stanie niezdefiniowanym, zaleca się użycie funkcji

nullify

na

początku programu.

Uwaga: jeżeli wskaźnik wskazywał na tablicę alokowaną dynamicznie, która uległa zwolnieniu, jego
użycie może prowadzić do błędów działania programu.

© Witold Stankiewicz, 2011

1/2

background image

J

ęzyki

P

rogramowania i

S

ystemy

O

peracyjne

2

–– I N Ż Y N I E R I A W I R T U A L N A P R O J E K T O W A N I A ––

3. Przekazywanie danych do podprogramów z użyciem wskaźników

Przykład przedstawia przekazanie niezaalokowanej zmiennej typu

integer

do procedury, wewnątrz

której następuje przydzielenie pamięci.

program wskazniki1
interface

subroutine procedura(id1)

integer, dimension(:), pointer

:: id1

end subroutine sub
end interface

integer, dimension(:), pointer

:: id

call procedura(id)

! Po wywołaniu procedury wskaźnik id wskazuje na to samo

end

! miejsce w pamięci, co id1

subroutine procedura(id1)
implicit none

integer, dimension(:), pointer

:: id1

integer

n

! ...

read(7,*) n

allocate (id1(n))

! wskaźnik id1 wskazuje na miejsce w pamięci, gdzie

end subroutine procedura

! znajduje się tablica (bez nazwy) o rozmiarze n

Uwaga: jeżeli procedura zostanie wywołana ponownie, poprzednio zarezerwowana pamięć stanie
się niedostępna, ale nie ulegnie zwolnieniu – co może prowadzić do zajęcia całej dostępnej pamięci
komputera.

4. Tablica tablic

Używając własnych struktur wykorzystujących wskaźniki, możliwe jest stworzenie tablicy

x

(o roz-

miarze

n

), której elementami są inne tablice (o rozmiarze

m

), np.

type

:: wtab

real*8, dimension(:), pointer

:: element

end

type

wtab

type(wtab), allocatable

:: x(:)

integer

m,n

!...

allocate(x(n))
do i = 1,n

m=i+1
allocate(x(i)%element(m))

end do

4. Zadanie

Przetestować podane przykłady. Napisać podany przez prowadzącego program.

5. Literatura

1) Clive Page. Fortran90 for Fortran77 Programmers.

http://www.star.le.ac.uk/~cgp/f90course/f90.html

2) Dariusz Chrobak. Fortran praktyka programowania. MIKOM PWN, 2003. ISBN 83-7279-361-1
3) Janusz R. Piechna. Programowanie w języku Fortran 90 i 95. Oficyna Wydawnicza Politechniki

Warszawskiej, 2000. ISBN 83-7207-225-6

4) Maciej Zadora, Mariusz Zając. Komputerowe Symulacje Numeryczne Fortran 95.

http://fatcat.ftj.agh.edu.pl/~majozo/paper.pdf

5) Dokumentacja na serwerze dydaktycznym

http://stanton.ice.put.poznan.pl/student/

© Witold Stankiewicz, 2011

2/2


Wyszukiwarka

Podobne podstrony:
IWP JP2 Lab2 Struktury
IWP JP2 Lab1
IWP JP2 Lab2 Struktury
lab3
lab3 kalorymetria
Instrukcja Lab3
lab3 6
lab3
sprawko z lab3 z auto by pawelekm
Lab3 zadanie 2 schemat organizacyjny
jp2
Lab3 KWW KT
IWE IWP 4 09
IWE IWP 2 5 2012
Podstawy Robotyki lab3 id 36832 Nieznany
Architekrura Systemów Lab3
Lab3 Cpp GPS opis
IWE IWP 4 6 2012

więcej podobnych podstron