Jeofizikte Bilgisayar Uygulamaları FORTRAN Programlama Dili
Bilgisayar, verileri saklayan, bunlar üzerinde çok hızlı işlem yapan ve istenen verileri sunan bir aygıttır. Yazılım (Software) ve Donanım (Hardware) diye iki bölüme ayrlır. Donanım bilgisayarın fiziksel bileşenleridir. Yazılım ise donanımı oluşturan bileşenlerin çalışmasını ve işlevlerini yerine getirmesini sağlayan programlardır.
Bilgisayarlar kendilerine sorulan sorulara hemen cevap verebilen, bir çok problemi çözebilen bir aygıt değildir. Bilgisayarlarda yapılan her iş, ilk önce insanlar tarafından tasarlanır, planlanıp programlanır. Öncelikle bilgisayara problemin çözümü öğretilmelidir. Ancak bunun için bizim problemi çözmemiz gerekir. Ve daha sonra bir programlama dili ile bu çözümü bilgisayara aktarılmamız gerekir.
Problem Çözme ve Algoritmalar Problem Çözme Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmalıdır. Descartes tarafından önerilen Problem çözme teknikleri; - Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının. - Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün. - Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz. - Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.
Algoritmalar Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir. M.S. 9.yy da İranlı Musaoğlu Horzumlu Mehmet (Alharezmi diye bilinir) problemlerin çözümü için genel kurallar oluşturmuştur. Algoritma Alharezmi'nin Latince okunuşudur. Her algoritma aşağıdaki kriterleri sağlamalıdır. 1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli. 2. Çıktı: En azından bir değer üretilmeli. 3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli. 4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli. 5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
I’nın değerini T’ye Ekle Örnek: 1'den 20‘ye kadar olan sayıların toplamını veren algoritma. 1. Toplam T, sayılar da I diye adlandırılsın. 2. Başlangıçta T'nin değeri 0 ve I'nın değeri 1 olsun. 3. I'nın değerini T'ye ekle. 4. I'nın değerini 1 arttır. 5. Eğer I'nın değeri 20'den büyük değil ise 3. adıma git. 6. T'nin değerini yaz. Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir.Akış şeması eskiden beri kullanılmakta olan bir yapıdır. Bazen Algoritmalar yazılırken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. T=0 I=1 I’nın değerini T’ye Ekle I’nın değerini 1 artır I< 20 T’yi Yaz
İki Ayrı Seriyi Bilgisayara Hesaplatma PROBLEM İÇİN GELİŞTİRİLEN KODUN ALGORİTMA GÖSTERİMİ
Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar: i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle. ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar). iii) Problemin çözümünü veren algoritmayı yaz. iv) Algoritmayı bir programla dili ile yaz. v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.
Programlama ve Temel Kavramlar Program; Bilgisayara ne yapması gerektiğini bildiren komutlar (Kod, Deyim) topluluğuna verilen isimdir. Bu komutları veren kişiye Programcı, komutların tamamına ise Programlama dili denir. Herhangi bir dil bilen bir programcı ile bilgisayar (Makine dili biliyor) arasındaki iletişimin gerçekleşmesi: Birbirleri ile farklı dilleri konuşan iki yabancı kişinin (İngilizce , Türkçe vb.) bir araya gelip görüşmesine benzetilebilir. Bu görüşme ancak bir çevirmen aracılığı ile gerçekleşebilir. Benzer şekilde bilgisayar üreticileri aynı sorunu programcının dilini bilgisayarın makine diline çevirecek ‘Derleyici Programlar’ geliştirerek çözmektedirler.
DERLEYİCİ VE YORUMLAYICI KAVRAMLARI Yazılan programları makine diline çeviren, makine dilinde elde edilen sonuçları bizlerin anlayabileceği biçime dönüştüren programlara Derleyici veya Yorumlayıcı denir. Kaynak komutların makine diline çevrilmesi : Derleyici (Compiler) Yorumlayıcı (Interpreter) Kaynak Program Makine Dili İkili sayı (BInary digiT-BIT) formatındaki gösterime makine dili denir. Mantıksal olarak “1” var, “0” yok anlamındadır. Sayısal sistemler ikili mantığa göre çalışırlar.
Derleyici: Bir programlama dili ile yazılmış olan programı makine dilini kullanarak amaçladığımız programa dönüştürür. Derleyicinin çevirme işlemi genellikle üç adımdan oluşur; 1. Sözel Analiz (Lexical Analysis) 2. Yazım Hatası Analizi (Syntax Analysis) 3. Kod üretimi (Code Generator)
Sözel Analiz’de kaynak kodlarını oluşturan kelimler incelenip bu kelimelerin kaynak dilinde karşılıkları olup olmadıkları kontrol edilir, Yazım Hatası Analiz’inde kaynak kodlarının yazıldığı programlama dilinin kendi kuralları içerisinde doğru yazılıp yazılmadığı kontrol edilir. Kod Üretimi aşamasında ise tanımı yapılan komutlara karşılık gelen makine dili komutları üretilir. Bu adımlar birbirine paralel olarak gerçekleştirilir ve kaynak komutlar amaçlanmış olan koda çevrilmiş olur.
Yorumlayıcı: Program komutlarının ilk satırından son satırına kadar belirtilmiş olan deyim ve işlemleri inceleyerek kaynak programın hatalarının düzeltilmesine olanak veren ve çalışmasını sağlayan programdır. Herhangi bir komut satırının çalıştırılmasında bir hata ile karşılaştığında çalışmayı durdurur ve hatalı olan satırı programcıya bildirir.
Derleyici ile Yorumlayıcının Farkı: Derleyici programın tamamını kontrol eder, herhangi bir satırında hata varsa program satırları bittikten sonra hatayı gösterir. Yani kaynak kodu bir defa çevirir. Yorumlayıcı ise programın herhangi bir satırında hata varsa çalışırken hatalı olan satıra geldiğinde durur ve hata mesajı verir. Hata düzeldikten sonra tekrar birinci satırdan itibaren kodu çevirir.
PROGRAMLAMA DİLLERİ Makine Dili ile Kodlama Problemimiz öncelikle, bilgisayarın özellikleri ve mevcut komutlarla yapabileceği işlemler dizisi biçiminde ifade edilir; daha sonra programcı tarafından bu, bilgisayarın makine dilinde yazılır. Makine dilinde yazılan bu program gerekli veri ile birlikte, bilgisayarca doğrudan uygulanabilir ve aranan sonuçlar bulunur. Ancak makine dili ile programlamada bazı önemli güçlükler ortaya çıkmaktadır. Tüm komutların makine dili ile kodlanması; komutların makine tarafından uygulandığı sırada yazılması ve yanlışlıkla ya da başka bir nedenle bazı komutlar atlanmışsa, bundan sonraki bütün komutların araya eklenenler için ötelenmesi ve adreslemenin yenilenmesi zorunluluğu;bütün program düzenlemesinin programcı tarafından yapılması; programcının kullandığı bilgisayarı çok iyi anlamış olma gereği bu güçlüklere örneklerdir.
Programlama Sistemleri Programlama sistemleri genel olarak derleyici programdan oluşur (bir programlama dili ve bir birleştirici). Programlama dili, programcı tarafından kolayca öğrenilebilecek ve yazılabilecek, bilgi işlem sisteminin yapım özellikleri ve yapılacak işlemler arasında uzlaşma sağlayabilecek bir şekilde olmalıdır. Bu dil içinde, diğer herhangi bir dildeki gibi, dilbilgisi, noktalama ve yazma kuralları olacağı açıktır.
Bir bilgisayarda programlama sistemlerinin (derleyicilerin) bulunması makine dilinde programlamanın güçlüklerini büyük ölçüde azaltır. Birleştirici program ve derleyiciler, programların makine dili dışında probleme yönelmiş bir dilde hazırlanabilmesi olanağını sağlar. Programlama dilinde makine diline çeviriyi, birleştirici ya da derleyici aracılığı ile, bilgisayarın kendisi yapmaktadır.
Sembolik Programlama Sistemleri Sembolik programlama sistemleri, programcıyı makine dili ile kodlamanın güçlüklerinden büyük ölçüde kurtarmaktadır ancak, belli bir bilgisayara göre hazırlandıklarından ve sistemin programlama dilinin kısmen makineye yönelik olmasından dolayı makine dili düzeyinde çalışan, öğrenilmeleri oldukça uzun süren sistemlerdir ve her bilgisayar için farklıdır, diğer bir deyişle makineye bağımlıdır dolayısyla her bilgisayarda ayni dil kullanılamamaktadır.
Probleme Yönelmiş Diller ve Derleyiciler FORTRAN, COBOL, PASCAL, ALGOL, C, C++, vb. programlama sistemlerine bazı örneklerdir. Bu tür programlama sistemleri ile çalışmada, temel programın derleyici program aracılığı ile bilgisayarca, belli kurallara uyarak makine dili programına çevrilmesine derleme denir. Derleme sırasında rastlanan dil kurallarına aykırı olan hatalar özel hata mesajları ile bilgisayarca programcıya bildirilir. Probleme yönelmiş dillerin en önemlilerinden biri, bilimsel ve mühendislik araştırma ve uygulamaları için geliştirilen ve en yaygın olarak kullanılan FORTRAN dilidir. FORTRAN adı, formül çevirisi anlamındaki, İngilizce "FORmula TRANslation" kelimelerinin ilk hecelerinden oluşur. FORTRAN dili sayısal hesapla ilgili herhangi bir problemin kolaylıkla ifade edilebilmesini sağlayacak biçimde düşünülmüştür. Komutlar ya da deyimler herhangi bir güçlük olmaksızın anlaşılabilir ve yorumlanabilir. Bazı deyimler problemin matematiksel bağıntılarına çok benzer.
Tarihçe; IBM'de çalışan John W. Backus ve ekibi 1953 yılının sonlarında, assembler diline alternatif olarak IBM 704 ana-bilgisayarında daha verimli çalıbilecek bir programlama dili önermişler, "The IBM Mathematical FORmula TRANSslating System" isimli 32 deyim içeren ilk Fortran derleyicisini geliştirmişler ve 1957 yılında dağıtımına başlamışlardır Takip eden yıllarda yeni sürümler gelişerek, 1958'de FORTRAN II ve FORTRAN III, 1961'de FORTRAN IV, 1966'da FORTRAN 66 1977'de FORTRAN 77 derleyicileri kullanıma sunulmuştur. Uzun bir süre sonra, bir çok önemli değişiklikler yapılmış ve ANSI 1992 standardı ile tescillenmiş hali ile Fortran 90 sürümü oluşturulmuştur. Hemen ardından, birkaç küçük değişiklikle Fortran 95 geliştirilmiştir. Fortran 90/95 sürümlerinde nesne tabanlı özellik kazanmıştır. Daha sonraları nesneye dayalı (object-oriented) ve genel programlama (generic-programming) özellikleri eklenerek Fortran 2003 standardı belirlenmiştir. 2008 yılında da "Co-Array Fortran" özelliği ile paralel işlem (parallel processing) yeteneği kazanmıştır.
IBM 704 IBM 360
Neden Fortran? Fortran, sayısal hesaplamada güçlü ve yeterince esnek bir dildir. Fortran, tanımlayıcı adları küçük-harf büyük-harf ayrımı yapmaz (case insensitive). Yani Tablo veya tablo veya TABLO değişken adları aynı değişkeni temsil eder. Fortran, basit bir yapısı olduğu için, programlama giriş iyi bir dildir. Fortran, farlı platformlada derleyicilere sahiptir. Fortran, özel veri tipi tanımlamasına izin verir. Fortran, diğer dillerde olamayan esnek kütüphane fonksiyonlarına sahiptir. Fortran, sayısal hesaplamada C/C++, Java ve görsel programlama dillerinden daha güçlü ve hızlıdır.
FORTRAN’a GİRİŞ Program bir komutlar ( deyimler ) dizisidir ve herhangi bir problemin çözümü için kullanılan hesap düzenini tanımıdır . Çözümde bir bilgisayardan yararlanılacaksa , programın bilgisayar özellilerine uygun bir programlama dili ile yazılması gerekir . Bilgisayar , programdaki komutları aksi belirtilmedikçe , yazıldığı sırada yerine getirir . Gereğinde program bir komutlar kümesinin belli düzende tekrarlanmasını yada duruma göre belirli dallanmaları sağlayacak özel komutlarda içerebilir ; böylece programı kısaltmak mümkün olur . FORTRAN programlama dili oldukça basittir ve normal matematik diline çok yakındır. FORTRAN sistemi , FORTRAN dili ve FORTRAN derleyicisinden oluşur .
Bilimsel çalışmalarda, mühendislik araştırmaları ve uygulamalarda yapılan hesapların çoğunda değişik büyüklükte sayılarla çalışılır . Güvenilir sonuçlar elde edilmesi için bu hesaplarda mümkün olduğu kadar çok anlamlı rakamı olan sayılarla çalışılması gerekir . Sabit kelime uzunluklu ve değişken kelime uzunluklu bilgisayarda bir sayının gösterilmesi için bellekte sabit sayıda pozisyon ayrılır . Bu sabit pozisyon sayısına incelik veya hassasiyet( prezisyon ) denir . Sayılar ikiye ayrılır : tam sayılar , gerçel sayılar . Tam sayılar desimal noktası olmayan sayılardır . Bunların büyüklük sınırları bilgisayar özelliklerine bağlıdır . Gerçel sayılar ise desimal noktalı ondalık sayılardır . Gerçel sayıların bilgisayar belleğinde saklanmasından önce bilgisayarca sayı düzenlenir . Diğer bir deyişle desimal nokta sayının sıfırdan farklı en önemli rakamın soluna kaydırılır ve gerekli düzeltme 10 un üsleri şeklinde sayının yanına yazılır . Düzenlenmiş sayının kesirli kısmı mantis , desimal noktanın kaydırıldığı hane sayısına üs denir . Gerçel sayıların büyüklük sınırları da bilgisayar özelliklerine bağlıdır SAYILAR
Fortran Aritmetiği Bilgisayarla yapılan hesaplarda işleme giren büyüklüklerin tamsayı yada gerçel sayı olması , işlemlerin yapılışı ve sonuçlar yönünden büyük farklılıklar gösterir . Tamsayı aritmetiği, tamsayılarla yapılan işlemler anlamındadır; her işlemin sonucu da tamsayı olacak biçimde kesilir, yuvarlatma yapılmaz . Kesme işlemi öncelik sırasına göre yapılan bütün işlemler için söz konusudur . Bu nedenle bu tür aritmetik işlemlerin yapılış sırası ve parantezler çok önemlidir . Tamsayılar programlarda eleman numarası , indis, vb. amaçlar için kullanılır . Aritmetik işlemler çoğunlukla gerçel sayılarla yapıldığından tamsayı artimetiğinin bu özelliği bir sakınca değildir . Gerçel sayı aritmetiği , gerçel sayılarla yapılan işlemler anlamındadır . Burada kesirler hassasiyet (presisyon) hanesi kadar rakamla gösterilir ; diğer hanerler bilgisayar özelliklerine göre ya kesilir , ya da yuvarlatılır .
Karakterler Simge/Anlam Fortran Alfabesi FORTRAN alfabesi 10 nümerik , 26 alfabetik ve 13 özel karakterden oluşmaktadır . Karakterler Simge/Anlam Nümerik 0 1 2 3 4 5 6 7 8 9 Alfabetik A B C D E F G H I J K L M N O P R S T U V W Y Z Özel boşluk boşluk bırakma = yerine koyma + artı - eksi * çarpı / bölü ( aç parantez ) kapa parantez . nokta , virgül ' apotrof " tırnak & ve işareti
Fortran Deyimleri Bir FORTRAN programı bir takım deyimlerden oluşur . Deyimler programın hesap düzeni ile ilgili olarak , bilgisayara bilgi verilmesini, işlemlerin yapılmasını ve uygulamasını, gerekli kararların verilmesini, sonuçların dış ortama alınmasını sağlar Deyimlerle bağlantı kurabilmek için , deyimler numaralanabilir . Uygulama sırası yönünden deyim numaralarının sırasının bir önemi yoktur . Deyim numaraları sadece hesap düzeninin gereği olarak bu deyimlerle dallanabilme olanağı sağlar; iki deyime asla aynı numara verilemez .
DEYİMLER , GÖREVLERİ ve ADLARI Aritmetik deyimler; Yapılacak işlemleri denetler Giriş -Çıkış deyimleri; Dış ortamla bilgisayar arasında bilgi alışverişi sağlar Yönetim deyimleri; Programdaki deyimlerin icra sırasını yönetir Bildiri deyimleri; Derleyiciye bilgi verir Altprogram deyimleri; Alt programları tanımlamaya ve kullanmaya yarar
Giriş / Çıkış deyimleri Aritmetik deyimler Giriş / Çıkış deyimleri Değişken = tanımlama Giriş /çıkış deyimleri bilgisayarla dış ortam arasındaki bilgi alışverişini sağlar, Çevre bellekte bilgi saklanması yada çevre bellekten bilgi alınması olanağını sağlar. Giriş /çıkış birimini ve ortamını belirler, Bilginin giriş ortamında yerleşme ve çıkış ortamında yerleştirilme biçimini belirler, Bellekte bilgi alışverişi yapacak data alanlarını belirtir.
Başlıca Giriş / Çıkış deyimleri şunlardır; READ PRINT WRITE FORMAT Birçok programlama dilinde standart giriş klavye, standart çıkış kullanıcı ekranı (monitör) olarak belirlenmiştir. Ancak veri giriş/çıkışı bir dosyadan da yapılabilir. Bu durum aşağıdaki şekilde gösterilmiştir DERLEYİCİ ÇIKIŞ GİRİŞ PProgram READ ........ PRINT ....... WRITE ...... Klavye Ekran Dosya Dosya
Fortran'da, giriş için READ, çıkış için PRINT ve WRITE deyimleri kullanılır. Bu deyimlerin formatlı (formated) ve formatsız veya serbest format (free format) olmak üzere iki kullanımı vardır. Formatsız kullanımda okuma/yazma biçimi derleyici tarafından, formatlı kullanımı ise programcı tarafından belirlenir.