Temel Yönleriyle Fortran 90 / 95 / 2003 | ||||||||||||||||||||||||||||||||||||||||||||||||
* Fortran'a Giriş
* fortran.gantep.edu.tr
|
Bölüm 2: Fortran'nın Temelleri
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 TipleriVeri 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. 0Gerçel sayılar üstel gösterimle ile de temsil edilebilir. Örneğin 123.456 sayısı şöylede yazılabilir: 1.23456E2Bu 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ılarTanı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ı:
Bu kurallara göre aşağadaki tanımlayıcıların geçerliliğini inceleyiniz.
2.3 DeğişkenlerDeğ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 listesiBurada
INTEGER :: Kutle, I, J, Faktoriyel REAL :: X, Ivme, HizDeğ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.0Programlama 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) :: SoyadKatar 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) :: SoyadKatar uzunlukları belirtmek için *n işlemi de kullanılabilir. Burada n katarın uzunluğunu gösterir. CHARACTER (10) :: Ad, Soyad*20Burada 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 DeyimiProgram 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 DeyimiFortran 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.
2.6 IMPLICIT NONE DeyimiBir 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ı
ÇIKTI
2.9 Tip DönüşümleriBir 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
Program 2.2: Tip Dönüşümleri
ÇIKTI
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örSon 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:
v = 1.2 - 9.8*t; x = 1.0 + 1.2*t - 9.8*t**2satı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 |