Upload
others
View
13
Download
0
Embed Size (px)
Citation preview
Složene vrste podataka« Numeričke metode »
Ivo Batistić
Fizički odsjek, PMFSveučilište u Zagrebu
predavanja 2005/2006
Pregled predavanjaKompleksni brojeviParameternaredba IMPLICITNiz podataka
DeklaracijaIniciranje vrijednosti elemenataIzdvajanje pojednih elemenataRaspored niza u memoriji računalaNumeričke operacije na nizovimaAgregatne operacijeMatrične operacijeOdgod̄ena/naknadna rezervacije memorijeOblik nizaFunkcija RESHAPEO indeksima nizovaFunkcije oblika nizaVektorski indeksiWHERE naredba
Izvedeni tipovi podatakaPokazivači i mete
Kompleksni brojevi
◮ Kompleksni brojevi na računalu se prikazuju par realnih brojevakoji se posebno tretiraju u numeričkim operacijama. Pri tomeRealni brojevi mogu biti jednostruke, dvostruke ili četverostrukepreciznosti.
◮ Kompleksni broj se može zadati preko para realnih brojeva uokruglim zagradama:
COMPLEX (KIND=8) :: c,d,e !» u f77 COMPLEX*16 c !c = (1.0_8,-5.3D+2)d = CMPLX(-2.0) ! (-2.0_8,0.0_8)e = CMPLX(0.0,1.0) ! (0.0_8,1.0_8)d = e*d ! (0.0_8,-2.0_8)PRINT *,d
Kompleksni brojevi
◮ Par realnih brojeva može se konvertirati u kompleksni broj funkcijomCMPLX. Iz kompleksnog broja možemo izdvojiti realni dio i imaginarnidio s funkcijama REAL i AIMAG
COMPLEX (KIND=8) :: cREAL (KIND=8) :: a,bc = (1.0_8,-5.3D+2)a = REAL(c) ; PRINT *,ab = AIMAG(c); PRINT *,b
◮ Kompleksno konjugirani broj se dobije pomoću funkcije CONJG
COMPLEX (KIND=8) :: c,dc = (1.0_8,-5.3D+2)d = CONJG(c)PRINT *,cPRINT *,d
Kompleksni brojevi
COMPLEX :: cc = 4.0 * ATAN(1.0) * (0.0,1.0)PRINT *,’Kompleksni broj = ’,cPRINT *,’Sinus = ’,SIN(c)PRINT *,’Eksponent = ’,EXP(c)PRINT *,’Kvadrat = ’,c**2PRINT *,’Korijen = ’,SQRT(c)PRINT *,’Absolutna = ’,ABS(c)
Fortranske funkcije možemokoristiti na kompleksnimbrojevima.
Rezultat izvod̄enja:
Kompleksni broj = (0.0000000E+00,3.141593)Sinus = (0.0000000E+00,11.54874)Eksponent = (-1.000000,-8.7422777E-08)Kvadrat = (-9.869605,0.0000000E+00)Korijen = (1.253314,1.253314)Absolutna = 3.141593
Parameter
◮ Na početku programa moguće je zadati posebnu vrstu podatakakoji će za cijelo vrijeme izvod̄enja programa ostati konstante. Ovikonstantni podaci se zadaju kroz naredbu PARAMETER:
INTEGER, PARAMETER :: single = KIND(1E0)INTEGER, PARAMETER :: double = KIND(1D0)REAL(single), PARAMETER :: spi = 3.1415927REAL(double), PARAMETER :: dpi = 3.141592653589793REAL(double), PARAMETER :: dpi2 = 0.5*dpiCHARACTERS(LEN=4), PARAMETER :: ime =’Pero’
REAL(double) :: x
X = 1.0_double
◮ Pokušaj promijene vrijednost parametra prevodilac će javiti kaogrešku.
IMPLICIT
◮ S naredbom IMPLICIT moguće je unaprijed zadati tip podatakaprema početnom slovu imena podatka. Tada imena podataka nijepotrebno deklarirati.
IMPLICIT INTEGER (i-n), REAL (a), REAL(KIND=8) (d)aa = 1.4; PRINT *,aaab = 4.1; PRINT *,abi = 2 ; ii = 2 ; iii = 2PRINT *,i,ii,iii
◮ IMPLICIT NONE je naredba koja daje naputak prevoditelju da svakavarijabla mora biti prethodno deklarirana. Mora stajati na samompočetku programa.
◮ Dobro je deklarirati sve varijable, te na početku programa stavitinaredbu IMPLICIT NONE. Tako ćemo biti sigurni da nismo napravilislučajnu pravopisnu grešku u programu.
IMPLICIT
◮ S naredbom IMPLICIT moguće je unaprijed zadati tip podatakaprema početnom slovu imena podatka. Tada imena podataka nijepotrebno deklarirati.
IMPLICIT INTEGER (i-n), REAL (a), REAL(KIND=8) (d)aa = 1.4; PRINT *,aaab = 4.1; PRINT *,abi = 2 ; ii = 2 ; iii = 2PRINT *,i,ii,iii
◮ IMPLICIT NONE je naredba koja daje naputak prevoditelju da svakavarijabla mora biti prethodno deklarirana. Mora stajati na samompočetku programa.
◮ Dobro je deklarirati sve varijable, te na početku programa stavitinaredbu IMPLICIT NONE. Tako ćemo biti sigurni da nismo napravilislučajnu pravopisnu grešku u programu.
Niz podataka (array)
◮ Često je potrebno raditi s nizom ili listom podataka iste vrste. Npr. ufizici to mogu biti koordinate jedne čestica, ili koordinate mnoštvačestica, raspodjela gustoće, itd.
◮ Da bi se deklarirao niz podataka potrebno je navesti dužinu niza iza to nam služi instrukcija DIMENSION.
◮ S naredbom DIMENSIONmože se rezervirati memoriski prostor zajednodimenzionalni ili višedimenzionalni niz.
REAL, DIMENSION(3) :: polozaj = 0 ! niz od 3 clanaPRINT *,polozajpolozaj = (/ 1.0, -1.0, 4.3 /)PRINT *,polozajpolozaj = (/ (REAL(i**2), i=1,3) /)PRINT *,polozaj
Niz podataka
◮ Vrijednost niza mogu se inicirati u listi zatvorenoj s kombinacijomokruglih zagrada i kose crte. Okrugle zagrade dod̄u s vanjske strane,a kosa crta s unutrašnje: (/. . . /).
◮ Vrijednost niza mogu se zadati i petljom (tz. implied do-loop) unutarokruglih zagrada i kose crte, s tim da se petlja zatvori u dodatneokrugle zagrade: (/ (. . . ,i=p,k) /).
◮ Naredba DIMENSIONmože imati nekoliko argumenata za deklariranjevišedimenzionalnih nizova:
REAL, DIMENSION(3,3) :: matmat = (/ (((i-j),i=1,3),j=1,3) /)PRINT *,matPRINT *,’Ljepsi ispis’DO i=1,3
PRINT *,mat(i,1:3)END DO
Niz podataka
◮ Pojedini elementi niza dostupni su preko indeksa izlistanih u okruglimzagradama. U C-programu su to uglate zagrade.
◮ Dio niza (podniz) može se specificirati navodeći navodeći početnu ikonačnu vrijednost indeksa separirane dvotočkom.
◮ Ukoliko se želi uzeti svaka druga vrijednost u podnizu, ili vrijednosti snekim korakom različitim od 1, može se koristiti slijedeća sintaksapocetak : kraj : korak
REAL, DIMENSION (3,3) :: a = 0.0REAL, DIMENSION (2,2) :: bREAL, DIMENSION (1,3) :: ca(1,1) = 3.0a(2,2) = 2.0b = a(1:2,2:3)c = a(3,1:3)
a11 a12 a13a21 a22 a23a31 a32 a33
Memorijske lokacije za matricu
◮ U fortranu matrica se u memoriji računalasprema po stupcima tj. po prvom indeksu. UC-u matrica se sprema po retcima.
◮ U strukturi matrice ne postoji posebanpodatak koji govori o obliku matrice. Ako sematrica koristi kao jedan od argumenata upozivu nekoj funkciji ili podprogramu, ondaje potrebno dodatno navesti i dimenzijumatrice, odnosno njen oblik.Npr. ako je argument 3x3 matrica, funkcija(podprogram) ne zna da li je to 9x1, 3x3 ili1x9 matrica.
Matrica 3x3 matrica
a(1,1)a(2,1)a(3,1)a(1,2)a(2,2)a(3,2)a(1,3)a(2,3)a(3,3)
Operacije s numeričkim nizovima
INTEGER, PARAMETER :: n = 3REAL, DIMENSION(n,n) :: aa = 0.0 ! svi a(i,j) = 0.0a = a + 1 ! svi a(i,j) = 1.0a = 2*a ! svi a(i,j) = 2.0a = SQRT(a) ! Vadi korijen iz svih elemenataa = SIN(a) ! Izracunava sinus iz svih elemenataa = a*a ! kvadrira svaki element
◮ Numeričke operacije primjenjuju se svakom pojedinom članuniza, a rezultat se sprema u niz na lijevoj strani znaka jednakosti.
◮ U Fortranu 77 bilo je potrebno koristiti DO-petlje da bi se postigaoisti rezulat.
Agregatne operacije
Agregatna operacija = operacija na nizu podataka koja kao rezultatima jedan broj.
REAL, DIMENSION(3) :: a = (/ (REAL(i), i=1,3) /)REAL, DIMENSION(3) :: b = (/ (i**2 , i=1,3) /)REAL, DIMENSION(6) :: c = (/ ((i-2)**2,i=1,6) /)PRINT *,’Broj elemenata = ’,SIZE(a) ! 3PRINT *,’Najveci element = ’,MAXVAL(b) ! 9.0PRINT *,’Najmanji element = ’,MINVAL(c) ! 0.0PRINT *,’Suma elemenata = ’,SUM(a) ! 6.0PRINT *,’Produkt elemenata = ’,PRODUCT(b) ! 36.0PRINT *,’Skalarni produkt = ’,DOT_PRODUCT(a,b) ! 36.0
Matrične operacije
REAL :: fi = 0.25*3.1415927REAL, DIMENSION(2) :: a = (/ 1.0, 0.0 /)REAL, DIMENSION(2) :: bREAL, DIMENSION(2,2) :: rr(1,1:2) = (/ COS(fi), SIN(fi) /)r(2,1:2) = (/ -SIN(fi), COS(fi) /)PRINT *,’vec a = ’,ab = MATMUL(r,a) ! Rotacija za kut pi/4PRINT *,’vec R*a = ’,bb = MATMUL(r,b) ! Jos jedna rotacijaPRINT *,’vec R*b = ’,bPRINT *,’R = ’,rr = MATMUL(r,r) ! Matrica rotacije za 2*fiPRINT *,’R*R = ’,r
Funkcija MATMULmnoži matricu smatricom umatematičkomsmislu, za razlikuod operacijemnoženja (*) kojamnoži element selementom.
FunkcijaTRANSPOSEkaorezultat imatransponiranumatricu.
Odgod̄ena/naknadna rezervacije memorije
Ponekad nije moguće unaprijed znati točnu dužinu niza podataka koji ćese rabiti u programu, pa se obično rezervira naviše što se misli da će bitipotrebno. S druge strane prevelika količina rezervirane memorije možeusporiti program jer ona može nadmašiti dostupni RAM na računalu. U timsituacijama je zgodno koristiti mogućnost naknadne rezervacijememorijskog prostora, za trenutak kada je podatak o količini potrebnememorije poznat.
◮ Nizovi za koje će se memorijski prostor rezervirati naknadnodeklariraju se s naznakom ALLOCATABLE.
◮ Memorija se rezervira s naredbom ALLOCATE
◮ a oslobad̄a se s naredbom DEALLOCATE
◮ Matrica se ne smije rabiti prije rezervacije memorije, a to se možeprovjeriti naredbom ALLOCATED.
◮ Naznaka DIMENSION umjesto brojke, dužine niza, ima ’:’(dvotočku).
Primjer
Primjer programa koji čita sa standardnog unosa (inputa) podatke teizračunava srednju vrijednost i standardnu devijaciju.
PROGRAM analizaREAL, DIMENSION(:), ALLOCATABLE :: podaciINTEGER :: nREAL :: aver,sigmaPRINT *,’Upisi broj podataka’; READ (*,*) nALLOCATE (podaci(n))PRINT *,’Upisi podatke’; READ (*,*) podaci(1:n)aver = SUM(podaci(1:n))/REAL(n)sigma = SQRT(SUM( (podaci(1:n)-aver)**2 )/REAL(n-1))PRINT *,’prosjecna vrijednost = ’,averPRINT *,’standardna devijacija = ’,sigmaDEALLOCATE (podaci)END PROGRAM
Primjer (neke izmjene)
Modificirajmo program tako da čita podatke direktno iz datoteke.
PROGRAM analizaREAL, DIMENSION(:), ALLOCATABLE :: podaciINTEGER :: n, infoREAL :: aver,sigmaCHARACTER (LEN=20) :: datoteka = ’podaci.txt’OPEN (UNIT=35, FILE=TRIM(datoteka), STATUS=’old’, &
IOSTAT=info, ACTION=’read’)IF (info /= 0) THEN
PRINT *,’GRESKA kod otvaranja datoteke ’,TRIM(datoteka)STOP
END IFREAD (35,*) nALLOCATE (podaci(n))READ (35,*) podaci(1:n)CLOSE (35)aver = SUM(podaci(1:n))/REAL(n)... itd ...
Objašnjenja uz primjer
◮ S naredbom OPEN otvaramo datoteku za čitanje. Tom ured̄ajupridružujemo broj ’35’ pomoću argumenta UNIT=35. U nastavkusve operacije čitanja (ili pisanje, pregledavanja) koriste taj brojured̄aja.
◮ Po pretpostavci standardni ispis ima broj ured̄aja ’6’, a standardniunos broj ured̄aja ’5’. Standardni ispis i unos nije potrebnoposebno otvarati naredbom OPEN, jer se oni po poretpostavciautomatski otvore čim se program počne izvoditi.
◮ Ured̄aje zatvaramo naredbom CLOSE.
◮ Naredba OPENima niz opcionalnih argumenata, med̄u inim iprovjeru greške kod otvaranja datoteke.
◮ Naredbom STOP na silu teminiramo izvod̄enje programa, ali prijetoga ispisujemo razlog teminacije.
Oblik niza podataka
Naredba DIMENSION(n,m,...) zadaje oblik niza podataka. To možebiti
◮ To može biti stupac odred̄ene dužine (eg. DIMENSION(k) ).
◮ Ili redak odred̄ene dužine (eg. DIMENSION(1,k) ).
◮ Ili matrica - tablično raspored̄eni podaci (eg. DIMENSION(k,l) ).
◮ Ili niz tablica podataka - prostorno kubni raspored s 3 indeksa(eg. DIMENSION(k,l,m) ).
◮ Ili matrica još većeg broja indeksa (eg.DIMENSION(k,l,m,n,...) ).
Podaci se mogu preraspodjeliti iz jednog oblika u drugi koristećifunkciju RESHAPE.
Funkcija RESHAPE
Funkcija RESHAPEima dva obavezna argumenta i još dva opcionalna.
◮ Prvi argument je niz podataka koje treba preurediti u novi oblik.
◮ Drugi argument je niz cijelih pozitivih brojeva kojim definiramonovi oblik za podatke iz prvog argumenta (specifikacija sličnaonoj u naredbi DIMENSION).
◮ Treći opcionalni argument je niz podataka iste vrste kao nizpodataka. Ovim podacima nadopunjujemo izlazne podatke akoulazni niz podataka nije dovoljno dugačak.
◮ Četvrti argument je niz dobiven permutiranjem niza cijelih brojeva(1,2,3,. . . ), kao npr. (3,1,2) kojim se definira kojim će se redompopunjavati pojedine dimenzije novog izlaznog niza.
Primjer
INTEGER, DIMENSION(20) :: aa = (/ (i, i=1,20) /)INTEGER, DIMENSION(2,3) :: bbINTEGER, DIMENSION(5,5) :: ccbb = RESHAPE (aa, (/ 2,3 /))cc = RESHAPE (aa, (/ 5,5 /), (/ 31,32,33,34,35 /), (/ 2,1 /))
Kao rezultat dobivaju se matrice
bb =
(
1 3 52 4 6
)
cc =
1 2 3 4 56 7 8 9 10
11 12 13 14 1516 17 18 19 2031 32 33 34 35
◮ Matrica bb popunjava se po stupcima koji su prvi indeks, dok matricacc se popunjava po retcima, tj. drugom indeksu jer smo to naznačili uRESHAPEnaredbi s četvrtim argumentom.
◮ Matrica cc nadopunjena je dodatnim podacima iz trećeg argumenatakomande RESHAPE.
O indeksima nizova
◮ Indeksi niza brojeva ne moraju započinjati s jednicom.
◮ Početna i konačna vrijednost indeksa se specificiraju pomoćunaznake DIMENSION.
REAL, DIMENSION(1:10) :: a ! isto sto i DIMENSION(10)REAL, DIMENSION(-10:10) :: b ! po četni indx. -10, zadnji 10REAL, DIMENSION(-5:10,5:10) :: cPRINT *,LBOUND(a), UBOUND(a) ! ispisuje 1 i 10PRINT *,LBOUND(b), UBOUND(b) ! ispisuje -10 i 10PRINT *,LBOUND(c,2),UBOUND(c,2) ! ispisuje 5 i 10PRINT *,SIZE(a) ! ispisuje 10PRINT *,SIZE(b) ! ispisuje 21PRINT *,SIZE(c) ! ispisuje 96PRINT *,SIZE(c,1) ! ispisuje 16
Funkcije oblika niza
◮ Funkcije LBOUND i UBOUND kao rezultat daju početnu i konačnuvrijednost indeksa nekog niza podataka, s tim da je mogućespecificirati na koju se to dimenziju odnosi.
◮ Funkcija SIZE ispisuje broj članova niza. Kao dodatni argumentmože se navesti dimenzija, pa se dobiva broj čanova niza samoza tu dimenziju.
◮ Funkcija SHAPE ispisuje broj članova niza za svaku dimenziju.Rezultat je niz brojeva dužine broja dimenzija niza.
PROGRAM oblikREAL, DIMENSION(-10:10) :: bREAL, DIMENSION(-5:10,5:10) :: cPRINT *,SHAPE(b) ! ispisuje 21PRINT *,SHAPE(c) ! ispisuje 16,6END PROGRAM
Vektorski indeksi
Pojedini dijelovi niza podataka mogu se izdvojiti koristeći vektorskiindekse. Vektorski indeks je 1-dim niz cijelih brojeva po iznosuunutar područja vrijednost indeksa nekog niza. Vektorski indeks nemora biti ured̄en i može sadržavati višestruke vrijednosti.
INTEGER, DIMENSION(3,3) :: aaINTEGER, DIMENSION(2,2) :: bbINTEGER, DIMENSION(3) :: iiaa = RESHAPE ( (/ (i, i=1,9) /), (/ 3,3 /))ii = (/ 3,1,2 /)aa = aa ( ii, (/ 1,2,3 /) )bb = aa ( (/ 3,1 /), (/ 2,2 /) )
Kao rezulat imamo:
aa =
3 6 91 4 72 5 8
bb =
(
5 56 6
)
WHERE naredba
Pomoću naredbe WHERE, operacije koje s provode na cijelom nizupodataka, mogu se ograničiti na samo neke elemente kojizadovoljavaju zadani uvijet.
PROGRAM test_whereREAL, DIMENSION(2,2) :: a,ba = RESHAPE( (/ 1,2,3,4 /), (/ 2,2 /) )b = RESHAPE( (/ 3,0,0,5 /), (/ 2,2 /) ) ! dijagonalnaWHERE (b .NE. 0) a = a/bPRINT *,a(1,1:2)PRINT *,a(2,1:2)END PROGRAM
WHERE naredba - složeni oblik
Ako je zadovoljen uvjet operacije se izvode na nizu unutar bloka kojipočinje s WHERE a završava s ili s ENDWHERE ili s ELSEWHERE.ELSEWHERE je ujedno početak opcionalnog drugog bloka u kojem seizvode operacije na članovima niza koji ne zadovoljavaju uvijet.
PROGRAM test_whereREAL, DIMENSION(2,2) :: a,ba = RESHAPE( (/ 1,2,3,4 /), (/ 2,2 /) )b = RESHAPE( (/ 3,0,0,5 /), (/ 2,2 /) ) ! dijagonalnaWHERE (b .NE. 0)
a = a/bELSEWHERE
a = 5*aENDWHEREPRINT *,a(1,1:2) ! 0.3333333 15.00000PRINT *,a(2,1:2) ! 10.00000 0.8000000END PROGRAM
Izvedeni tipovi podataka
Iz osnovih podataka mogu se definirati novi tipovi podataka. Novipodaci se definiraju unutar bloka koji počinje s TYPE i imenom zanove podatke a završava s END TYPE
TYPE brzinaREAL :: x,y,z
END TYPE brzinaTYPE(brzina) :: v1,v2v1 %x = 1.0v1 %y = 1.0v1 %z = 1.0v2 = brzina(-1.0,0.0,5.0)PRINT *,v1 ! 1.0 1.0 1.0PRINT *,v2 ! -1.0 0.0 5.0
Pojedinie komponente unutar složenog podatka dostupne su prekoznaka procenta (%).
Kombiniranje izvedenih tipova podataka u složenije tipove
Izvedeni tip podatka može sadržavati druge izvedene tipove:
TYPE polozajREAL :: x, y, z
END TYPE polozajTYPE brzina
REAL :: x, y, zEND TYPE brzinaTYPE stanje
TYPE(polozaj) :: rTYPE(brzina) :: v
END TYPE stanjeTYPE (stanje) :: cesticacestica%r = (polozaj)(0.0, 0.0, 0.0)cestica%v = (brzine)(1.0, 0.0, 0.0)PRINT *,cestica%r%x
Izvedeni tipovi podataka i nizovi
Izvedeni tipovi podataka mogu biti dio niza ili sami mogu sadržavatiniz.
TYPE tockaREAL :: x,y
END TYPE tockaTYPE trokut
TYPE (tocka), DIMENSION(3) :: vrhEND TYPE trokutTYPE (trokut) :: pravokutniTYPE (trokut), DIMENSION(2) :: trokutipravokutni%vrh(1) = tocka(0.0,0.0)pravokutni%vrh(2) = tocka(4.0,0.0)pravokutni%vrh(3) = tocka(0.0,3.0)trokuti(1) = pravokutnitrokuti(1)%vrh(3) = tocka(1.0,3.0)PRINT *,trokuti(1)
Izvedeni tipovi podataka i funkcije/podprogrami
Fukcije mogu imati kao argumente izvedene tipove, te ih vraćati kao rezultat.
TYPE tockaREAL :: x,y
END TYPE tockaTYPE (tocka) :: t1,t2REAL :: dREAL, EXTERNAL :: udaljenostt1 = tocka(0.0,0.0) ; t2 = tocka(3.0,4.0)d = udaljenost(t1,t2)...FUNCTION udaljenost(a,b) RESULT (c)
TYPE tockaREAL :: x,y
END TYPE tockaTYPE (tocka) :: a,bREAL :: cc = SQRT((a%x-b%x)**2+(a%y-b%y)**2)
END FUNCTION
Primjer
TYPE tockaREAL :: x,y
END TYPE tockaTYPE (tocka) :: t1,t2REAL :: kut = 0.25*3.14157TYPE (tocka), EXTERNAL :: rotacijat1 = tocka(3.0,3.0)t2 = rotacija(t1,kut)PRINT *,t2...FUNCTION rotacija(a,b) RESULT (c)
TYPE tockaREAL :: x,y
END TYPE tockaTYPE (tocka) :: a,cREAL :: bc = tocka((a%x*COS(b)+a%y*SIN(b)),(-a%x*SIN(b)+a%y*CO S(b)))
END FUNCTION
Pokazivači i mete
◮ Kao i u drugim jezicima, fortranu postoje pokazivači (pointeri).Pravila uporabe pointera u Fortranu su puno stroža od onih kojapostoji npr. u C-u ili C++.
◮ Pokazivač nije vrsta podatka kao cijeli broj, realni broj ili string. Toje u stvari podatak o memorijskog lokaciji nekog drugog podatka.Taj drugi podatak zovemo metom.
◮ Pokazivač treba deklarirati, kao i sve ostale podatke, ali njegovadaklaracija sadrži dodatnu oznaku POINTER.
◮ Meta na koju može pokazivati pokazivač treba biti deklarirana soznakom TARGET.
◮ Meta i pokazivač trebaju biti kompatibilni, pokazivač na cijeli brojne može sadržavati adresu realnog broja, niti pokazivač realnogbroja ne može pokativati niz realnih brojeva.
Primjeri
Veza izmed̄u pokazivača i mete se uspostavlja s relacijom:
[oznaka pokazivača] => [oznaka mete]
PROGRAM pokazivaci_i_meteREAL, TARGET :: a,bREAL, POINTER :: paa = 3.0; b= 4.0pa => a ! meta je aPRINT *,a,b,pa ! 3.0 4.0 3.0pa => b ! meta je bPRINT *,a,b,pa ! 3.0 4.0 4.0pa = a ! mijenja sadrzaj mete (b)PRINT *,a,b,pa ! 3.0 3.0 3.0END PROGRAM
Pregled predavanjaKompleksni brojeviParameternaredba IMPLICITNiz podatakaDeklaracijaIniciranje vrijednosti elemenataIzdvajanje pojednih elemenataRaspored niza u memoriji racunalaNumericke operacije na nizovimaAgregatne operacijeMatricne operacijeOdgoena/naknadna rezervacije memorijeOblik nizaFunkcija RESHAPEO indeksima nizovaFunkcije oblika nizaVektorski indeksiWHERE naredba
Izvedeni tipovi podatakaPokazivaci i mete