IWP JP2 Lab2 Struktury

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. 2: Fortran 95 - Struktury

1. Wprowadzenie

Struktury oznaczają nowe, zdefiniowane przez użytkownika (programistę), złożone typy zmiennych.

Składają się one z dowolnej liczby zmiennych o typach zadeklarowanych wcześniej (np. liczb całkowitych
i zmiennoprzecinkowych, łańcuchów tekstowych), pogrupowanych w jednym obszarze pamięci.

2. Deklaracja nowego typu zmiennej (struktury)

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

type

:: target_type

character(15)

:: name ! name of object

real

:: ra, dec ! celestial coordinates, degrees

integer

:: time ! exposure time requested, secs

end type

target_type

type (target_type)

:: old_target, new_list(30

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

© 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 ––

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.

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 Lab1
IWP JP2 Lab3
Instrukcja IEF Algorytmy i struktury danych lab2
Instrukcja IEF Algorytmy i struktury danych lab2
STRUKTURA TRENINGU
30 Struktury zaleznosci miedzy wskaznikami zrow rozw K Chmura
rodzaje struktur rynkowych 2
Struktura regionalna
struktura organizacyjna BTS [ www potrzebujegotowki pl ]
Struktura treningu sportowego (makrocykl) szkoła PZPN
Struktura podmiotowa i przedmiotowa gospodarki
STRUKTURA I FUNKCJONOWANIE GN
Strukturalizm i stylistyka (część II)
Struktura ludności w Polsce

więcej podobnych podstron