Fortran 90 oktatóanyag >> Függvények

8. Függvények

  1. Általános felépítés
  2. Belső függvények
  3. 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.f90

program 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