Temel Yönleriyle Fortran 90 / 95 / 2003

  Temel Konular
* Önsöz

* Fortran'a Giriş
* Fortran'nın Temelleri
* Basit ve Formatlı Okuma/Yazma
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Alt Programlar I
* Alt Programlar II
* Diziler
* Dinamik Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Yapısal Veri Tipleri
* Dosya Yönetimi
* Modül Kavramı
* Sayısal Tipler (KINDs)
* Bit Düzeyinde Çalışmak
* Kütüphane Fonksiyonları Listesi

* Yararlanılan Kaynaklar

  İleri Uygulamalar
* - - -
* Karmaşık Sayılar
* Tarih-Saat Fonksiyonları
* Rastgele Sayılar
* Katar - Sayı Dönüşümleri
* Komut Satırı İşlemleri
* Co-Array Fortran
* Derleme Seçenekleri
* Fortran ve C

  Seçilmiş Örnekler
* Sayılar Kuramı
* Analiz
* Lineer Cebir

  Fortran 90/95 Derleyicileri
* Salford (silversoft FTN95)
* G95
* GFORTRAN

  Dış Bağlantılar
* programlama.com
* Fortran (wikipedia)

* fortran.gantep.edu.tr
* g95.org
* Hot scripts

  İletişim
* E-posta

 

Bölüm 8: Alt Programlar II

###################- (%95)


Giriş

Fortran 90+, argüman sayısı değişebilen esnek fonksiyonlar ve subroutineler tanımlamaya, ve/veya bir alt programın argüman listesinden istenilenleri kullanmaya izin verir. Arguman sayısı keyfi olabilen alt programlar, Esnek Argümanlı Alt Programalar (Optional Argument Subprograms), ve argüman listesinden keyfi seçilebilen altprogramalar Anahtar Argümanlı Alt Programlar (Keyword Argument Subprograms), olarak adlandırılır.


8.1   Esnek Argümanlı Alt Programlar

Aşağıdaki gibi üçüncü dereceden bir polinom düşünelim:

P(x) = a + bx + cx2 + dx3
burada a, b, c, d katsayıları gerçel sayı sabitleridir. Bu polinomu temsil eden en basit fonksiyon şöyle tanımlanabilir.
     REAL FUNCTION P(x, a, b, c, d)
     REAL, INTENT(IN) :: x, a, b, c, d
       P = a + b*x + c*x**2 + d*x**3
     END FUNCTION P

Buna göre, x = 1.7 için, P(x) = 1 - 2x değerini hesaplamak için bu fonksiyon aşağıdaki gibi çağırılmalıdır:

      Sonuc = P(1.7, 1.0, -2.0, 0.0, 0.0)

Burada, kullanılmayan katsayılar için 0.0 değeri mutlaka fonksiyona geçirilmelidir. Kullanılmayan argumanlar geçirilmeden de fonksiyonu çağırmak mümkündür. C/C++ gibi dillerde olduğu gibi, Fortran 90 kullanıcılarına argümanları esnek olarak geçirme imkanı verir. Bunun anlamı, belli kurallar sağlandığında, P() fonksiyonu aşağıdaki gibi çağrılabilmesidir:

              !  x   a     b
      Sonuc = P(1.7, 1.0, -2.0);
Esnek argümanlar için iki temel kural vardır:
  • Esnek argümanlar kullanımı isteğe bağlıdır.
  • Esnek argümanları oluşturan küme ardışık olarak listeye eklenmelidir.
Bir alt programda, esnek argümanlar OPTIONAL özelliği ile belirtilir. Buna göre, P() fonksiyonumuz şöyle olmalıdır:
     REAL FUNCTION Poly(x, a, b, c, d)
     REAL, INTENT(IN) :: x,a
     REAL, INTENT(IN), OPTIONAL :: b, c, d

       P = a
       IF(PRESENT(B)) P = P + b*x
       IF(PRESENT(C)) P = P + c*x**2
       IF(PRESENT(D)) P = P + d*x**3

     END FUNCTION P
Burada mantıksal (LOGICAL) değer döndüren PRESENT fonksiyonu kullanılmıştır. PRENSENT(q), q değişkeninine bir değer atanmışsa .TRUE., atanmamışsa .FALSE. gönderir. Buna göre
     Sonuc = P(1.7, 1.0, 2.0)
atamasıyla x = 1.7 noktasında 1.0 + 2.0x değeri hesaplanır.

8.2   Anahtar Argümanlı Alt Programlar

Bir alt programda hangi değişkenin kullanılacağını belirtmek için bu yapı tercih edilir. Şöyleki, bir fonksiyon aşağıdaki gibi çağırıldığında:

     Sonuc = P(x=1.7, b=3.0, d=0.5)
bir önceki kesimde tanımlanan polinomun, x = 1.7 noktasındaki değeri (3.0x + 0.5x3) hesaplanır.

Ayrıca, anahtar argümanların sırası aşağıdaki gibi değiştirilebilir:

     Sonuc = P(d=0.5, b=3.0, x=1.7)
Son olarak, eğer fonksiyonumuz aşağıdaki gibi çağırılırsa,
     Sonuc = P(1.7, 1.0, d=0.5)
polinomun x = 1.7'deki değeri (1.0 + 0.5x3) hesaplanabilir.

8.3   Örnekler

ÖRNEK 1: ESNEK ARGÜMANLI TOPLAMA FONKSİYONU

Program 8.1: Agümanların toplamını hesaplar
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
PROGRAM Esnek_Toplama
!--------------------------------------------------------
! 08prg01.f95
! 5 sayıya kadar, argümanların elemanların toplamı
!--------------------------------------------------------

 PRINT *,"Topla(1,3) = ", Topla(1,3)
 PRINT *,"Topla(1, 3, 8) = ", Topla(1,3, 8)
 PRINT *,"Topla(1, 3, 8, -4, 3) = ", Topla(1,3,8,-4,3)

CONTAINS

   INTEGER FUNCTION Topla(x1, x2, x3, x4, x5)
   INTEGER, INTENT(IN), OPTIONAL :: x1, x2, x3, x4, x5

                     Topla = 0.0
     IF(PRESENT(x1)) Topla = Topla + x1
     IF(PRESENT(x2)) Topla = Topla + x2
     IF(PRESENT(x3)) Topla = Topla + x3
     IF(PRESENT(x4)) Topla = Topla + x4
     IF(PRESENT(x5)) Topla = Topla + x5

   END FUNCTION Topla


END PROGRAM

ÇIKTI

 Topla(1,3) =  4
 Topla(1, 3, 8) =  12
 Topla(1, 3, 8, -4, 3) =  11




Powered by PHP