fortran90 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
FORTRAN90 PowerPoint Presentation
Download Presentation
FORTRAN90

Loading in 2 Seconds...

play fullscreen
1 / 186

FORTRAN90 - PowerPoint PPT Presentation


  • 289 Views
  • Uploaded on

FORTRAN90. Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin Arş. Gör. Hüseyin ARBAĞ Ders kitabı: FORTRAN90 for Engineers and Scientists Larry Nyhoff ve Sanford C. Leestma Prentice Hall 1997. 1 Bilgisayar programlama:. Programlama dilleri, makine dili, yüksek düzey diller

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'FORTRAN90' - shay


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


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

FORTRAN90

Prof. Dr. İskender Öksüz

Arş. Gör. Alpay Şahin

Arş. Gör. Hüseyin ARBAĞ

Ders kitabı: FORTRAN90 for Engineers and ScientistsLarry Nyhoff ve Sanford C. Leestma

Prentice Hall 1997

1 bilgisayar programlama
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ı

makine dili
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.
makine dili1
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

biraz daha hex
Biraz daha hex

Ondalık  Hex Hex  Ondalık

1 = 1

10 = A

36 = 24 A5 = 165

147 = 93 DD = 221

255 = FF

peki fortran
Peki FORTRAN?

X = A * B + C

X = A * B + C

st seviye dili
Üst seviye dili
  • FORTRAN
  • C
  • Pascal
  • Basic
  • C++
  • Java
  • C#

Üst seviye dili

Derleyici (compiler)(Java’da ve scriptlerde yok)

Makine dili

derleme compilation
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

bitti mi
Bitti mi?

Okumaprogramı

Bağlama- link

İcra edilebilir program: ExecutableÇarp_Topla.exe

Object program

Ekrana yazmaprogramı

… programı

… programı

dll :dynamic link library

hatalar
Hatalar:
  • Derleme hataları (Compiler error)
  • Bağlama hataları (Falan modülü bulamadım)
  • İcra hataları (Run time error)
bir m hendislik problemi nas l z l r
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.

bir m hendislik problemi nas l z l r1
Bir mühendislik problemi nasıl çözülür?

Biraz daha genel yazalım ve problemin verilerine isim verelim:

hesaplama algoritmas kural m
Hesaplama algoritması kuralım
  • BaslangicMiktari, YariOmur, GecenZaman değerlerini oku
  • KalanMiktar’ı hesapla
  • KalanMiktar değerini yaz
algoritma
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)

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

Başla

BaslangicMiktariGecenZamanYariOmurdeğerlerini oku

Akış diagramı(Flowchart)

KalanMiktar = BaslangicMiktari * 0.5**(GecenZaman/YariOmur)hesapla

KalanMiktardeğerini

yaz

Dur

ara algoritma el harezm
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: ﻏ

art k program yazabiliriz
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!--------------------------------------------------------------------------------------------------------

radyoaktif bozunma program devam
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

ak diyagram n n par alar
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

yaz l m geli tirme a amalar
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)

rendi imiz fortran ifadeleri
Öğ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
rendi imiz fortran ifadeleri1
Öğ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”
rendi imiz fortran ifadeleri2
Öğ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
slide26
Ö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…

2 temel fortran
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
fortran veri tipleri sabitler de i kenler veri tipleri
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.
slide29

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.
fortran veri tipleri sabitler de i kenler real sabitler
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
fortran veri tipleri sabitler de i kenler character sabitler
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’
de i kenler
… 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

character de i kenler
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.

implicit none
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.

parameter
PARAMETER

REAL, PARAMETER :: Pi = 3.141593

INTEGER, PARAMETER :: Ogrenci_Sayisi = 27

Bir başka ilk değer verme metodu. Fark: Bu değer program boyunca değiştirilmez.

Neden gerektiğinde 3.141593 yazmıyoruz?

identifiers
“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.

fortran program n par alar
FORTRAN programını parçaları
  • Heading
  • Specification
  • Execution
  • Subprogram
  • END PROGRAM
sorular
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

sorular1
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”

sorular2
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

sorular3
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

sorular4
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

aritmetik i lemler ve fonksiyonlar
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

aritmetik i lemler ve fonksiyonlar1
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.)
aritmetik i lemler ve fonksiyonlar2
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!

fonksiyonlar
… 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)
ne eksik
Ne eksik?
  • Hesap yapıyoruz ama elde ettiğimiz değerleri bir yerlere koyamıyoruz:
  • Atama ifadesi: Assignment statement:

=

Variable = expression

atama ifadesi
Atama ifadesi

İlanlar, aslında hafızada (RAM’da) yer ayırır.

REAL :: XKoord, YKoord

INTEGER :: Sayi, Terim

atama ifadesi1
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

atama ifadesi2
Atama ifadesi
  • A = B ne demek?
  • A = B icra edildiği anda
  • A ile B’yi yer değiştirmek istersek?
  • C = A
  • A = B
  • B = C icra edilir

-18.567

-18.567

122.45

122.45

atama ifadesi3
Atama ifadesi
  • A = A +B ne demek?

Böyle bir ifade acemi programcıyı şaşırtabilir.

  • A = A + B icra edildiği anda…

103.883

h zl s nav
Hızlı sınav

Aşağıdakilerin geçerli atama ifadeleri olup olmadığını, geçersizse sebebini söyleyin.

INTEGER :: M, N

REAL :: Pi, Alfa

Pi = 3.141593 3 = N N = N+ 1

N + 1 = N Alfa = 1 Alfa = “1”

Alfa = Alfa M = N = 1

Şu FORTRAN atama komutlarını yazınız:

Hiz ile Zaman değişkenlerini çarpıp sonucu Mesafe’ye koyun.

Mesafe = Hiz * Zaman

A2+B2 ‘nin karekökünü C ye

Sayi adlı tam sayı değişkeninin değerini 1 arttirin

C = SQRT(A ** 2 + B **2)

Sayi = Sayi +1

serbest d problemi
Serbest düşüş problemi

z = ½ gt2 + v0t + h0 v = gt +v0

Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir

Hiz = g * Zaman + Vsifir

veri giri k
Veri giriş çıkışı

Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir

Hiz = g * Zaman + Vsifir

READ *, giren veri-listesi

READ (*, *) giren veri-listesi

READ *, g, zaman, vsifir, hsifir

PRINT *, çıkan veri-listesi

WRITE (*, *) çıkan veri-listesi

PRINT *, “Yükseklik = “, Z, “m”, “Hız = ”, Hiz, “m/s”

serbest d probleminin giri k l h li
Serbest düşüş probleminin giriş-çıkışlı hâli

PROGRAM Serbest_Dusme

!--------------------------------------------------------------------------------------------------

! Bu program yüksekliği z = ½ gt2 + v0t + h0 ve hızı v = gt +v0 denklemiyle bulur.

! Başlangıçta kullanıcıdan g, Zaman, Vsifir ve Hsifir değerlerini vermesi istenir

! Bu değerler girildiğinde yükseklik ve hız m ve m/s cinsinden ekranda belirir

!--------------------------------------------------------------------------------------------------

IMPLICIT NONE

REAL g, Zaman, Vsifir, Hsifir

PRINT *, “Yer cekimi sabiti g, zaman ve baslangic hizi ve yüsekligi degerlerini giriniz”

READ *, g, Zaman, Vsifir, Hsifir

Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir

Hiz = g * Zaman + Vsifir

PRINT *, “Yukseklik = “, Z, “m”, “ Hiz = ”, Hiz, “m/s”

PRINT *, “Hosca kalin…”

END PROGRAM Serbest_Dusme

not end ve stop komutlar
Not: END ve STOP komutları
  • Eskiden END program dosyasının sonunu gösterirdi. Programlar

STOP

END

diye biterdi. Şimdi END  STOP + END

anlamına geliyor. END programın sonunda kullanılır. STOP’u istediğiniz yerde kullanabilirsiniz.

  • STOP veya STOP 15 veya STOP “BITTI”
program d zeni ve bi imi
Program düzeni ve biçimi
  • Satır en çok 132 karakter uzunluktadır
  • Komutları aralarına ; koyarak tek satıra yazabilirsiniz
  • Satır altta devam edecekse sonuna & konur
  • CHARACTER zincirini devam ettirmek için hem satır sonuna, hem diğer satırın başına & konur.
  • PRINT *, “Nasilsiniz? İyi misiniz? &

& Korkarim iyisiniz. :-)”

  • “Comment” için satır ! ile başlatılır. Arada da kullanılır.

REAL Hiz ! Herhangi bir andaki hiz

  • İfadelerde etiket (statement label) kullanılıyorsa bu ifadeden önce gelir, etiket ile ifade arasında en az bir boşluk bırakılır ve etiket 1 – 99999 arasında bir sayı olur.
  • İfadeler icra edilir (executable) veya icra edilmeyen (non-executable) diye ayrılır.
ak kontrol
Akış kontrolü

READ *, A, B, C

DELTA = B*B – 4.* A * C

DELTA = SQRT(DELTA)

X1 = (-B + DELTA) / (2. * A)

X2 = (-B - DELTA) / (2. * A)

PRINT *, X1, X2

ak kontrol devam
Akış kontrolü devam…

READ *, A, B, C

DELTA = B*B – 4.* A * C

IF(DELTA > 0) THEN

DELTA = SQRT(DELTA)

X1 = (-B + DELTA) / (2. * A)

X2 = (-B - DELTA) / (2. * A)

PRINT *, “Kokler gercek: ”, X1, X2

END IF

ak kontrol devam1
READ *, A, B, C

DELTA = B*B – 4.* A * C

IF(DELTA > 0) THEN

DELTA = SQRT(DELTA)

X1 = (- B + DELTA) / (2. * A)

X2 = (- B – DELTA) / (2. * A)

PRINT *, “Kokler gercek: ”, X1, X2

ELSE

DELTA = SQRT(-DELTA)

X1R = -2.* B

X2R = X1R

X1IM = DELTA / (2. * A)

X2IM = -X1I

PRINT *, “Kokler kompleks: X1 = ”, X1R, XIIM, “ ve X2 =“, X2R, X2IM

END IF

Akış kontrolü devam…
slide62

READ *, A, B, C

DELTA = B*B – 4.* A * C

IF(DELTA > 0) THEN

DELTA = SQRT(DELTA)

X1 = (- B + DELTA) / (2. * A)

X2 = (- B – DELTA) / (2. * A)

PRINT *, “Kokler gercek: ”, X1, X2

ELSE IF (DELTA < 0) THEN

DELTA = SQRT(-DELTA)

X1R = -B / (2. * A)

X2R = X1R

X1IM = DELTA / (2. * A)

X2IM = -X1I

PRINT *, “Kokler kompleks: X1 = ”, X1R, XIIM, “ ve X2 =“, &

X2R, X2IM

ELSE

X1 = -B / (2. * A)

X2 = X1

PRINT*, “Kokler esit, X1 = X2 = ”, X1

END IF

slide63
Ödev:
  • İkinci derece denklem çözen programı yazıp çalıştırın ama sıra şöyle olsun: Önce diskriminant >0, sonra 0, sonra pozitif.
  • 0- 100 arasındaki öğrenci notunu okuyup,

0- 20 ye F

20- 40 a D

40- 60 a C

60- 80 e B

80- 100 e A

veren bir program yazınız.

bir ba ka problem
Bir başka problem:

Bir program yazınız:

Haftanın günlerini sayı olarak okusun.

Günün adını yazsın:

1 ise Pazartesi, 2 ise Salı, … ve 7 ise Pazar…

g n program
Gün programı

PROGRAM HAFTANIN_GUNLERI

IMPLICIT NONE

INTEGER GUN

PRINT *, “HAFTANIN HANGI GUNU?”

READ *, GUN

IF(GUN == 1) THEN

PRINT *, “PAZARTESI”

STOP

ELSE IF(GUN == 2) THEN

PRINT *, “SALI”

STOP

ELSE IF(GUN == 3) THEN

PRINT *, “CARSAMBA”

STOP

haftaya devam
Haftaya devam:

IF(GUN == 4) THEN

PRINT *, “PERSEMBE”

STOP

ELSE IF(GUN == 5) THEN

PRINT *, “CUMA”

STOP

ELSE IF(GUN == 6) THEN

PRINT *, “CUMARTESI”

STOP

ve haftanin sonu
…VE HAFTANIN SONU

IF(GUN == 7) THEN

PRINT *, “PAZAR”

STOP

ELSE

PRINT *, “GIRDIGINIZ GUNDE BIR & &YANLISLIK OLMASIN?”, GUN

END IF

END PROGRAM HAFTANIN_GUNLERI

ayn probleme bir ba ka z m
Aynı probleme bir başka çözüm:

SELECT CASE (GUN)

CASE (1)

PRINT *, “PAZARTESI”

CASE (2)

PRINT *, “SALI” CASE (1)

CASE (3)

PRINT *, “CARSAMBA”

CASE (4)

PRINT *, “PERSEMBE”

CASE (5)

PRINT *, “CUMA”

CASE (6)

PRINT *, “CUMARTESI”

CASE (7)

PRINT *, “PAZAR”

CASE DEFAULT

PRINT *, “GIRDIGINIZ SAYI 1 ILE 7 ARASINDA DEGIL: “, GUN

END SELECT

END PROGRAM HAFTANIN_GUNLERI

imdi resmen g relim if
Şimdi “resmen” görelim: IF

IF (logical expression) THEN

ifadeler…

END IF

ELSE de bulunabilir:

IF (logical expression) THEN

ifadeler…

ELSE

başka ifadeler…

END IF

ba ka
Başka?

IF (logical expression) THEN

ifadeler…

ELSE

IF (logical expression) THEN

ifadeler…

END IF

END IF

ve else if
…VE ELSE IF

IF (logical expression) THEN

ifadeler…

ELSE IF(logical expression) THEN

başka ifadeler…

ELSE IF(logical expression) THEN

daha da başka ifadeler

ELSE

ifadeler.. ifadeler…

END IF

select case
SELECT CASE

SELECT CASE(selector)

CASE (alternatif1)

ifadeler…

CASE (alternatif2)

ifadeler…

------

CASE DEFAULT

ifadeler…

END CASE

alternatif

diye belirttiğimiz etiketlerin içinde INTEGER, CHARACTER veya LOGICAL sabit veya ifade olabilir.

REAL olamıyor.. Neden?

DEFAULT ne demek?

if ve switch ifadeleri isim alabilir
IF ve SWITCH ifadeleri isim alabilir

İsim: IF(logical expression) THEN

-----

END IF İsim

İsim: SELECT(selector)

------

END SELECT İsim

sabitler ve de i kenler
Sabitler ve değişkenler

Sabitler ve değişkenleri karıştırdığınızı görüyorum.

Yüzüne bakınca tipini anlıyorsanız sabittir:

5 5. “BES” 6.02E23 .TRUE. (3.57, 2,85)

Anlayamıyorsanız değişkendir:(Değişken tiplerini o yüzde “ilan” etmek zorunda kalıyoruz.)

BES DEGISKEN SABIT KARAKTER

Bu PRINT komutunda kimler sabit, kimler değişken?

PRINT *, “BES = ”, 5., “GERCEK = ”, .TRUE., “X1= ”, X1

mant k operat rleri zeti
Mantık operatörleri özeti:

Diğer mantık operatörleri

Kıyas operatörleri:

Hiyerarşi: .NOT. .AND. .OR. .EQV. (veya .NEQV.)

al t rmalar
Alıştırmalar:

P, Q ve R sırasıyla .TRUE.,.TRUE ve .FALSE. değerlerine sahiptir. Buna göre aşağıdaki ifadelerin sonucunu bulunuz:

P .AND. .NOT. Q .NOT. P .AND. Q

P .AND. Q .OR. .NOT. R P .OR. Q .AND. Q

P .AND. .NOT. Q .OR. R

P .AND. .NOT. (Q .OR. R)

 .TRUE.

 .FALSE.

 .TRUE.

 .TRUE.

 .FALSE.

 .FALSE.

al t rmalar1
… alıştırmalar

INTEGER:: NUMBER = 3, COUNT = 4, SUM = 5

Aşağıdaki mantık ifadelerinin sonucunu bulunuz:

SUM – NUMBER <= 4 0 <= COUNT <= 5

NUMBER**2 + COUNT**2 = = SUM**2

NUMBER < COUNT .OR. COUNT < SUM

(NUMBER + 1 < SUM) .AND. .NOT. (COUNT + 1 < SUM)

OLMAZ!

 .TRUE.

 .TRUE.

 .TRUE.

 .TRUE.

al t rmalar2
…alıştırmalar

INTEGER:: X sıfırdan farklıysa .TRUE. sonucunu veren bir mantık ifadesi yazınız:

X .NE. 0 veya X /= 0

X -10 ve +10 kapalı aralığındaysa .TRUE. sonucunu veren bir mantık ifadesi yazınız

-10 < = X <= 10

(-10 <= X) .AND. (X <= 10)

olmaz

al t rmalar3
…alıştırmalar

REAL:: X, Y

X ve Y’nin ya birlikte negatif, yahut birlikte pozitif olduklarını .TRUE. Sonucunu veren bir mantık ifadesi yazınız.

(X < 0) .EQV. (Y < 0)

al t rmalar4
…alıştırmalar

Aşağıdakilerden hangileri geçerli IF ifadeleridir?

X

IF( A > B) PRINT *, A

IF ( X <= Y) STOP

IF(1 <= N <= 10) N = 10

IF ( X = = 10) INTEGER:: TAM

IF B < C N = N + 1

IF (A = X) READ *, Y

IF (N > 1) PRINT *, “*”

X

X

al t rmalar5
…alıştırmalar

IF(X >= Y)THEN

PRINT*, X

ELSE

PRINT*, Y

END IF

X ve Y aşağıdaki değerleri aldığında sonuç nedir?

X = 5, Y = 6

X = 5, Y = 5

X = 6, Y = 5

6

5

6

al t rmalar6
…alıştırmalar

IF( X >= 0) THEN

IF(Y >= 0) THEN

PRINT *, X + Y

ELSE

PRINT *, X – Y

END IF

ELSE

PRINT *, Y – X

END IF

Aşağıdaki değerler için sonucu bulun

X = 5, Y = 5

X = 5, Y = -5

X = -5, Y = 5

10

10

10

al t rmalar7
…alıştırmalar

IF( N > = 90) THEN

PRINT *, “PEKIYI”

ELSE IF (N >= 80) THEN

PRINT *, “IYI”

ELSE IF (N >= 70) THEN

PRINT *, “ORTA” ELSE

PRINT *, “KOTU”

END IF

Aşağıdaki değerler için sonucu bulun

N = 100

N = 90

N = 89

N = 70

N = 0

PEKIYI

PEKIYI

IYI

ORTA

ZAYIF

al t rmalar8
…alıştırmalar

N tam sayısı negatif veya 100’den büyükse çıktıya “ARALIK DISI” yazan bir IF ifadesi yazın:

IF( N < 0 .OR. N > 100) PRINT *, “ARALIK DISI”

al t rmalar9
…alıştırmalar

REAL:: X;

INTEGER N

X <= 1.5 ise N = 1, 1.5 < X < 2.5 ise N =2 ve X bunların dışındaysa N = 3 değerini veren bir IF yazınız. Yazarken programınızın hızlı çalışmasına dikkat edin.

IF (X< 1.5) THEN

N = 1

ELSE IF (X < 2.5) THEN

N = 2

ELSE

N = 3

END IF

IF (X < 1.5) N = 1

IF (1.5< X .OR. X < 2.5) N = 2

IF (X >= 2.5) N = 3

al t rmalar10
…alıştırmalar

REAL:: NUMBER

SELECT CASE(NUMBER)

CASE DEFAULT

PRINT*, “BOS VER”

CASE(99)

PRINT*, NUMBER + 99

CASE(-1)

PRINT*, NUMBER – 1

END SELECT

NUMBER = 99 isesonuç nedir?

198

NUMBER = -1 ise?

-2

NUMBER = 50 ise?

BOS VER

al t rmalar11
…alıştırmalar

REAL:: ORTALAMA

READ*, ORTALAMA

SELECT CASE (INT(ORTALAMA)

CASE (90:)

NOT = “A”

CASE (80:89)

NOT = “B”

CASE (70:79)

NOT = “C”

CASE (60:69)

NOT = “D”

CASE(:59)

NOT = “F”

END SELECT

4 tekrarl icra
4 Tekrarlı icra

IF ve SELECT komutlar olmasa FORTRAN programında ifadeler yazılış sırasına göre yerine getirilirdi. Programlar “karar” veremezdi.

Düz akışı değiştiren son komut tipi “tekrar” yapılarıdır.

Tekrar yapıları bir şart yerine gelinceye kadar aynı işlemler kümesinin bir daha- bir daha yapılmasını sağlar.

saya l do d ng leri
Sayaçlı DO döngüleri

DO kontrol-değişkeni = ilk-değer, son-değer, adım

ifadeler

END DO

kontrol-değişkeni : Bir tam sayı değişkenidir

ilk değer : kontrol-değişkeninin alacağı ilk değerdir.

son-değer : kontrol-değişkeninin alabileceği son değerdir

adım : Döngüden her geçişte ilk değer’e eklenecek tam sayıdır

do kontrol de i keni ilk de er son de er ad m ifadeler end do
DO kontrol-değişkeni = ilk-değer, son-değer, adım ifadelerEND DO

!Misal, 1’den N’e kadar tek sayıların toplamı

!Misal: 1’den N’e kadar sayıların toplamı:

INEGER:: I, N

REAL:: TOPLAM

----------

TOPLAM = 0.

DO I = 1, N

TOPLAM = TOPLAM + I

END DO

, 2

do etiket kontrol de i keni ilk de er son de er ad m ifadeler etiket son icra edilebilir komut
DO etiket kontrol-değişkeni = ilk-değer, son-değer, adım ifadeleretiket son-icra-edilebilir-komut

!Misal, 1’den N’e kadar tek sayıların toplamı

!Misal: 1’den N’e kadar sayıların toplamı:

INEGER:: I, N

REAL:: TOPLAM

----------

TOPLAM = 0.

DO I = 100, 1, N

100 TOPLAM = TOPLAM + I

, 2

s n f ortalamas n n bulunmas
Sınıf ortalamasının bulunması

!Sınıfta 54 öğrenci var. Aldıkları notlar tek tek !girilecek ve öğrenci sayısı (OGRENCI) kadar !not girildiğinde ortalama hesaplanacak:

PROGRAM ORTALAMA_AL

IMPLICIT NONE

INTEGER:: OGRENCI, SAYAC

REAL:: TOPLAM, ORTALAMA, NOT

s n f ortalamas n n bulunmas1
Sınıf ortalamasının bulunması

TOPLAM = 0.

DO SAYAC = 1, OGRENCI

PRINT*, “NOT GIRINIZ”

READ*, NOT

TOPLAM = TOPLAM + NOT

END DO

ORTALAMA = TOPLAM / REAL(OGRENCI)

PRINT*, OGRENCI, “ OGRENCININ ORTALAMA & &NOTU = “, ORTALAMA

END PROGRAM ORTALAMA_AL

ayn problemin bir ba ka z m
Aynı problemin bir başka çözümü

TOPLAM = 0.

DO SAYAC = OGRENCI, 1, -1

PRINT*, “NOT GIRINIZ”

READ*, NOT

TOPLAM = TOPLAM + NOT

END DO

ORTALAMA = TOPLAM / REAL(OGRENCI)

PRINT*, OGRENCI, “ OGRENCININ ORTALAMA & &NOTU = “, ORTALAMA

END PROGRAM ORTALAMA_AL

h zl s nav1
Hızlı sınav

MERHABAMERHABAMERHABAMERHABAMERHABA

MERHABAMERHABAMERHABA

1 2 / 2 3/ 3 4/ 4 5/ 5 6/ 6 7

Çıktı nedir:

DO I = 1, 5

PRINT*, “MERHABA”

END DO

DO I = 1, 5, 2

PRINT*, “MERHABA”

END DO

DO I = 1, 6

PRINT*, I, I+1

END DO

h zl s nav2
…hızlı sınav

Çıktı nedir:

DO I = 6, 1, -1

PRINT*, I

PRINT*

PRINT*, I**2

END DO

DO I = 6, 6

PRINT*, “MERHABA”

END DO

DO I = 6, 5

PRINT*, “MERHABA”

END DO

6 5

36 25…

MERHABA

ki kural 1
İki kural: 1
  • DO parametreleri döngünün içinde değiştirilemez:

DO I = 1, 10

PRINT*, I

I = I +1

END DO

OLMAZ

ki kural 2
İki kural: 2
  • DO döngüleri içiçe geçebilir:

DO I = 1, 5

PRINT*, I

DO J = 1, 4

PRINT*, I + J

END DO

END DO

mant k k l dolar
Mantık çıkışlı DOlar

DO

ifadeler

IF(mantık-ifadesi) EXIT

daha-daha-ifadeler

END DO

do ifadeler if mant k ifadesi exit daha daha ifadeler end do
DOifadeler IF(mantık-ifadesi) EXITdaha-daha-ifadelerEND DO

Ortalama probleminin mantık DO’suyla çözümü

TOPLAM = 0.

DO SAYAC = 1, OGRENCI

PRINT*, “NOT GIRINIZ”

READ*, NOT

TOPLAM = TOPLAM + NOT

END DO

SAYAC = 1

DO

PRINT*, “NOT GIRINIZ”

READ*, NOT

TOPLAM = TOPLAM + NOT

SAYAC = SAYAC +1

IF(SAYAC > 53) EXIT

END DO

SAYAC = 0

DO SAYAC = SAYAC +1

IF(SAYAC > 53) EXIT

PRINT*, “NOT GIRINIZ”

READ*, NOT

TOPLAM = TOPLAM + NOT

END DO

cycle
CYCLE

Bir şart yerine geldiği zaman döngünün o tekrarı yapılmaz: 1’den N’e kadar sayıları toplama:

DO I = 1, N

TOPLAM = TOPLAM + I

END DO

DO I = I +1 IF(I>N) EXIT TOPLAM = TOPLAM + IEND DO

DO I = I +1 IF(I>N) EXIT IF(I/2*2 .EQ. 2) CYCLE !SADECE TEK SAYILAR TOPLAM = TOPLAM + IEND DO

h zl test
Hızlı test

“pre-test” ve “post-test” döngülerinin farkı nedir?

“pre-test” döngüsünün içindeki komutlar en az bir kere yapılır

“post-test” döngüsünün içindeki komutlar en az bir kere yapılır

X

h zl test1
…hızlı test

Programcılar üç (dört) tip hata yaparlar:

1- Başlangıçta bol gramer hatası- Bunlar derlemede yakalanır

2- Program çalışırken ortaya çıkacak hatalar: 0’a bölmek, sayı değişkenine karakter okumak gibi. Bunlar icra aşamasında ortaya çıkar.

3- Mantık hataları – bunları ancak testlerin yanlış sonuç vermesiyle anlaşılır…

4- Link zamanı hataları: Yazılamayan dosyalar, bulunamayan alt programlar…

h zl test2
…hızlı test

SQRT fonksiyonunun içine negatif bir sayı girmesi …………………….. hatasıdır

Unutulmuş bir parantez veya tırnak …………..hatasıdır ve ……………………..bunu yakalar.

Bir algoritma tasarımında bir adımın ihmal edilmesi …………………. hatasıdır. ………..bunu yakalar

icra zamanı

gramer

derleyici

mantık

????

h zl test3
…hızlı test

SAYI tam sayı ise aşağıdaki program parçası nasıl bir çıktı verir?

SAYI = 1

DO IF(SAYI > 100) EXIT PRINT*, SAYI SAYI = 2 * SAYI

END DO

h zl test4
…hızlı test

SAYI ve LIMIT tam sayı ise aşağıdaki program parçası 4 ve -2 girdileri ile nasıl bir çıktı verir?

READ*, LIMIT

SAYI = 0

DO IF(SAYI > LIMIT) EXIT PRINT*, SAYI SAYI = SAYI + 1

END DO

LIMIT <= 4 0/ 1/ 2/ 3/ 4

LIMIT <= -2

h zl test5
…hızlı test

SAYI ve LIMIT tam sayı ise aşağıdaki program parçası 4 ve -2 girdileri ile nasıl bir çıktı verir?

READ*, LIMIT

SAYI = 0

DO PRINT*, SAYI IF(SAYI > LIMIT) EXIT

SAYI = SAYI + 1END DO

LIMIT <= 4 0/ 1/ 2/ 3/ 4/ 5

LIMIT <= -2 0

ger ek problemler 1 seri toplam
Gerçek problemler: 1) Seri toplamı

Sin(x) değerini hesaplayan bir program yazalım…

Farklı x değerleri için farklı seriler kullanılabilir… Biz küçük x değerlerinde çalışacak bir program yazacağız… Kimbilir? Belki büyük x’lerde de çalışır…

Sinx = Sin 0 + Cos 0 x – Sin 0 x2/2! – Cos 0 x3/3! + Sin 0 x4/4!..

Sin x = x – x3/3! + x5/5! – x7/ 7! + ...

ger ek problemler 1 seri toplam1
Gerçek problemler: 1) Seri toplamı

Sin x = x – x3/3! + x5/5! – x7/ 7! + ...

PROGRAM SINUS_HESAPLA

IMPLICIT NONE

REAL:: X, SINUS, HASSASIYET, TERIM, ESKI

INTEGER :: SAY, ENFAZLA

READ *, X, HASSASIYET, ENFAZLA

SAY = 2; SINUS = X; ESKI = X;

DO

TERIM = - X*X*EKSI / (SAY*(SAY+1))

SINUS = SINUS + TERIM

ESKI = TERIM

SAY=SAY+2

ger ek problemler 1 seri toplam2
Gerçek problemler: 1) Seri toplamı

Sin x = x – x3/3! + x5/5! – x7/ 7! + ...

SAY = 2; SINUS = X; ESKI = X; FKT= 1; ISARET = 1

DO

TERIM = - X*X*EKSI / (SAY*(SAY+1))

SINUS = SINUS + TERIM

ESKI = TERIM

SAY=SAY+2

IF((SAY .GT. ENFAZLA).OR.(ABS(TERIM) .LT. HASSASIYET)) &EXIT

END DO

PRINT *, X, SINUS, SIN(X)

END PROGRAM SINUS_HESAP

en k k kareler
…en küçük kareler

Yapılması gereken: Kavuniçi parçaların toplamını minimize etmek!

Toplamını?...

Mutlak değerlerinin toplamını veya karelerinin toplamını.

en k k kareler1
…en küçük kareler

Eğrinin denklemi y = ax + b ise farkların karelerinin toplamını en küçük yapacak şekilde a ve b ayarlanmalı.

Her xi değeri için fark2 = (a xi+ b – yi)2

Fark karelerinin toplamı = Σi(a xi+ b – yi)2

En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir…

en k k kareler2
…en küçük kareler

Fark karelerinin toplamı = Σi(a xi+ b – yi)2

En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir…

a’ya göre: 2 Σixi(a xi+ b – yi) = 0düzenlersek: a Σixi2+ b Σixi – Σixiyi = 0

b’ye göre: 2 Σi(a xi+ b – yi) = 0düzenlersek: a Σi xi+ n b – Σiyi = 0

en k k kareler3
…en küçük kareler

aΣixi2+ bΣixi = Σixiyi

aΣi xi+ b n = Σiyi

İki bilinmeyen için iki denklem!

Toplamlara isim verelim… Kolay olsun:X2 = Σixi2 X =Σixi XY = Σixiyi Y = Σiyi

D = X2 * n – X*X

a = (XY * n – X * Y) / D

b = (X2 Y – X * XY) / D

en k k kareler4
…en küçük kareler

X2 = Σixi2 X =Σixi XY = Σixiyi D = X2 * n – X*X

a = (XY * n – X * Y) / D b = (X2 Y – X * XY) / D

_______________________________________________________________________________________________________

REAL :: X2, X, XY, Y, D, A, B, IKS, YE

INTEGER :: N, SAYAC

READ *, N

X2 = 0; X = 0; XY = 0; Y = 0

DO SAYAC = 1, N

READ *, IKS, YE

X = X + IKS X2 = X2 + IKS * IKS

XY = XY + IKS * YE

Y = Y + YE

END DO

en k k kareler5
…en küçük kareler

X2 = Σixi2 X =Σixi XY = Σixiyi D = X2 * n – X*X

a = (XY * n – X * Y) / D b = (X2 Y – X * XY) / D

_______________________________________________________________________________________________________

DO SAYAC = 1, N

READ IKS, YE

X = X + IKS X2 = X2 + IKS * IKS

XY = XY + IKS * YE

Y = Y + YE

END DO

D = X2 * REAL(N) – X * X

A = (XY * REAL(N) – X * Y) / D

B = (X2* Y – X * XY) / D

PRINT *, N, A, B

daha ik iktilar
DAHA ŞIK ÇIKTILAR

Çıktılar canınızı sıktı…

PRINT *, LIRA, “TL”, YENILIRA, “YTL EDER”

1.2000000 E +07TL12.00000000YTL EDER

PRINT 20, LIRA, “TL”, YENILIRA, “YTL EDER”

20 FORMAT( F12.0, 2X, A, 5X, F8.2, 2X, A)

12552000 TL 12.55 YTL EDER

---------------------------------------

daha ik iktilar1
DAHA ŞIK ÇIKTILAR

En küçük kareler probleminde…

PRINT *, N, A, B

12 -7.92923532E-01 2.49998734E+02

Gibi abuk çıktılar verecektir…

Halbuki

PRINT 55, N, A, B

55 FORMAT( 1X, I5, F12.5, 5X, F12.1)

7 -0.79294 249.9

----------------------------------

daha k kt lar
…daha şık çıktılar

PRINT 55, N, A, B

55 FORMAT( 1X, I5, F12.5, 5X, F12.1)yerine

PRINT “( 1X, I5, F12.5, 5X, F12.1)”, N, A, B

PRINT 20, LIRA, “TL”, YENILIRA, “YTL EDER”

20 FORMAT( F12.0, 2X, A, 5X, F8.2, 2X, A)yerine

PRINT “( F12.0, 2X, A, 5X, F8.2, 2X, A)”, LIRA, “TL”, & YENILIRA, “YTL EDER”

yazabiliriz...

daha k kt lar1
…Daha şık çıktılar…

Format ifadeleri: Örnekler: 1234, 3.14159 ve 6.02 10**23

Iw I8 1234

Fw.d F12.4 3.1416

Ew.d E14.4 0.3142E+01

ESw.d ES14.4 6.0200E+23

ENw.d EN14.4 602.0000E+21

A

Tc T20

nX 5X

İlk karakter:boşluk: Normal tek aralık 0: Çift aralık +: Üstüne yaz

1: Sonraki sayfadan başla

h zl s nav3
Hızlı sınav

(Doğru mu yanlış mı?) İlk karakter 0 ise bir sonraki sayfaya gidilir.

(Doğru mu yanlış mı?) 3I2 ile I2, I2, I2 aynıdır.

(Doğru mu yanlış mı?) F10.3 formatındaki 10, ondalık işaretinin solundaki hane sayısını, 3 de sağındaki hane sayısını verir.

(Doğru mu yanlış mı?) T formatı çıktı ve girdilerin belli bir noktada kesilmesi (truncate) için kullanılır.

(Doğru mu yanlış mı?) Format PRINT’deki bilgiye göre kısaysa, sağa bakan ilk parantezden itibaren tekrarlanır.

X

X

X

h zl s nav4
…hızlı sınav

(Doğru mu yanlış mı?) F format tanımlayıcısında, gerçek değerler, virgülden sonra belirtilen rakam sayısın uyacak şekilde yuvarlanır.

_____ çıktıyı bir sonraki satıra geçirir.

N = 100 ise, PRINT ‘(1X, 4I3)”, N ifadesi, 100 değerini kaç defa yazdıracaktır?

/

1 defa

h zl s nav5

REAL :: X = 234.56, Y = -1.0

INTEGER :: I = 987, J = -44

CHARACTER(20) :: Form = “(1X, I5, F10.1)”

…hızlı sınav

Ne çıkar?

PRINT 5, I, X

5 FORMAT(1X, “I = “, I3, 2X, “X =“, F8.3, “BITTI”)

I =987 X = 234.560BITTI

--------------------------------------

PRINT Form, I, X, J, Y

987 234.5 -44 -1.0

--------------------------------------

PRINT ‘(1X, F10.0 / 1X, I3, T11, I5)’, X, I, J

234.

987 -44

--------------------------------------

Aşağıdaki sorularda, şu ifadelerin daha önce yazıldığını kabul ediniz:

REAL :: X = 234.56, Y = -1.0

INTEGER :: I = 987, J = -44

CHARACTER(20) :: Form = “(1X, I5, F10.1)”

h zl s nav6
…hızlı sınav

CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)”

ve X = 123.45, Y = 6.0, I = 99, J = 876

Bu değerlerin alınabilmesi için veri nasıl yazılmalı?

READ *, I, J, X, Y

99 876 123.45 6.

READ “(2I3, 2F6.0)”, I, J, X, Y

b99876123.45bbbbb6

-------------------------

READ ‘(I3, F7.0, 2X, I5, T20, F5.0)’, I, X, J, Y

b99 123.45bb876 bbbb6

-------------------------

h zl s nav7
…hızlı sınav

CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)”

ve X = 123.45, Y = 6.0, I = 99, J = 876

Bu değerlerin alınabilmesi için veri nasıl yazılmalı?

READ FORM, I, J, X, Y

b99876123456

-------------------------

READ 9, I, X, J, Y

9 FORMAT(I2, F5.2 / I3, F2.1)

9912345

------------------------- 87660

-------------------------

write
WRITE

WRITE(kontrol_listesi) çıktı_listesi

Kontrol_listesi’nde neler bulunabilir?

  • Birim numarası, çıktının alınacağı birim olabilir. (Bir tam sayı)UNIT = 6 veya sadece 6…
  • Format belirten bir ifade veya sayıFMT = format_belirtici veya sadece format_belirtici.UNIT ve FMT kullanılmayacaksa birim ilk, format ikinci unsur olmalıdır.
  • ADVANCE= yes_veya_noEşitliğin sağı ya YES yahut NO’dur.
write1

Birim numarası

Format ifadesi

ADVANCE

WRITE

INTEGER :: CIKIS = 6

WRITE (6, *) AHMET, MEHMET

WRITE (6, FMT = *) AHMET, MEHMET

WRITE (UNIT = 6, FMT = *) AHMET, MEHMET

WRITE ( CIKIS, *) AHMET, MEHMET

WRITE (UNIT = CIKIS, FMT = *) AHMET, MEHMET

WRITE (*, *) AHMET, MEHMET

PRINT *, AHMET, MEHMET

write2

Birim numarası

Format ifadesi

ADVANCE

WRITE

Formatlı çıkış almak isterseniz:

WRITE (6, ‘(1X, 2F10.2)’) AHMET, MEHMET

WRITE (6, FMT = ‘(1X, 2F10.2)’) AHMET, MEHMET

WRITE (6, 30) AHMET, MEHMET

30 FORMAT (1X, 2F10.2)

WRITE (UNIT = 6, FMT = 30) AHMET, MEHMET

30 FORMAT (1X, 2F10.2)

write3

Birim numarası

Format ifadesi

ADVANCE

WRITE

Peki ADVANCE ne?

ADVANCE = “NO”

ADVANCE = “YES”

slide133
READ

READ (kontrol_listesi) girdi_listesi

Kontrol_listesi’nde neler bulunabilir?

  • Birim numarası, girdinin okunacağı birim olabilir. (Bir tam sayı)UNIT = 5 veya sadece 5…
  • Format belirten bir ifade veya sayıFMT = format_belirtici veya sadece format_belirtici.UNIT ve FMT kullanılmayacaksa birim ilk, format ikinci unsur olmalıdır.
  • ADVANCE= yes_veya_noEşitliğin sağı ya YES yahut NO’dur.
  • IOSTAT = ifade veya END = ifade
slide134

Birim numarası

Format ifadesi

ADVANCE

IOSTAT veya END

Dosya manipülasyon ifadeleri

READ

INTEGER :: GIRIS = 5

READ (5, *) AHMET, MEHMET

READ (5, FMT = *) AHMET, MEHMET

READ (UNIT = 5, FMT = *) AHMET, MEHMET

READ ( GIRIS, *) AHMET, MEHMET

READ (UNIT = CIKIS, FMT = *) AHMET, MEHMET

READ (*, *) AHMET, MEHMET

READ *, AHMET, MEHMET

slide135

Birim numarası

Format ifadesi

ADVANCE

IOSTAT veya END

Dosya manipülasyon ifadeleri

READ

Formatlı okuma isterseniz:

READ (5, ‘(2F10.2)’) AHMET, MEHMET

READ (5, FMT = ‘(2F10.2)’) AHMET, MEHMET

READ(5, 30) AHMET, MEHMET

30 FORMAT (2F10.2)

READ (UNIT = 5, FMT = 30) AHMET, MEHMET

30 FORMAT (2F10.2)

dosya i lemleri
Dosya işlemleri

Veri her zaman öyle birkaç sayı olmaz. Girişte de, çıkışta da…

Klavyeyle yazıp, ekrandan okuyamazsınız…

Dosyalara yazmak ve dosyalardan okumak gerekir.

500 değer çifti olan bir en küçük kareler? 500 000?

slide137
Önce?

Önce?

Dosyayı açmak gerek: OPEN (açma_listesi)

1. Birim (INTEGER) Dosyaya bu sayıyla atıf yapılır.

2. FILE= dosya_ismi (dosyanın işletim sistemindeki ismi)

3. STATUS = dosyanın_durumu

4. ACTION = ne_yapılacak (okunacak? yazılacak=? her ikisi?)

5. POSITION = dosyanın_neresinde_yapılacak

6. IOSTAT = dosya_başarıyla_ açılmış_mı?

a ma listesi
açma_listesi

birim FILE = STATUS =ACTION = POSITION = IOSTAT =

birim: Dosya açılırken ona bir numara verilir. Meselâ 22 olsun…

READ(22, 100)… WRITE(22, 100)…

FILE= dosyanın ismidir… Açılırken işletim sistemi dosyayı bulur, kapanırken bu isimle saklanır (save) FILE = “ENKKVERI”

STATUS = “OLD” veya “NEW” veya “REPLACE”

acma listesi
acma_listesi

birim FILE = STATUS =ACTION = POSITION = IOSTAT =

ACTION = “READ” veya “WRITE” veya “READWRITE”

POSITION = “REWIND” veya “APPEND” veya “ASIS”

IOSTAT = bir_tam_sayı_değişken

Daha sonra bu değişkeni okuyup sonuçta ne olduğunu anlayabiliriz. (IOSTAT, READ ile de kullanılabilir.)

Meselâ INTEGER :: KOD

IOSTAT = KOD

KOD = 0 dosya kazasız belasız açıldı…

KOD > 0 dosya açılamadı, sebep verilen numaradan bulunur…

KOD < 0 Verilerin sonuna gelindi, hata yok…

slide140
OPEN

Diskteki INFO.DAT isimli mevcut bir dosyayı açıp içindeki değerleri okumak istiyoruz…

OPEN (UNIT = 12, FILE = “INFO.DAT”, STATUS = “OLD”, & ACTION = “READ”, POSITION = “REWIND”, IOSTAT = ACILDIMI)

Sonra, READ(12, *) gibi bir komutla info.dat dosyasındaki bilgileri okuyabiliriz…

slide141
…OPEN

Dosya ismini illâ programın içine yazmak gerekmez…

CHARACTER(10):: DosyaIsmi

WRITE(*, ‘(1X, A)’, ADVANCE = “NO”) &

“Dosyanin ismini yaziniz: ”

READ*, DosyaIsmi

OPEN(UNIT = 12, FILE = DosyaIsmi, STATUS = “OLD”, & ACTION = “READ”, POSITION = “REWIND”, IOSTAT = & ACILDIMI)

IF (ACILDIMI >0) PRINT “**** DOSYAYI ACAMIYORUM***”

slide142
…OPEN

Farklı bir uygulama: İçine yazmak için RAPOR isimli yeni bir dosya açalım:

OPEN(UNIT = 13, FILE = “RAPOR”, STATUS = “NEW”, & ACTION = “WRITE”, IOSTAT = ACILDIMI)

Sonra bu dosyaya, FIYAT ve MIKTAR verilerini yazmak için şu ifadeyi kullanabiliriz:

WRITE(13, ‘(1X, 2F10.3)’) FIYAT, MIKTAR

İşimiz bitince de dosyayı kapatırız:

CLOSE(13)

iostat uygulama rne i
IOSTAT uygulama örneği

DO

!Bir sonraki veriyi oku

READ (12, *, IOSTAT = GIRDI_DURUMU) KOD, & SICAKLIK, BASINC

IF(GIRDI_DURUMU > 0) STOP “GIRDI HATASI”

IF(GIRDI_DURUMU < 0) EXIT !Veri bitti

! Veriyi işlemeye devam et

SAY = SAY +1

…..

TOPLAMBASINC = TOPLAMBASINC + BASINC

END DO

end uygulama rne i
END uygulama örneği

DO

!Bir sonraki veriyi oku

READ (12, *, END = 20) KOD, SICAKLIK, BASINC

!IF(GIRDI_DURUMU < 0) EXIT YERİNE…

! Veriyi işlemeye devam et

SAY = SAY +1

…..

TOPLAMBASINC = TOPLAMBASINC + BASINC

END DO

20 CONTINUE

rewind ve backspace
REWIND ve BACKSPACE

Genel ifade:

REWIND birim BACKSPACE birim

REWIND 12

BACKSPACE 12

h zl s nav8
Hızlı sınav

WRITE (10, 20) X, Y ifadesinde 10 ve 20 nedir?

10 yazılacak birim (cihaz veya dosya), 20 bir FORMAT ifadesidir.

PRINT *, CEVAP ifadesine eşdeğer bir WRITE ifadesi yazınız.

WRITE (*, *) CEVAP

(Doğru mu yanlış mı?) OPEN komutundaki FILE = “NEW” bu dosyanın mevcut olmadığını, bu program tarafından yaratılacağını gösterir.

X

h zl s nav9
Hızlı sınav

SINAV isimli ve diskte mevcut bir dosyayı 15 birim nunarasıyla okumak ve yazmak için açacak bir OPEN yazınız:

OPEN (15, STATUS = “OLD”, ACTION = “READWRITE”, )

Bu dosyadan 6-8 pozisyonundan NOT adlı tam sayıyı okuyacak bir komut yazınız.

REWIND 15READ (15, ‘(5x, I3)”) NOT

(Doğru mu yanlış mı?) IOSTAT = VAR ise ve hata meydana gelmemekle birlikte dosyanın sonuna varılmışsa, VAR eksi değer alacaktır.

(Doğru mu yanlış mı?) READ(5, 10, END = 15) NOT komutunda, okunacak veri kalmayınca program, 15 numaralı komuttan devam edecektir.

h zl s nav10
Hızlı sınav

(Doğru mu, yanlış mı) BACKSPACE komutu, mevcut konumun soluna bir değer yazmak için kullanılır.

_________ komutu, dosyayı başlangıcına çekmek için kullanılır.

X

REWIND

fortran n fonks yonlari
FORTRAN’ın İÇ FONKSİYONLARI

Kitapta 324. sayfadaki 6.1 tablosuna bakın…

Bu fonksiyonlar programlarda serbestçe kullanılır. LOG10 kullandınız…

Meselâ:

INTEGER :: Sayi_1, Sayi_2, KucukREAL :: Alfa, Beta, X

PRINT *, ABS(X)

Alfa = ANINT(100.0 * Beta) / 100.0

Small = MIN(0, Sayi_1, Sayi_2)

fortran n fonks yonlari1
…FORTRAN’ın İÇ FONKSİYONLARI

Kendimiz fonksiyon yazabilir ve sonra tıpkı FORTRAN fonksiyonları gibi onları da kullanabiliriz.

fonksiyon başlığıtanımlar kısmıicra kısmıEND FUNCTION ifadesi

fonksiyon başlığı

FUNCTION fonksiyon-ismi(resmî-argüman-listesi)veyatip-belirleyici FUNCTION fonksiyon-ismi(resmî-argüman-listesi)

fortran n fonks yonlari2
…FORTRAN’ın İÇ FONKSİYONLARI

fonksiyon başlığı

FUNCTION fonksiyon-ismi (resmî-argüman-listesi)veyatip-belirleyici FUNCTION fonksiyon-ismi (resmî-argüman-listesi)

FUNCTION TLDEN_YTLYE( YTL)

REAL FUNCTION TLDEN_YTLYE( YTL)

fahrenheit santigrat d n m
…Fahrenheit- Santigrat dönüşümü

FUNCTION F_DEN_C_YE (FSICAKLIK)

REAL :: F_DEN_C_YE

REAL INTENT(IN) :: FSICAKLIK

F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8

END FUNCTION F_DEN_C_YE

fahrenheit santigrat d n m1
…Fahrenheit- Santigrat dönüşümü

PROGRAM SICAKLIK_DONUSUMU IMPLICIT NONE REAL :: FDERECESI, CDERECESI CHAR(1) :: CEVAP

DO

WRITE(*, ‘(1X, A)’, ADVANCE = “NO”) “F SICAKLIGI GIRINIZ”READ *, FDERECESI

CDERECESI = F_DEN_C_YE(FDERECESI)PRINT ‘1X, 2(F6.2, A)’, FDERECESI, “ F ”, CDERECESI, “ C YE ESITTIR”

WRITE(*, ‘(1X, A)’, ADVANCE = “NO”) “BASKA DONUSUM YAPCAN MI? & & (E VEYA H)”

READ *, CEVAP

IF (CEVAP /= “H”) EXIT

END DO

CONTAINS

FUNCTION F_DEN_C_YE (FSICAKLIK) REAL :: F_DEN_C_YE REAL INTENT(IN) :: FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8 END FUNCTION F_DEN_C_YE

END PROGRAM SICAKLIK_DONUSUMU

INTERNAL

fahrenheit santigrat d n m2
…Fahrenheit- Santigrat dönüşümü

PROGRAM SICAKLIK_DONUSUMU IMPLICIT NONE REAL :: FDERECESI, CDERECESI CHAR(1) :: CEVAP

DO

WRITE(*, ‘(1X, A)’, ADVANCE = “NO”) “F SICAKLIGI GIRINIZ”READ *, FDERECESI

CDERECESI = F_DEN_C_YE(FDERECESI)PRINT ‘1X, 2(F6.2, A)’, FDERECESI, “ F ”, CDERECESI, “ C YE ESITTIR”

WRITE(*, ‘(1X, A)’, ADVANCE = “NO”) “BASKA DONUSUM YAPCAN MI? & & (E VEYA H)”

READ *, CEVAP

IF (CEVAP /= “E”) EXIT

END DO

END PROGRAM SICAKLIK_DONUSUMU

FUNCTION F_DEN_C_YE (FSICAKLIK) REAL :: F_DEN_C_YE REAL INTENT(IN) :: FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8 END FUNCTION F_DEN_C_YE

EXTERNAL

fonksiyonun tipi
…Fonksiyonun tipi

FUNCTION F_DEN_C_YE (FSICAKLIK) REAL :: F_DEN_C_YE REAL INTENT(IN) :: FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8END FUNCTION F_DEN_C_YE

REAL FUNCTION F_DEN_C_YE (FSICAKLIK) REAL INTENT(IN) :: FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8END FUNCTION F_DEN_C_YE

de i kenler1
Değişkenler…

Yerel değişken- global değişken (Scope… Erişim?)

Altprogramda ilan edilen değişkene dışarıdan ulaşılamaz.

Ana programda ilân edilen değişkene o programın iç alt programlarından ulaşılabilir. Eğer alt programda aynı isimde değişken varsa, o öne geçer.

SAVE REAL, SAVE :: liste veya SAVE liste

INTENT (IN) REAL INTENT (IN) :: ….

hizli sinav
HIZLI SINAV

1. İki tip FORTRAN altprogramı hangileridir?

FUNCTION ve SUBROUTINE

2. FUNCTION alt programının dört parçasını sayın.

fonksiyon başlığıtanımlar kısmıicra kısmıEND FUNCTION ifadesi

hizli sinav1
HIZLI SINAV

3. TOPLA (A, B) de A ve B nedir?

TOPLA fonksiyonun argümanları

4. Bir programda, bir değişkenin değerine ulaşılabilen program kısımlarına o değişkenin nesi denir?

Scope

5. (Doğru mu?) Fonksiyon alt programı ve ana program aynı değişken isimlerini kullanabilir.

hizli sinav2
HIZLI SINAV

FUNCTION NE(N)INTEGER :: NEINTEGER INTENT(IN) :: NNE = (N * (N + 1) ) / 2

END FUNCTION NE

Ana programda SAYI1 = NE(SAYI2) yazıyorsa SAYI2’ye, ……… argüman denir.

Ana programda SAYI = NE(3) yazıyorsa, SAYI hangi değeri alır?

NE fonksiyonun içinde NE = 1 gibi bir ifade bulunabilir.

actual

6

X

function alt program ndan fark
Function alt programından farkı

FUN(X) fonksiyon, SUB(X) subroutine olsun…

  • FUN’un ismi geri dönen değeri taşır. SUB herhangi bir değer taşımaz.
  • (1) in sonuçları: FUN’un tipi vardır: REAL, INTEGER, LOGICAL gibi… SUB’un tipi yoktur.
function alt program ndan fark1
Function alt programından farkı

FUN(X) fonksiyon, SUB(X) subroutine olsun…Programda kullanılış:

...…SONUC = ALFA/FUN(X).....

.......

CALL SUB(X)SONUC = ALFA / X...

SUBROUTINE’den değer dönecekse bu değer(ler) argümanlar vasıtasıyla taşınır.

slide164
Örnek: 132.23456 gibi bir saat değeri verildiğinde bunu gün, saat, dakika, saniye’ye çevirip sonucu basan bir subroutine

!Bu subroutine yukarda anlatılan işi yapar

SUBROUTINE GSDS(GIRENSAAT)

REAL, INTENT(IN) :: GIRENSAAT

INTEGER :: TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE

TAMSANIYE = GIRENSAAT * 3600. + 0.5

GUN = 0

DO

IF(TAMSANIYE .LT. 86400) EXIT

TAMSANIYE = TAMSANIYE – 86400

GUN = GUN +1

END DO

real intent in girensaat integer tamsaniye gun saat dakika saniye
REAL, INTENT(IN) :: GIRENSAATINTEGER :: TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE

GUN = 0

DO

IF(TAMSANIYE .LT. 86400) EXIT

TAMSANIYE = TAMSANIYE – 86400

GUN = GUN +1

END DO

SAAT = 0

DO

IF(TAMSANIYE .LT. 3600) EXIT

TAMSANIYE = TAMSANIYE – 3600

SAAT = SAAT +1

END DO

real intent in girensaat integer tamsaniye gun saat dakika saniye1
REAL, INTENT(IN) :: GIRENSAATINTEGER :: TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE

SAAT = 0

DO

IF(TAMSANIYE .LT. 3600) EXIT

TAMSANIYE = TAMSANIYE – 3600

SAAT = SAAT +1

END DO

DAKIKA = 0

DO

IF(TAMSANIYE .LT.60) EXIT

TAMSANIYE = TAMSANIYE – 60

DAKIKA = DAKIKA +1

END DO

SANIYE = TAMSANIYE

PRINT "(1X, T10, A, T20, A, T30, A, T40, A/ 2X, 4I10)", “GUN”, &

“SAAT”, “DAKIKA”, “SANIYE”, GUN, SAAT, DAKIKA, SANIYE

END SUBROUTINE GSDS

kullan l
Kullanılışı

PROGRAM BIRPROGRAM

REAL :: SAATLER

PRINT *, “KAC SAAT?”

READ*, SAATLER

CALL GSDS(SAATLER)

END PROGRAM BIRPROGRAM

bir ba ka z m
Bir başka çözüm

SUBROUTINE GSDS(GIRENSAAT,GUN,SAAT,DAKIKA, SANIYE)

REAL, INTENT(INOUT) :: GIRENSAAT

INTEGER, INTENT(OUT) :: GUN, SAAT, DAKIKA, SANIYE

INTEGER :: TAMSANIYE

…..

! VE PRINT KOMUTU BU SUBROUTINE’DEN CIKARILIR

…..

END SUBROUTINE GSDS

bir ba ka z m1
Bir başka çözüm:

PROGRAM BIRPROGRAM

REAL :: SAATLER

PRINT *, “KAC SAAT?”

READ*, SAATLER

CALL GSDS(SAATLER, GUN, SAAT, DAKIKA, SANIYE)

PRINT "(1X, T10, A, T20, A, T30, A, T40, A/ 2X, 4I10)", & “GUN”, “SAAT”, “DAKIKA”, “SANIYE”, & GUN, SAAT, DAKIKA, SANIYE

END PROGRAM BIRPROGRAM

h zl test6
Hızlı test

SUBROUTINE CALCULATE(ALPHA, NUMBER_1, & NUMBER_2)REAL, INTENT(IN) :: ALPHAINTEGER, INTENT(OUT) :: NUMBER_1INTEGER, INTENT(INOUT) :: NUMBER_2.....END SUBROUTINE CALCULATE

Ana programda da aşağıdaki ilanlar yapılmış:

INTEGER :: CODE, ID_NUMBER

REAL :: RATE

h zl test7
Hızlı test

Doğru mu?

RATE = CALCULATE(2.45, CODE, ID_NUMBER)

CALL CALCULATE(RATE + 0.5, 0, CODE 2 ID_NUMBER)

CALL CALCULATE(RATE, ID_NUMBER)

CALL CALCULATE(RATE, CODE, ID_NUMBER)

CALL CALCULATE

CALL CALCULATE(RATE, RATE, RATE)

SUBROUTINE CALCULATE(ALPHA, NUMBER_1, NUMBER_2)REAL, INTENT(IN) :: ALPHAINTEGER, INTENT(OUT) :: NUMBER_1INTEGER, INTENT(INOUT) :: NUMBER_2END SUBROUTINE CALCULATE

Ana programda da aşağıdaki ilanlar yapılmış:

INTEGER :: CODE, ID_NUMBER

REAL :: RATE

X

X

X

X

X

a a daki program nas l kt verir
Aşağıdaki program nasıl çıktı verir?

program question_11character(3) :: str1 = “cat”, str2 = “dog”, str3 = “elk”call change(2, str1, str2, str3)print*, “String = “, str1, str2, str3containssubroutine change(Number, a, b,c)integer, intent(in) Numbercharacter(3), intent(inout) a, b, ccharacter(3) :: bat = “bat”if(Number < 3) then a = bat b= batelse c = bat

end ifend subroutine changeend program question_11

z mler cosinus
Çözümler- Cosinus

real function cosinusus(x)

implicit none

!cos x = 1 - x2/2! + x4/4!- xn/ n! + ...

REAL, INTENT(IN):: x

REAL :: cosx, terim

INTEGER :: fkt, isaret, i

cosx = 1.; fkt = 1 ; isaret = 1

do i=1,20, 2

isaret=-isaret

fkt = fkt * i * (i +1)

terim = REAL(isaret) * x**(i+1) / fkt

cosx=cosx+terim

end do

cosinusus = cosx

end function cosinusus

program main

REAL :: x

INTEGER :: j

x = 0.

do j=0,90

print*, cos(x), cosinusus(x)

x=x+0.01745

end do

CONTAINS

….

end program main

z mler eyrek ember
Çözümler- çeyrek çember

program main

integer :: i, j, topla

integer, parameter :: nokta = 10000

real :: sonuc

topla = 0

do 100 i = 0, nokta

do 100 j = 0, nokta

100 topla = topla + icmidismi(i/real(nokta), j/real(nokta))

sonuc = real(topla) / (nokta + 1) ** 2

print *, 4.*sonuc

end program main

Integer function icmidismi(x, y)

real, intent(in) :: x, y

if(sqrt(1-x*x) > y) then

icmidismi = 1

else

icmidismi = 0

end if

end function icmidismi

slide175

program main

implicit none

integer :: i, j

logical asalmi, boltest

do 100 i = 3, 1001, 2

asalmi = .true.

do 200 j = 3, i-1

if(boltest(i, j)) asalmi = .false.

200 continue

100 if(asalmi) print *, i

end program main

logical function boltest(sayi, bolen)

integer, intent(in):: sayi, bolen

if((sayi/bolen) * bolen == sayi) then

boltest = .true.

else

boltest = .false.

end if

end function boltest

8 dizinler arrays
8 Dizinler- Arrays

Problem:

50 öğrencili bir sınıfta, her öğrencinin notunu ve notun ortalamanın kaç puan üstünde veya altında olduğunu hesaplayıp bastırmak istiyoruz.

REAL NOT, ORTALAMA

ORTALAMA = 0.

DO 100 I = 1, 50

READ *, NOT

PRINT*, NOT

100 ORTALAMA = ORTALAMA + NOT

ORTALAMA = ORTALAMA / 50.

ŞİMDİ N’APCAZ?

dizinler arrays

50 öğrencili bir sınıfta, her öğrencinin notunu ve notun ortalamanın kaç puan üstünde veya altında olduğunu hesaplayıp bastırmak istiyoruz.

Dizinler- Arrays

REAL :: NOT(50)

REAL, DIMENSION(50) :: NOT

ORTALAMA = 0

DO 100 I = 1, 50

READ *, NOT(I)

100 ORTALAMA = ORTALAMA + NOT(I)

ORTALAMA = ORTALAMA / 50.

DO 200 I = 1, 50

200 PRINT*, NOT(I), ORTALAMA – NOT(I)

REAL :: NOT(1:50)

ba ka bir z m
Başka bir çözüm

REAL :: NOT(50), SAPMA(50)

ORTALAMA = 0

DO 100 I = 1, 50

READ *, NOT(I)

100 ORTALAMA = ORTALAMA + NOT(I)

ORTALAMA = ORTALAMA / 50.

DO 200 I = 1, 50

200 SAPMA(I) = ORTALAMA – NOT(I)

DO 300 I = 1, 50

300 PRINT*, NOT(I), SAPMA(I)

e de er ifadeler
Eşdeğer ifadeler

DO 100 I = 1, 50

100 READ *. NOT(I)yerine

READ *, (NOT(I), I = 1, 100)

veya

READ *, NOT

PRINT için de aynı şeyler geçerli...

“imâ edilen” do = implied do

Meselâ:

DO 300 I = 1, 50

300 PRINT *, NOT(I), SAPMA(I)yerine

PRINT *, (NOT, SAPMA, I = 1, 50)

haf zada yer ne zaman ayr l yor
Hafızada yer ne zaman ayrılıyor?

REAL :: NOT(1:50) veya

REAL, DIMENSION(1:50) :: NOT

Bunlar icra edilebilen (executable) ifadeler değil... Bütün ilân ifadeleri gibi (tip, implicit, v.s.) derleme zamanında yerine getiriliyor.

Peki ya öğrenci sayısını bilmiyorsak?REAL, DIMENSION(:), ALLOCATABLE :: NOT, SAPMA

cra zaman dizinleri
İcra zamanı dizinleri

REAL, DIMENSION(:), ALLOCATABLE :: NOT, SAPMA

INTEGER :: HATA

....

READ *, OSAY

ALLOCATE(NOT(1:OSAY), SAPMA(1:OSAY), STAT = HATA)

IF(HATA .NE. 0) STOP “HAFIZADA YER YOK”

....

DEALLOCATE(NOT, SAPMA, STAT = HATA)

IF(HATA .NE.0) PRINT *, “BOYLE BIR ARRAY YOK KI...”

fortran dizin fonksiyonlar
Fortran dizin fonksiyonları

ALLOCATED(A)

DOT_PRODUCT(A, B)

MAXVAL(A)

MAXLOC(A)

MINVAL(A)

MINLOC(A)

PRODUCT(A)

SIZE(A)

SUM(A)

not ortalamas probleminin ba ka bir z m
Not ortalaması probleminin başka bir çözümü

PROGRAM NOT_ORTALAMASI

...

PRINT *, ORTALAMA(NOT, OSAYI)

...

CONTAINS

REAL FUNCTION ORTALAMA (DEGERLER, SAYI)

INTEGER :: SAYI

REAL :: DEGERLER(SAYI)

ORTALAMA = SUM(DEGERLER) /REAL(SAYI)

END FUNCTION ORTALAMA

END PROGRAM NOT_ORTALAMASI

ba ka1
Başka...

Dizin elemanlarına DO’suz da değer verilebilir:

REAL :: A(10)

A = 0 Bütün elemanları 0 yapar

A = (/11, 22, 33, 44, 55, 66, 77, 88, 99, 110 /)

Elemanlara gösterilen değerleri verir

Bilin bakalım bu ne yapar:

REAL :: B(5)

INTEGER :: I(5)

I = (/5, 3, 3, 4, 3/)

B = A(I)

A(1:10:2) = (/(I**2, I = 1, 5)) INDEKS ÜÇLÜSÜ (SUBSCRIPT TRIPLET)

where
WHERE

En iyisi misalle anlatmak:

integer, dimension(5) :: a = (/0, 2, 5, 0, 10/)

real dimension(5) :: b

WHERE(a > 0) b= 1.0/ a

WHERE(a>0)

b = 1.0/a

ELSEWHERE

b = -1.0

END WHERE

renci program n n devam renci numaralar notlar okunacak ortalamdan sapmalar yla birlikte yaz lacak
Öğrenci programının devamı...Öğrenci numaraları, notları okunacak, ortalamdan sapmalarıyla birlikte yazılacak.

real :: ogrenci(50, 3), topla

integer :: i

read 20, (ogrenci(I, 1), ogrenci(I, 2), I = 1, 50)

20 format(2f10.0)

topla = 0.

do 100 i = 1, 50

100 topla = topla + ogrenci(i, 2)

topla = topla / real(50)

do 200 i = 1, 50

200 ogrenci(i, 3) = topla - ogrenci(i, 2)