Jeofizik Fortran Programlama Dili'nin Esasları Fortran Proglama Dili ’ nin Esaslar ı Temel Veri Tipleri (Data Types) Sabitler (Numeric Data Types) Tan ı mlay ı c ı lar (Identifiers) De ğ i ş kenler (Variables) Paramater Deyimi Program Deyimi Implicit None Deyimi Atama Operatörleri (Assignment Statments) Aritmetik Operatörler (Aritmetic Operators) Dönü ş ümlerGiri ş : T ü m bilgisayar programlama dillerinde veri tipi ve de ği ş ken kavram vard r. Fortran Programlama dilindeki temel veri tipleri (data type), sabit ler , tan mlay c lar, ve de ği ş ken lerdir. Veri Tipleri ; Program i ç erisinde kullan lan de ği ş ken , sabit veya tan mlay c ( ö rne ğin fonksiyon isimleri) veri tipleri bellekte ayr lacak b ö lgenin b ü y ü kl ü ğü n ü belirlemektedirler. Fortran Programlama dilinde temel olarak 5 veri tipi bulunmaktad r. INTEGER ? REAL ? CHARACTER ? COMPLEX ? LOGICAL ?INTEGER Veri tipi ? Bu veri tipi ile 0 ile 9 aras ı ndaki say ı lar ı içeren tamsay ı bilgisi (pozitif veya negatif ) bellekte tutulur. Geçerli Veri Geçersiz Veri 0 8.67 235 5,8 -1539 --7 +238 57-REAL Veri tipi ? Bu veri tipiyle 0 ile 9 aras ı daki rakamlardan olu ş an gerçelsay ı bilgisi (pozitif veya negatif ) bellekte tutulur. Geçerli Veri Geçersiz Veri 2.25 3,56 -112.5 18 +568. 0Fortran programlama dilinde Ger ç el Say lar ü stel g ö sterimle ifade ? edilirler. Programlama s ras nda ü stel g ö sterim kullan lmas ç ok b ü y ü k ve ç ok k üçü k say lar yazarken kolayl k sa ğlar. Ö rne ğin 580.000 say s 5.80000E2 ş eklinde ifade edilir. Bu asl nda 5.80000 x 10 2 g ö sterimine e ş de ğerdir. Benzer ş ekilde, a ş a ğ daki ifadeler birbirleri yerine kullan labilinir; ? 5.80000E+2 5.80000e+2 0.58000E3 580.000E0 580000E-3CHARACTER Veri tipi ? Karakter veri tipi, Fortran programlama dilinde kullan lan karakter toplulu ğundan se ç ilen rakamlar, harfler ve ö zel simgeler i ç eren semboller toplulu ğudur. Fortran'da karakter veri tipi tek (‘ ) veya ç ift t rnak (“ ) i ç inde belirtilir. Ö rne ğin: “Dersimiz Fortran Programlama” ile ‘Dersimiz Fortran Programlama ’ 26 karakter uzunlukta ge ç erli Karakter veri tipidir. Geçerli Veri Geçersiz Veri “Bilgisayar ” ‘Bilgisayar ” ‘Bilgisayar Uygulamalar ı ’ “Bilgisayar Uygulamalar ı ’ “ Ali ’ nin Not Defteri” ‘Ali ’ nin Not Defteri ’ Programlamada birden ç ok karakter veri tipi bir araya getirilmek istenebilir, bunun i ç inde bir birle ş tirme operat ö r ü (//) kullan l r. Ö rne ğ in; “ Jeofizikte bilgisayar uygulamalar ” // “ dersinde Fortran Programlama ö ğreniyoruz ’’ i ş lemi ile iki karakter veri grubu tek bir grupta toplan r, program ç kt s da a ş a ğ daki gibi olur; “Jeofizikte bilgisayar uygulamalar dersinde Fortran Programlama ö ğreniyoruz ”Programlama dillerinde karakter topluluklar dizin veya dizi (string) olarak adland r l r. Fortran'da, en fazla 10 karakter tutabilen Ad ve 20 karakter tutabilen Soyad dizinleri şö yle tan mlanabilir: CHARACTER (LEN=10) :: Ad CHARACTER (LEN=20) :: Soyad Dizin (String) 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 Dizin uzunluklar belirtmek i ç in *n i ş lemi de kullan labilir. Burada n dizin ’ in uzunlu ğunu g ö sterir. CHARACTER (10) :: Ad, Soyad*20 Burada Ad 10, Soyad 20 krakter uzunlu ğundad r. CHARACTER FILE1*12, DAY*4, T*28, header*254Dizinlere ilk de ğer atamas a ş a ğ daki gibi yap l r: CHARACTER (10) :: Ad = “Kemalettin" CHARACTER (20) :: Soyad = “Celebioglu" veya CHARACTER (10) :: Ad, Soyad*20 Ad = “Kemalettin" Soyad = “Celebioglu" COMPLEX Veri tipi ? Fortran karma ş k ( complex ) say larla ç al ş maya izin veren bir programlama dilidir. Herhangi bir complex say a + bi olarak bildi ğimiz say lard r ger ç ek k s m Sanal k s m Burada i 2 = -1 dir. bir karma ş k say a ve b ger ç el say olmak ü zere, Fortran'da (a, b) ş eklinde ifade edilir. Ö rne ğin: (1.0, 4.0) 1.0 + 4.0i (0.0, 1.0) i (1.0, 0.0) 1.0 (3.3E-2, 0.1) 0.033 + 0.1i 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 = (2.0, 5.0), Z2 = (1.8, -2.7)LOGICAL Veri tipi ? Fortran'da mant ksal (logical) veri tipinin iki de ğeri vard r. Bunlar .TRUE. ve .FALSE. d r. Logical veri tipleri 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 FUNCTIONTan mlay c lar (Identifiers) 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 uyma zorunlulu ğu vard r. Bir tan mlay c ; en fazla 32 karakterden olu ş abilir. 32 karakterden uzun ? de ği ş ken isimlerinde ilk 32 karakteri de ğerlendirilir. Geriye kalan karakterler i ş leme tabi tutulmaz, İ ngiliz 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 Tan mlay c lar bir rakam ile ba ş layamaz. İ lk karakter mutlaka bir harf ? olamal d r. Sonraki karakterler rakamlardan olu ş abilir. Ge ç erli Tan mlay c Ge ç ersiz Tan mlay c Hiz H z Gravitasyon_Sabiti I ş kh z Ivme İ vme Sismik_Hiz Sismik Hiz Onlira 10liraDe ğ i ş kenler Fortran'da, bir de ğ i ş ken tan ı mland ığı nda bu de ğ i ş ken için bellekte bir yer ayr ı l ı r. De ğ i ş kenin tipi, ilgili yere yaz ı lacak say ı sal verinin tipini belirler. De ğ i ş ken adlar ı n ı n geçerli bir tan ı m ı 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 genellikle be ş temel veritipinden (INTEGER, REAL, CHARACTER, COMPLEX, LOGICAL ) birdir ve de ğ i ş kenler listesi birbirinden virgüllerle ayr ı lm ı ş de ğ i ş ken adlar ı d ı r. Örne ğ in, INTEGER :: Atom_Numarasi, I, J, Yaricap REAL :: X, Ivme, Hiz COMPLEX :: Z, Impedance, bu de ğ i ş kenlere a ş a ğı daki gibi ba ş lang ı ç de ğ eri verme i ş i yine bildirim k ı sm ı nda yap ı l ı r. INTEGER :: Atom_Numarasi = 2 , I, J, Yaricap= 5 REAL :: X, Ivme = 9.8 , Hiz = 100.0 PARAMETER Deyimi Program içerisinde 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 IMPLICIT NONE Deyimi ? Bir de ğ i ş kene veya sabit ’ e 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 tipi 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. Böylelikle kullan ı c ı bütün de ğ i ş kenlerin tipini kendi belirleme olana ğı sa ğ lar. Uzman Fortran programc ı lar ı IMPLICIT NONE deyimini her zaman kullanmay ı tercih ve tavsiye ederler. IMPLICIT NONE REAL, PARAMETER :: Pi = 3.1415926 ? INTEGER :: I, N ... Atama Operat ö r ü (=) = sembol ü bir ç ok programlama dilinde bir 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 incelersek, IMPLICIT NONE INTEGER :: I, J, X = 2 I = X + 5 ! I = 7 I = I + 1 ! I = 8 X = X * 2 ! X = 4 J = X / 4 ! J = 1 Aritmetik Operatörler ( ), *, /, +, -, ** operatörleri aritmetik i ş lemlerde kullan ı lan operatörlerdir. Bunlar s ı ras ı yla parantez içi, çarpma, bölme, toplama, ç ı karma ve kuvvet alma operatörleridir. Aritmetik İ ş lemlerde öncelikle parantez içindeki i ş lem gerçekle ş tirilir sonras ı nda Çarpma, Bölme, Toplama ve son olarakta Ç ı karma i ş lemi gerçekle ş tirilirVeri Tipi Dönü ş ümleri Bir formül içerisinde bir çok de ğ i ş ken ve sabitler olabilir. Bu de ğ i ş ken ve sabitler birbirinden farkl ı tipte olursa, hesaplamalar ı n sonuçlar ı n ı n hangi tipte olaca ğı çok ö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. E ğ er Program ı m ı z içinde INTEGER L; REAL D; Sabitleri ile a ş a ğı daki i ş lemleri yaparsak; Ba ğı nt ı Sonuç Tipi ------- ---------- L+ 8 INTEGER L *5 INTEGER L +5.0 REAL D+L REAL D+L -2 REAL L /2 INTEGER L /2.0 REAL 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: 6/2 = 3 ; ama 5/2 = 2 (2.5 de ğ il). Fakat 6/2.0 = 3.0 ve 5/2.0 = 2.5 dir. Fortranda amaçlad ığı m ı z sonuca göre bir sabitin veya de ğ i ş kenin tipini uygun fonksiyonlarla de ğ i ş tirebiliriz. 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.5 anlam ı ndaFortran 90 ile gelen yeniliklerden biri olan ve program ı n anla ş ı labilirli ğ ini artt ı ran iki operatör vard ı r. Bu operatörler “ & ” 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: V = ( (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 V = ( (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 V = ( (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: Y = 1.2 - 9.8*t; x = 1.0 + 1.2*t - 9.8*t**2 ile Y = 1.2 - 9.8*t x = 1.0 + 1.2*t - 5.0*t**2