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 2: Fortran'nın Temelleri

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


Giriş

Orta ve yüksek seviyeli dillerin hemen hemen hepsinde veri tipi ve değişken kavramı bulunmaktadır. Bu kısımda Fortran programlama dilindeki temel veri tipleri, tanımlayıcılar, değişkenler ve sabitler konu edilecektir.


2.1   Veri Tipleri

Veri tipi (data type) program içinde kullanılacak değişken, sabit, fonksiyon isimleri gibi tanımlayıcıların tipini, yani bellekte ayrılacak bölgenin büyüklüğünü, belirlemek için kullanılır. Bir programcı, bir programlama dilinde ilk olarak öğrenmesi gereken, o dile ait veri tipleridir. Çünkü bu, programcının kullanacağı değişkenlerin ve sabitlerin sınırlarını belirler. Fortran programlama dilinde beş temel veri tipi bulunmaktadır. Bunlar:

      INTEGER
      REAL
      CHARACTER
      COMPLEX
      LOGICAL
Şimdi bu veri tiplerini ile saklanabilecek sabitleri görelim.

INTEGER Sabitler

Bu veri tipi ile tamsayı (pozitif, negatif, sıfır) bilgisi tutulur. Aşağıda geçerli/geçersiz tamsayı sabitlere örnek verilmiştir.
      Geçerli sabitler   Geçersiz sabitler
      ----------------   -----------------
      0                  9.81
      197                3,4
      -2248              --5
      +14539             29-

REAL Sabitler

Bu veri tipi (pozitif, negatif, sıfır) gerçel sayı bilgisi tutulur. Aşağıda geçerli/geçersiz gerçel sayı sabitlere örnek verilmiştir.
      Geçerli sabitler   Geçersiz sabitler
      ----------------   -----------------
      1.23               1,23
      -222.2             27
      +384.              0
Gerçel sayılar üstel gösterimle ile de temsil edilebilir. Örneğin 123.456 sayısı şöylede yazılabilir:
      1.23456E2
Bu aslında matematikteki 1.23456 x 102 gösterimine eşdeğerdir. Buna göre aşağıdakiler birbiri yerine kullanılabilir.
      1.23456E+2
      1.23456e+2
      0.1234567E3
      123.4567E0
      123456E-3

CHARACTER Sabitler

Karakter sabitler (strings) Fortran karakter kümesinden seçilen rakamlar, harfler ve özel simgeler içeren semboller topluluğudur. Fortran'da karakter sabitler tek veya çift tırnak içinde belirtilir. Örneğin:
      "Ben gelmedim kavga icin..."
ile
      'Ben gelmedim kavga icin...'
aynı anlamda (26 karakter uzunlukta) geçerli karakter sabitlerdir. Aşağıda geçerli ve geçersiz karakter sabilere örnek verilmiştir.
      Geçerli sabitler           Geçersiz sabitler
      ----------------           -----------------
      "Fortran"                  'Fortran"
      'Gaziantep Universitesi'   "Gaziantep Universitesi'
      "Ali'nin kitabi"           'Ali'nin kitabi'
Birden çok karakter sabit birleştirme operatörü, //, ile bir araya getirilir. Yani,
      "Ben ezelden beridir " // "hür yaşadım, hür yaşarım."
işlemi ile, iki karakter sabit aşağıdaki gibi tek bir çatı altında toplanabilir.
      "Ben ezelden beridir hür yaşadım, hür yaşarım."

COMPLEX Sabitler

Fortran karmaşık (complex) sayılarla çalışmaya izin verir. Herhangi bir complex sayı
a + bi
şeklinde gösterilir. Burada i2 = -1 dir. a ve b gerçel sayı olmak üzere, bir karmaşık sayı Fortran'da
      (a, b)
şeklinde ifade edilir. Örneğin:
     (3.0, 4.0)     ==>  3.0 + 4.0i
     (0.0, 1.0)     ==>  i
     (1.0, 0.0)     ==>  1.0
     (1.3E-2, 0.1)  ==>  0.013 + 0.1i

LOGICAL Sabitler

Fortran'da iki tane mantıksal (logical) sabit vardır. Bunlar .TRUE. ve .FALSE. dır. Koşullu işlem gerektiren deyimlerde kullanılır. Örneğin aşağıdaki fonksiyon N sayısı çift ise doğru (.TRUE.) değilse yanlış (.FALSE.) değeri gönderir.
      LOGICAL FUNCTION Cift(N)
      INTEGER,INTENT(IN) :: N

        IF(MOD(N,2)==0) THEN
          Cift = .TRUE.
        ELSE
          Cift = .FALSE.
        END IF

      END FUNCTION

2.2   Tanımlayıcılar

Tanımlayıcılar (Identifiers) program içinde kullanılan değişken, sabit, fonksiyon, modül, yapısal veri tipi gibi nesnelere verilen sembolik isimlerdir. Bir tanımlayıcı kullanırken aşağıdaki kullara uyulmalıdır.

Bir tanımlayıcı:
  • en fazla 32 karakterden oluşabilir. 32 karakterden uzun değişken adları ilk 32 karakteri değerlendirilir. Geriye kalan karakterler işleme tabi tutulmaz,
  • ingiliz alfabesinde bulunan karakterler (A-Z) veya (a-z), rakamlar (0-9) ve alt çizgi ('_') karakterleri kullanılarak oluşturulmalıdır. Türkçe karakterler, özel karakter veya boşluk karakteri kullanılamaz
  • herhangi bir rakam ile başlayamaz. Ilk karakter bir harf olamalıdır. Sonrakiler rakamlardan oluşabilir.

Bu kurallara göre aşağadaki tanımlayıcıların geçerliliğini inceleyiniz.

Değişken/Sabit/Fonksiyon/Yapı Adı   Geçerlilik   Açıklama
asal   geçerli   -
Momentum   geçerli   -
ivme   geçerli   -
olasilik   geçerli   -
IsikHizi   geçerli   -
isik_hizi   geçerli   Alt çizgi karakteri   '_'   kullanılabilir
isik hizi   geçersiz   Boşluk karakteri kullanılamaz
ışık_hızı   geçersiz   Türkçe karakter kullanılamaz
1Bit   geçersiz   rakam ile başlanamaz

2.3   Değişkenler

Değişkenler bilgisayarın geçici belleğinde bilginin saklandığı gözlere verilen sembolik adlardır. Fortran'da, bir değişken tanımlandığında bu değişken için bellekte bir hücre ayrılır. Değişkenin tipi, ilgili hücreye yazılacak sayısal verinin tipini belirler. Değişken adları geçerli bir tanımlayı olmalıdır ve programın başında bulunmalıdır.

Değişken bildirimi şöyle yapılır:
      Veri Tipi :: değişkenler listesi
Burada
  • Veri Tipi genllikle beş temel veritipinden (INTEGER, REAL, CHARACTER, COMPLEX, LOGICAL ) birdir.
  • değişkenler listesi birbirinde virgüllerle ayrılmış değişken adlatıdır.
Örneğin,
      INTEGER :: Kutle, I, J, Faktoriyel
      REAL :: X, Ivme, Hiz
Değişkenlere aşağıdaki gibi başlangıç değeri verme işi yine bildirim kısmında yapılır.
      INTEGER :: Kutle = 70, I, J, Faktoriyel = 1
      REAL :: X, Ivme = 9.8, Hiz = 0.0
Programlama dillerinde karakter toplulukları katar (string) olarak adlandırılır. Fortran'da, en fazla 10 karakter tutabilen Ad ve 20 karakter tutabilen Soyad katarları şöyle tanımlanabilir:
      CHARACTER (LEN=10) :: Ad
      CHARACTER (LEN=20) :: Soyad
Katar uzunluğunu gösteren LEN deyiminin kullanımı isteğe bağlıdır. Bildirim aşağıdaki gibi de yapılabilir:
      CHARACTER (10) :: Ad
      CHARACTER (20) :: Soyad
Katar uzunlukları belirtmek için *n işlemi de kullanılabilir. Burada n katarın uzunluğunu gösterir.
      CHARACTER (10) :: Ad, Soyad*20
Burada Ad 10, Soyad 20 krakter uzunluğundadır. Katarlara ilk değer ataması aşağıdaki gibi yapılır:
      CHARACTER (10) :: Ad = "Mustafa"
      CHARACTER (20) :: Soyad = "Özüdoğru"
veya
      CHARACTER (10) :: Ad, Soyad*20
      Ad = "Mustafa"
      Soyad = "Özüdoğru"
COMPLEX veri tipine sahip değişkenlerin bildirimi:
      COMPLEX :: Z1, Z2
şeklinde yapılır. Bu tip beğişkenkere başlangıç değeri verme, diğer veri tiplerinde olduğu gibi, bildirim kısmında yapılır:
      COMPLEX :: Z1 = (3.0, 4.0), Z2 = (1.7, -2.1)

2.4   PARAMETER Deyimi

Program içereisinde sık kullanılan sabitlere isim vermek münkündür. Sabit bildirimi, başlangıç değeri verilen değişken bildirimi gibi yapılır. Ancak, veri tipinden sonra PARAMETER anahtar sözcüğü konmalıdır. Örneğin:

      REAL, PARAMETER :: Pi = 3.1415926, IkiPi = 2.0*Pi
      INTEGER, PARAMETER :: EOF= -1, Max = 100

gibi sabit bildirimleri geçerli olup bunların içerikleri program boyunca değiştirilemez. Yalnızca kullanılabilir.

2.5   PROGRAM Deyimi

Fortran ana programları PROGRAM deyimi ile belirtilen yerden başlar, END PROGRAM deyimi ile son bulur. PROGRAM deyiminin kullanımı zorunlu değildir. Eğer kullanılmazsa, programın sonu END ile bitirilmelidir. PROGRAM deyimi kullanıldığında, programa geçerli tanımlayıcı olan bir isim verilmesi gerekir. END PROGRAM'dan sonra bu isim isteğe bağlı belirtilebilir.

Aşağıdaki iki programın çıktısı Merhaba Fortran! dır.
 PROGRAM Mesaj
 PRINT *,"Merhaba Fortran!"   
 END PROGRAM Mesaj
 PRINT *,"Merhaba Fortran!"   
 END

2.6   IMPLICIT NONE Deyimi

Bir değişkene veya sabite program başında bir tip verilmesi zorunlu değildir. Herhengi bir değişkenin tipi bildirilmemişse, Fortran bu değişkene INTEGER veya REAL veri tip atar. Eğer değişkenin adı I, J, K, L, M, N (veya i, j, k, l, m, n) ile başlıyorsa, değişken INTEGER aksi halde REAL veri tipine sahipmiş gibi değerlendirilir. Bu özellik iç isim çevrimi (implicit naming conversion) olarak adlandırılır. İç isim çevrimini iptal emek için IMPLICIT NONE deyimi kullanılır. Bu sayede kullanıcı bütün değişkenlerin tipini kendi belirler. Uzman Fortran programcıları IMPLICIT NONE deyimini her zaman kullanayı tercih ve tavsiye ederler.

      IMPLICIT NONE
      REAL, PARAMETER :: Pi = 3.1415926
      INTEGER :: I, N
      ...

2.7   Atama Operatörü (=)

= sembolü birçok programlama dilinde eşitliği değil bir atama işlemini gösterir. Derleyici

      X = A + B

gibi bir satırla karşılaştığında, önce = sembolünün sağındaki A + B işlemini hesaplayıp sonucunu X'e atar. Buna göre aşağdaki atamaları inceleyiniz.

      IMPLICIT NONE
      INTEGER :: K, Y, X = 2

        K = X + 5    ! K = 7 
        K = K + 1    ! K = 8
        X = X * 2    ! X = 4
        Y = X / 4    ! Y = 1

2.8   Aritmetik Operatörler

( ) * / + - ** operatörleri aritmetik işlemleri kotarmak için kullanılır. Bunlar sırasıyla parantez içi, çarpma, bölme, toplama, çıkarma ve kuvvet alma operatörleridir. Program 2.1'de, 6 aritmetik operatörün kullanımı gösterilmiştir.

Program 2.1: Aritmetik Operatörlerin kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
PROGRAM Aritmetik_Operatorler
!--------------------------------------------------------
! 02prg01.f95
! Aritmetik Operatörlerin kullanımı
!--------------------------------------------------------
IMPLICIT NONE
INTEGER :: x = 15, y = 3

  PRINT *,"x + y   = ", x + y
  PRINT *,"x - y   = ", x - y
  PRINT *,"x * y   = ", x * y
  PRINT *,"x / y   = ", x / y
  PRINT *,"x **y   = ", x ** y
  PRINT *
  PRINT *,"x+y/2   = ", x+y/2
  PRINT *,"(x+y)/2 = ", (x+y)/2

END PROGRAM 

ÇIKTI

 x + y   =  18
 x - y   =  12
 x * y   =  45
 x / y   =  5
 x **y   =  3375

 x+y/2   =  16
 (x+y)/2 =  9

2.9   Tip Dönüşümleri

Bir formül içerisinde bir çok değişken veya sabit olabilir. Bu değişken ve sabitler birbirinden farklı tipte olursa, hesap sonucunun hangi tipte olacağı önemlidir. Bir bağıntıda, içeriği dönüşüme uğrayan değişkenler eski içeriklerini korurlar. Dönüştürme işlemi için geçiçi bellek alanı kullanılır; dönüştürülen değer kullanıldıktan sonra o alan serbest bırakılır.

    
      INTEGER T;
      REAL G;
bildirimlerine göre:
      Bağıntı      Sonuç Tipi
      -------      ----------
      T+5          INTEGER
      T*5          INTEGER
      T+5.0        REAL
      G+T          REAL
      G+T-2        REAL
      T/2          INTEGER
      T/2.0        REAL

 NOT
Tamsayılar arası bölme kesme hatalarına (truncation error) neden olur.
Bunun anlamı iki tamsayının oranı yine bir tamsayıdır.
örneğin: 4/2 = 2; ama 3/2 = 1 (1.5 değil).
Fakat 4/2.0 = 2.0 ve 3/2.0 = 1.5 dir.

Aşağıdaki program, tip dönüşümlerinin önemini gösteren oldukça basit bir örnektir.

Program 2.2: Tip Dönüşümleri
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
PROGRAM Tip_Donusumleri
!---------------------------------------------------
! 02prg02.f95
! Tip dönüşümleri 
!---------------------------------------------------
IMPLICIT NONE
REAL :: A, B, C
INTEGER :: I, J, K

 A = 3.
 B = 4.
 I = 5
 J = 3
 C = A + I / J
 K = A / I + 2 * B / J

 PRINT *, C, K

END PROGRAM 

ÇIKTI

4.000000  3

Bir değişkenin veya sabitin tipi uygun fonksiyonlarla değiştirilebilir.

      IMPLICIT NONE
      REAL :: X
      INTEGER :: I, J

        I = INT(4.6)     ! I = 4 anlamında
        J = NINT(4.6)    ! J = 5 anlamında

        X = REAL(4)      ! X = 4.0  anlamında
        X = 9/4          ! X = 2.0  anlamında
        X = REAL(9)/4    ! X = 2.25 anlamında
        X = REAL(I+J)/2  ! X = 4.6  anlamında

2.10   İki Kullanışlı Operatör

Son olarak Fortran 90 ile gelen ve programın anlaşılabilirliğini arttıran iki operatörden bahsedelim. Bunlar operatöeler & ve ; sembolleri ile temsil edilir.

& Operatörü
Bu operatör sayesinde, uzun aritmetik deyimler içeren formülleri kesmek mümkündür. Örneğin:
  Z = ( (X**2 + 2.*X + 3.)/(5.+Y)**0.5 - ((15. - 77.*X**3)/Y**1.5)**0.5 ) / (X**2 - 4.*X*Y - 5.*X**(-0.8))
gibi bir uzun formül aşağıdaki gibi ikiye
  Z = ( (X**2 + 2.*X + 3.)/(5.+Y)**0.5 - ((15. - 77.*X**3)/Y**1.5)**0.5 ) &
      / (X**2 - 4.*X*Y - 5.*X**(-0.8))
veya üçe
  Z = ( (X**2 + 2.*X + 3.)/(5.+Y)**0.5 - &
      ((15. - 77.*X**3)/Y**1.5)**0.5 ) &
      / (X**2 - 4.*X*Y - 5.*X**(-0.8))
bölünerek yazılabilir:


; Operatörü
Bu operatör & operatörünün tersine, bir satırda birden çok işlem veya formülü yazmaya izin verir. Örneğin:

  v = 1.2 - 9.8*t;  x = 1.0 + 1.2*t - 9.8*t**2
satırı aşağıdaki satırlarla aynı anlamdadır.
  v = 1.2 - 9.8*t
  x = 1.0 + 1.2*t - 5.0*t**2


Powered by PHP