8. Függvények
- Általános
felépítés
- Belső
függvények
- Külső függvények
c) Külső
függvények
A
külső és a belső függvények közötti különbséget az alábbi példa
mutatja, amelyben a függvényekben ugyanazokat a változóneveket
használjuk, minta főprogramban:
elterofuggvenyek.f90program elterofuggvenyek
! figyelem!! nem hasznaljuk az implicit none parancsot
real
:: a,
b
! globalis valtozok
real :: belsobol, kulsobol ! a fuggvenyek meghivasahoz szukseges valtozok
real
::
kulso
! deklaraltuk a kulso fuggvenyt is
! kezdeti ertekeket adunk a globalis valtozoknak:
a=1.
b=10.
! kiirjuk, hogy mi volt az eredeti erteke a-nak es b-nek:
write(*,*) 'a erteke eredetileg: ',a
write(*,*) 'b erteke eredetileg: ',b
write(*,*)
! meghivjuk a kulso fuggvenyt:
kulsobol=kulso(a)
! kiirjuk, hogy hogyan valtoztak/nem valtoztak a globalis valtozok
write(*,*) 'a erteke a kulso fuggveny meghivasa utan: ',a,' (mert argumentumban megkapta, igy meg tudta valtozatni)'
write(*,*) 'b erteke a kulso fuggveny meghivasa utan: ',b,' (nem valtozott)'
write(*,*)
! meghivjuk a belso fuggvenyt:
belsobol=belso(a)
! kiirjuk, hogy hogyan valtoztak/nem valtoztak a globalis valtozok
write(*,*) 'a erteke a belso fuggveny meghivasa utan: ',a,' (nott 1-el)'
write(*,*) 'b erteke a belso fuggveny meghivasa utan: ',b,' (nott 1-el)'
contains
! a belso fuggveny:
real function belso(a)
! nem kell deklaralni semmit, mert ez a fuggveny
! ismeri a globalis valtozokat
! kiirjuk a valtozokat:
write(*,*) 'a erteke a belso fuggvenyben megnoveles elott: ',a,' (mert megkapta&
& argumentumban es amugy is a belso fuggveny ismeri a globalis valtozokat)'
write(*,*) 'b erteke a belso fuggvenyben megnoveles elott: ',b,' (mert a belso fuggveny ismeri a globalis valtozokat)'
write(*,*)
a=a+1.
b=b+1.
belso=a
end function belso
end program elterofuggvenyek
! a kulso fuggveny a program lezarasa utan kovetkezik:
real function kulso(a)
! a-t nem kell deklaralni, mert azt argumentumban
! megkapja a fuggveny,
! b-t pedig azert nem kell, mert nem hasznaljuk az
! implicit none parancsot
write(*,*) 'a erteke a kulso fuggvenyben megnoveles elott: ',a,' (mert megkapta argumentumban)'
write(*,*) 'b erteke a kulso fuggvenyben megnoveles elott: ',b,' (mert nem kapta meg argumentumban, &
&nem is lett deklaralva es nem is adtunk erteket neki)'
write(*,*)
a=a+1.
b=b+1.
kulso=a
end function kulso
Fordítása és futtatása:
gfortran elterofuggvenyek.f90 -o elterofuggvenyek.exe
./elterofuggvenyek.exe
Az eredmény:
a erteke eredetileg: 1.00000000
b erteke eredetileg: 10.0000000
a
erteke a kulso fuggvenyben megnoveles elott:
1.00000000 (mert megkapta argumentumban)
b
erteke a kulso fuggvenyben megnoveles elott:
-1.38841460E-05 (mert nem kapta meg argumentumban, nem is lett
deklaralva es nem is adtunk erteket neki)
a erteke a kulso
fuggveny meghivasa utan:
2.00000000 (mert argumentumban megkapta,
igy meg tudta valtozatni)
b erteke a kulso fuggveny meghivasa utan: 10.0000000 (nem valtozott)
a
erteke a belso fuggvenyben megnoveles elott:
2.00000000 (mert megkapta argumentumban
es amugy is a belso fuggveny ismeri a globalis valtozokat)
b
erteke a belso fuggvenyben megnoveles elott:
10.0000000 (mert a belso fuggveny ismeri
a globalis valtozokat)
a erteke a belso fuggveny meghivasa utan: 3.00000000 (nott 1-el)
b erteke a belso fuggveny meghivasa utan: 11.0000000 (nott 1-el)
<< Előző |
Következő
>>
Oldal
tetejére | Vissza a
főoldalra