FORTRAN90 - PowerPoint PPT Presentation

fortran90 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
FORTRAN90 PowerPoint Presentation
play fullscreen
1 / 186
FORTRAN90
402 Views
Download Presentation
ostinmannual
Download Presentation

FORTRAN90

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. FORTRAN90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin Ders kitabı: FORTRAN90 for Engineers and ScientistsLarry Nyhoff ve Sanford C. Leestma Prentice Hall 1997

  2. 1 Bilgisayar programlama: Programlama dilleri, makine dili, yüksek düzey diller Derleyici, “source”, “object”, “link” kavramları. Algoritma, bir programın yaşam aşamaları

  3. Makine dili X = A * B + C • Hafızanın A adresindeki değeri al, ALU’da bir “register”e yükle; • Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı “register”de tut. • Hafızanın C adresindeki değeri registerdeki değere ekle. • Registerdeki değeri hafızanın X adresine koy.

  4. Makine dili X = A * B + C Opcode Operand • 00010000000000000000010000000000 (A’daki değeri reg. yükle)Hex: 08 00 04 00 • 00100100000000000000010000000001 (B’deki değerle çarp)Hex: 24 00 04 01 • 00100011000000000000010000000010 (C’deki değeri reg. ile topla) Hex: 23 00 04 02 • 00010001000000000000010000000011 (Registerdeki değeri X’e taşı)Hex: 11 00 04 03 İki tabanındaki sayılar : 0, 1 Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

  5. Biraz daha hex Ondalık  Hex Hex  Ondalık 1 = 1 10 = A 36 = 24 A5 = 165 147 = 93 DD = 221 255 = FF

  6. Makine dili - Assembler X = A * B + C

  7. Peki FORTRAN? X = A * B + C X = A * B + C

  8. Üst seviye dili • FORTRAN • C • Pascal • Basic • C++ • Java • C# Üst seviye dili Derleyici (compiler)(Java’da ve scriptlerde yok) Makine dili

  9. Derleme (Compilation) Kaynak kod(Source code) Source module Üst seviye dili X = A * B + C 08 00 04 00 24 00 04 01 23 00 04 02 11 00 04 03 Ara dil (Java, C#) Derleyici (compiler)(Java’da ve scriptlerde yok) Makine dili Object code Object module

  10. Bitti mi? Okumaprogramı Bağlama- link İcra edilebilir program: ExecutableÇarp_Topla.exe Object program Ekrana yazmaprogramı … programı … programı dll :dynamic link library

  11. Hatalar: • Derleme hataları (Compiler error) • Bağlama hataları (Falan modülü bulamadım) • İcra hataları (Run time error)

  12. Bir mühendislik problemi nasıl çözülür? Işın Çekirdek, Ver Bir Diploma da Mezun Olalım Üniversitesi’nde çekirdek fizikçisidir. Deney için 10 mg Polonyum almış. Sonra unutmuş ve aradan 180 gün geçmiş. Polonyum’un yarı ömrü 140 gün. Şimdi elinde kaç mg Po kaldığını hesab etmek istiyor.

  13. Bir mühendislik problemi nasıl çözülür? Biraz daha genel yazalım ve problemin verilerine isim verelim:

  14. Hesaplama algoritması kuralım • BaslangicMiktari, YariOmur, GecenZaman değerlerini oku • KalanMiktar’ı hesapla • KalanMiktar değerini yaz

  15. Algoritma… • BaslangicMiktari, YariOmur, GecenZaman değerlerini al • KalanMiktar’ı hesapla • KalanMiktar değerini yaz Nasıl? GecenZaman = YariOmur ise: KalanMiktar = BaslangicMiktari X 0.5 GecenZaman = 2YariOmur ise: KalanMiktar = (BaslangicMiktari X 0.5) X 0.5 = BaslangicMiktari X (0.5)2 KalanMiktar = BaslangicMiktari X (0.5) GecenZaman/YariOmur Fortran ile: KalanMiktar = BaslangicMiktari * 0.5 ** (GecenZaman / YariOmur)

  16. Algoritma • BaslangicMiktari, GecenZaman, YariOmur değerlerini oku • KalanMiktar = BaslangicMiktari * 0.5**(GecenZaman/YariOmur) hesapla • KalanMiktar’ı yazdır

  17. Algoritma Başla BaslangicMiktariGecenZamanYariOmurdeğerlerini oku Akış diagramı(Flowchart) KalanMiktar = BaslangicMiktari * 0.5**(GecenZaman/YariOmur)hesapla KalanMiktardeğerini yaz Dur

  18. Ara: Algoritma ~ El Harezmî Ebû Cafer Muhammed bin Musâ el- Harizmî (Ölümü: 847) İlk cebir kitabının yazarı: “Kitabı muhtasar fi hisabil- cebr ve’l mukabele” İlk “algoritma” fikri de onun; o yüzden adını taşıyor… Lâtinceye çevirirken H ile G’yi karıştırmışlar: H: ﺧ G: ﻏ

  19. Artık programı yazabiliriz: PROGRAM Radyoaktif_Bozunma!--------------------------------------------------------------------------------------------------------! Bu program, yarı ömür ve başlangıç miktarı verildiğinde, belli bir süre sonunda kalan! radyoaktif madde miktarını hesaplar. Kullanılan değişkenler şunlardır:! BaslangicMiktari : Radyoaktif maddenin mg cinsinden başlangıç miktarı! YarıOmur : Radyoaktif maddenin gün cinsinden yarı ömrü! GecenZaman : Gün cinsinden geçen zaman! KalanMiktar : GecenZaman gün sonra geriye kalan miktar (mg olarak)!! Girdiler : BaslangicMiktari, YariOmur, GecenZaman! Çıktı : KalanMiktar!--------------------------------------------------------------------------------------------------------

  20. Radyoaktif bozunma programı… devam IMPLICIT NONEREAL :: BaslangicMiktari, YariOmur, GecenZaman, KalanMiktar! BaslangicMiktari, GecenZaman, YariOmur değerlerini oku PRINT *, “Başlangıç miktarı, yarı ömür ve gecen zaman değerlerini giriniz: ”READ *, BaslangicMiktari, YariOmur, GecenZaman ! KalanMiktar = BaslangicMiktari * 0.5**(GecenZaman/YariOmur) hesapla KalanMiktar = BaslangicMiktari * 0.5 ** (GecenZaman / YariOmur) ! KalanMiktar değerini yaz PRINT *, “Kalan miktar =“, KalanMiktar, “mg” END PROGRAM Radyoaktif_Bozunma

  21. Akış diyagramının parçaları: Akış bir karara göre ikiye (veya daha fazla yola) ayrılıyor: Yol çatallanıyor. Algoritmanın başı veya sonu Veri girişi veya çıkışı Döngü İşlem Bir alt yordam- alt algoritma Akış başka bir yerdedevam ediyor- oraya git 7

  22. Yazılım geliştirme aşamaları Çözümleme Veri düzeni ve algoritma tasarımı Kodlama Şelale modeli Test ve uygulama İteratif şelale modeli Bakım (maintenance)

  23. Öğrendiğimiz FORTRAN ifadeleri • PROGRAM program- ismi • PROGRAM Radyoaktif_bozunma • IMPLICIT NONE Type • REAL :: değişken-isimleri-listesi • REAL :: BaslangicMiktari, GecenZaman • INTEGER :: OgrenciSayisi, OgrenciNumarasi

  24. Öğrendiğimiz FORTRAN ifadeleri Girdi (input) ifadesi • READ *, okunacak-değişkenler-listesi • READ *, BaslangicMiktari, YariOmur, GecenZaman Çıktı (output) ifadeleri • PRINT *, yazılacak-değişkenler-listesi • PRINT *, “Kalan miktar = ”, KalanMiktar, “mg” • WRITE(*,*) yazılacak-değişkenler-listesi • WRITE(*, *) “Kalan miktar = ”, KalanMiktar, “mg”

  25. Öğrendiğimiz FORTRAN ifadeleri Atama (assignment) ifadesi • değişken = ifade • Delta = b*b – 4.* a * c • KalanMiktar = BaslangicMiktari * 0.5 ** (GecenZaman / YariOmur) DİKKAT: Cebir denklemi değildir. Bazı dillerde = yerine kullanılır. A * b = c + d gibi şeyler yazılamaz. • Bitiş: END program-ismi • END Radyoaktif_bozunma TanımlayıcılarProgram isimleri, değişken isimleri gibi tanımlayıcılar bir harfle başlar, harften sonra 30 veya daha az harf, sayı veya alt çizgi (_) bulunabilir. • KalanMiktar, YariOmur, A28, Radyoaktif_Bozunma

  26. Ödev: Harizmî’nin anısına… (Harizmî, daha önce ismin verdiğimiz kitabında ikinci derece denkleminin çözümüyle uğraşmış, bir çok hal için çözmüş ve ilk defa iki kök bulunduğunu fark etmiştir.) Işın Çekirdek, radyoaktif bozunma programını yazdıktan sonra şu denklemle karşılaştı: 2 x2 – 19 x + 35 = 0 Artık böyle durumlarda tek bu problemi çözmek yerine genel bir program yazmayı öğrenmişti. Siz de genel bir program yazın, hem bu denklemi hem de daha sonra çıkabilecek benzer denklemleri çözsün…

  27. 2 Temel FORTRAN • FORTRAN veri tipleri, sabitler, değişkenler • Aritmetik işlemler, aritmetik fonksiyonlar • Atama komutu • Veri girişi ve veri çıkışı • Program düzeni ve biçimi

  28. FORTRAN veri tipleri, sabitler, değişkenler: Veri tipleri • INTEGER Tam sayı • REAL Gerçek sayı • COMPLEX Kompleks sayı • CHARACTER Alfa-numerik • LOGICAL .TRUE. .FALSE.

  29. FORTRAN veri tipleri, sabitler, değişkenler: “Integer” sabitler Integer sabitler • Doğru: • 0 137 -2516 +17745 • Yanlış • 9,999 16.0 --5 7- 3.

  30. FORTRAN veri tipleri, sabitler, değişkenler: “Real” sabitler Real sabitler • Doğru: • 1.234 -0.01536 -1.536E-2 6.02E23 +5. • Yanlış • 5 1,234

  31. FORTRAN veri tipleri, sabitler, değişkenler: “Character” sabitler • “PDQ123-A” “Işın Çekirdek”‘Işın Çekirdek’ ‘Işın’’ın’ • Yanlış‘Işın’ın’“PDQ123-A’

  32. … değişkenler Önce ilan gerekiyor (decleration) type-specifier :: list INTEGER :: Ogrenci_Sayisi, Iterasyon İsterseniz ilk değerleri ilan sırasında verebiliyorsunuz: INTEGER :: Ogrenci_Sayisi = 65, Iterasyon = 2 REAL :: Kutle, Hiz REAL :: Kutle = 12., Hiz

  33. Character değişkenler CHARACTER (length-specifier) :: list Character(15) :: Isim, Soyad Character(15) :: Isim, Soyad , Sokak*20 Character :: Isim = “Atila” Sadece A’yı taşır. Character(10) :: Isim = “Ali” “Alibbbbbbb”taşır Kesme de yastıklama da sağdan yapılıyor.

  34. IMPLICIT NONE FORTRAN’da A-H, O-Z ile başlayan değişkenler otomatik olarak REAL sayılır I- N ile başlayan değişkenler: INDEX, JALE, NANEMOLLA… INTEGER sayılır. IMPLICIT NONE bu kabulü geçersiz kılar. IMPLICIT NONE kullanıldığında her değişkenin ne olduğu açıkça (explicit olarak) ilân edilmelidir.

  35. PARAMETER REAL, PARAMETER :: Pi = 3.141593 INTEGER, PARAMETER :: Ogrenci_Sayisi = 27 Bir başka ilk değer verme metodu. Fark: Bu değer program boynca değiştirilmez. Neden gerektiğinde 3.141593 yazmıyoruz?

  36. “Identifiers” • Identifiers: Tanımlayıcılar Program isimleri PROGRAM Ikinci_Derece_Denklem123 Değişken, parametre isimleri REAL NotOrtalamasi INTEGER OgrenciSayisi Harfle başlamalı. Devamı alfabe, sayı veya alt_çizgi olabilir. Toplam 31 karakter.

  37. FORTRAN programını parçaları • Heading • Specification • Execution • Subprogram • END PROGRAM

  38. Sorular • Veri tiplerini sayınız • Karakter sabitleri …. veya …. arasına alınmalıdır. • Tanımlayıcılar …. ile başlamalı ve en çok …. karakter olmalıdır. • Fortran programının parçalarını sayınız • Bu değişkenlerin hangileri yanlıştır? Neden? Kalori A-tipi 2tipi SaatteKilometre PS.175 Saatte_Kilometre N/4 Yuz+ YüzDolar

  39. Sorular • Aşağıdakiler doğru sabitler midir? Sabitin tipini söyleyiniz. Yanlışsa niçin? 1234 1,234 -1.234 -1. 0.123E+04 ‘ bir’ bir “bir” ‘Dalton’un yasasi’ 12.34YTL 123E4 E4 +1234 12+34 “12+34”

  40. Sorular Mu kelimesini bir INTEGER olarak tanımlayın INTEGER :: Mu Zaman ve Uzaklik kelimelerini REAL olarak tanımlayın REAL :: Zaman, Uzaklik Ad1, Ad2 20 karakterlik, Ad3 10 karakterlik CHARACTER sabitleridir. Tanımlayın CHARACTER(20) :: Ad1, Ad2, Ad3*10

  41. Sorular Limit1, Limit2, Limit3, başlangıç değerleri 10, 20, 30 olan tam sayılardır. Tanımlayın INTEGER :: Limit1 = 10, Limit2 = 20, Limit3 = 30 Zaman ve Uzaklik, REAL değişkenlerdir. Tanımlayınız. REAL :: Zaman, Uzaklik Bolum, “Kimya” başlangıç değerine sahip CHARACTER; Enf, 102 başlangıç değerine sahip INTEGER değişkendir. Tanımlayınız. CHARACTER(*) :: Bolum = ‘Kimya’ INTEGER :: Enf = 102 Ad1, Ad2 en çok 20 karakter boyunda, Ad3 en çok 10 karakterlik CHARACTER değişkenleridir. Tanımlayınız. CHARACTER(20) :: Ad1, Ad2, Ad3*10

  42. Sorular Bölüm, “Kimya Muhendisligi”ne eşit karakter değişkenidir. Tanımlayın. CHARACTER(*) :: Bolum = “Kimya Muhendisligi” Merih, 1.2E12 ve Dunya 1.5E10 değerlerini taşıyan sabitlerdir. Tanımlayınız. REAL, PARAMETER :: Merih = 1.2E12, Dunya 1.5E10

  43. Aritmetik işlemler ve fonksiyonlar • Bilin bakalım bunlar hangi işlemler: • + • - • / • * • ** B2 – 4AC B**2 – 4 * A * C 9. / 4.  2.25000 9 / 4  2 4./ 9.  0.444444 4 / 9  0

  44. Aritmetik işlemler ve fonksiyonlar • Karışıksa ne sonuç vereceğ belli olmaz; onun için karıştırmayın. • 3.0 + 8 / 5 ile 3 + 8. / 5 aynı sonucu vermez. • Bir durumda karıştırma tavsiye edilir: 2.0 ** 3  8.0 2.**3.  exp(3.ln(2.)

  45. Aritmetik işlemler ve fonksiyonlar • İşlem hiyerarşisi • 1. Önce ** (sağdan sola) • 2. Sonra * ve / (soldan sağa) • 3. Sonra + ve – (soldan sağa) Tereddüdünüz varsa parantez açın!

  46. Aritmetik işlemler ve fonksiyonlar

  47. … fonksiyonlar • X – Y bölü X + Y ‘nin mutlak değerinin logaritmasını alın • LOG(ABS((X – Y) / (X + Y))) • A2 – B2 – 2AB Cos T nin FORTRANcasını yazın • A ** 2 – B ** 2 – 2. * A * B * COS(T)

  48. Ne eksik? • Hesap yapıyoruz ama elde ettiğimiz değerleri bir yerlere koyamıyoruz: • Atama ifadesi: Assignment statement: = Variable = expression

  49. Atama ifadesi İlanlar, aslında hafızada (RAM’da) yer ayırır. REAL :: XKoord, YKoord INTEGER :: Sayi, Terim

  50. Atama ifadesi XKoord = 5.23 YKoord = SQRT(25.0) Sayi = 17 Terim = Sayi / 3 + 2 XKoord = 2.0 * XKoord 5.23 10.46 5.0 17 7