Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

FORTRAN90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin

Benzer bir sunumlar


... konulu sunumlar: "FORTRAN90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin"— Sunum transkripti:

1 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

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
(A’daki değeri reg. yükle) Hex: (B’deki değerle çarp) Hex: (C’deki değeri reg. ile topla) Hex: (Registerdeki değeri X’e taşı) Hex: İ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
147 = DD = 221 255 = FF

6 Makine dili - Assembler
X = A * B + C MOV A, ACC MUL B, ACC ADD C, ACC STO ACC, X

7 Peki FORTRAN? X = A * B + C

8 Derleyici (compiler) (Java’da ve scriptlerde yok)
Ü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 Ara dil (Java, C#) Derleyici (compiler) (Java’da ve scriptlerde yok) Makine dili Object code Object module

10 Bitti mi? dll : dynamic link library Okuma programı Bağlama- link
İcra edilebilir program: Executable Çarp_Topla.exe Object program Ekrana yazma programı … 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. Girdiler Çıktı Başlangıç miktarı: 10 mg Kalan miktar: ? Yarı ömür: 140 gün Geçen zaman: 180 gün

13 Bir mühendislik problemi nasıl çözülür?
Girdiler Çıktı Başlangıç miktarı: 10 mg Kalan miktar Yarı ömür: 140 gün Geçen zaman: 180 gün Biraz daha genel yazalım ve problemin verilerine isim verelim: Girdiler Çıktı Başlangıç miktarı: BaslangicMiktari Kalan miktar: KalanMiktar Yarı ömür: YariOmur Geçen zaman: GecenZaman

14 Hesaplama algoritması kuralım
Girdiler Çıktı Başlangıç miktarı: BaslangicMiktari Kalan miktar: KalanMiktar Yarı ömür: YariOmur Geçen zaman: GecenZaman 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 Akış diagramı (Flowchart)
Algoritma Başla BaslangicMiktari GecenZaman YariOmur değerlerini oku Akış diagramı (Flowchart) KalanMiktar = BaslangicMiktari * 0.5**(GecenZaman/YariOmur) hesapla KalanMiktar değ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 NONE REAL :: 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ı:
Algoritmanın başı veya sonu Akış bir karara göre ikiye (veya daha fazla yola) ayrılıyor: Yol çatallanıyor. Veri girişi veya çıkışı Döngü İşlem Bir alt yordam- alt algoritma Akış başka bir yerde devam 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ılar Program 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 Integer sabitler FORTRAN veri tipleri,
sabitler, değişkenler: “Integer” sabitler Integer sabitler Doğru: Yanlış 9,

30 FORTRAN veri tipleri, sabitler, değişkenler: “Real” sabitler
Doğru: E E23 +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 boyunca değiştirilmez. Neden gerektiğinde 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/ Yuz YüzDolar

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

40 Sorular INTEGER :: Mu REAL :: Zaman, Uzaklik
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.  9 / 4  2 4./ 9.  4 / 9  0

44 Aritmetik işlemler ve fonksiyonlar
Karışıksa ne sonuç vereceğ belli olmaz; onun için karıştırmayın. / 5 ile / 5 aynı sonucu vermez. Bir durumda karıştırma tavsiye edilir: ** 3  **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
ABS(X) FRACTION(X) NINT(X) COS(X) LOG(X) REAL(X) EXP(X) MAX(X1,… XN) SIN(X) INT(X) MIN(X1,… XN) SQRT(X) FLOOR(X) MOD(X, Y) TAN(X)

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 Variable = expression Ne eksik?
Hesap yapıyoruz ama elde ettiğimiz değerleri bir yerlere koyamıyoruz: Atama ifadesi: Assignment statement: = Variable = expression

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

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

51 Atama ifadesi A 122.45 B -18.567 -18.567 A 122.45 B -18.567 C ?
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 A 122.45 B A 122.45 B C ? 122.45 122.45

52 Atama ifadesi A = A +B ne demek?
Böyle bir ifade acemi programcıyı şaşırtabilir. A = A + B icra edildiği anda… A 122.45 B

53 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 = = N N = N 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

54 Serbest düşüş problemi
z = ½ gt2 + v0t + h0 v = gt +v0 Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir

55 Veri giriş çıkışı READ *, giren veri-listesi
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”

56 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

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

58 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 – arasında bir sayı olur. İfadeler icra edilir (executable) veya icra edilmeyen (non-executable) diye ayrılır.

59 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

60 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

61 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 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

62 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

63 Ödev: İkinci derece denklem çözen programı yazıp çalıştırın ama sıra şöyle olsun: Önce diskriminant >0, sonra 0, sonra pozitif. arasındaki öğrenci notunu okuyup, ye F a D a C e B e A veren bir program yazınız.

64 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…

65 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” ELSE IF(GUN == 3) THEN PRINT *, “CARSAMBA”

66 Haftaya devam: IF(GUN == 4) THEN PRINT *, “PERSEMBE” STOP
ELSE IF(GUN == 5) THEN PRINT *, “CUMA” ELSE IF(GUN == 6) THEN PRINT *, “CUMARTESI”

67 …VE HAFTANIN SONU IF(GUN == 7) THEN PRINT *, “PAZAR” STOP ELSE
PRINT *, “GIRDIGINIZ GUNDE BIR & &YANLISLIK OLMASIN?”, GUN END IF END PROGRAM HAFTANIN_GUNLERI

68 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

69 Şimdi “resmen” görelim: IF
IF (logical expression) THEN ifadeler… END IF ELSE de bulunabilir: ELSE başka ifadeler…

70 Başka? IF (logical expression) THEN ifadeler… ELSE END IF

71 …VE ELSE IF IF (logical expression) THEN ifadeler…
ELSE IF(logical expression) THEN başka ifadeler… daha da başka ifadeler ELSE ifadeler.. ifadeler… END IF

72 SELECT CASE SELECT CASE(selector) CASE (alternatif1) ifadeler…
------ CASE DEFAULT END CASE alternatif diye belirttiğimiz etiketlerin içinde INTEGER, CHARACTER veya LOGICAL sabit veya ifade olabilir. REAL olamıyor.. Neden? DEFAULT ne demek?

73 IF ve SWITCH ifadeleri isim alabilir
İsim: IF(logical expression) THEN ----- END IF İsim İsim: SELECT(selector) ------ END SELECT İsim

74 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: “BES” E 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

75 Mantık operatörleri özeti:
Kıyas operatörleri: Diğer mantık operatörleri .GT. > .LT. < .GE. >= .LE. <= .EQ. = = .NE. /= .AND. .OR. .NOT. .EQV. .NEQV. Hiyerarşi: .NOT. .AND. .OR. .EQV. (veya .NEQV.)

76 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.

77 … alıştırmalar INTEGER:: NUMBER = 3, COUNT = 4, SUM = 5
Aşağıdaki mantık ifadelerinin sonucunu bulunuz: SUM – NUMBER <= <= COUNT <= 5 NUMBER**2 + COUNT**2 = = SUM**2 NUMBER < COUNT .OR. COUNT < SUM (NUMBER + 1 < SUM) .AND. .NOT. (COUNT + 1 < SUM)  .TRUE. OLMAZ!  .TRUE.  .TRUE.  .TRUE.

78 …alıştırmalar INTEGER:: X sıfırdan farklıysa .TRUE. sonucunu veren bir mantık ifadesi yazınız: X .NE 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

79 …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)

80 …alıştırmalar  X   X  X
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

81 …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

82 …alıştırmalar Aşağıdaki değerler için sonucu bulun 10 10 10
IF( X >= 0) THEN IF(Y >= 0) THEN PRINT *, X + Y ELSE PRINT *, X – Y END IF PRINT *, Y – X Aşağıdaki değerler için sonucu bulun X = 5, Y = 5 X = 5, Y = -5 X = -5, Y = 5 10 10 10

83 …alıştırmalar Aşağıdaki değerler için sonucu bulun
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

84 …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”

85 …alıştırmalar IF (X< 1.5) THEN N = 1 ELSE IF (X < 2.5) THEN
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

86 …alıştırmalar NUMBER = 99 ise sonuç nedir? 198 NUMBER = -1 ise? -2
BOS VER REAL:: NUMBER SELECT CASE(NUMBER) CASE DEFAULT PRINT*, “BOS VER” CASE(99) PRINT*, NUMBER + 99 CASE(-1) PRINT*, NUMBER – 1 END SELECT

87 …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

88 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.

89 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

90 DO kontrol-değişkeni = ilk-değer, son-değer, adım ifadeler END 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

91 !Misal: 1’den N’e kadar sayıların toplamı: INEGER:: I, N REAL:: TOPLAM
DO etiket kontrol-değişkeni = ilk-değer, son-değer, adım ifadeler etiket son-icra-edilebilir-komut !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 !Misal, 1’den N’e kadar tek sayıların toplamı , 2

92 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

93 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

94 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

95 Hızlı sınav MERHABA MERHABA MERHABA MERHABA MERHABA Çıktı nedir:
DO I = 1, 5 PRINT*, “MERHABA” END DO DO I = 1, 5, 2 DO I = 1, 6 PRINT*, I, I+1 MERHABA MERHABA MERHABA MERHABA MERHABA MERHABA MERHABA MERHABA 1 2 / 2 3/ 3 4/ 4 5/ 5 6/ 6 7

96 …hızlı sınav 6 5 36 25… MERHABA Çıktı nedir: DO I = 6, 1, -1 PRINT*, I
END DO DO I = 6, 6 PRINT*, “MERHABA” DO I = 6, 5 6 5 36 25… MERHABA

97 İ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

98 İ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

99 Mantık çıkışlı DOlar DO ifadeler IF(mantık-ifadesi) EXIT
daha-daha-ifadeler END DO

100 DO ifadeler IF(mantık-ifadesi) EXIT daha-daha-ifadeler END 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

101 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 IF(I/2*2 .EQ. 2) CYCLE !SADECE TEK SAYILAR TOPLAM = TOPLAM + I END DO DO I = I +1 IF(I>N) EXIT TOPLAM = TOPLAM + I END DO

102 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

103 …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…

104 …hızlı test icra zamanı gramer derleyici mantık ????
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 ????

105 …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

106 …hızlı test LIMIT <= 4 0/ 1/ 2/ 3/ 4 LIMIT <= -2
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

107 …hızlı test LIMIT <= 4 0/ 1/ 2/ 3/ 4/ 5 LIMIT <= -2 0
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 + 1 END DO LIMIT <= 4 0/ 1/ 2/ 3/ 4/ 5 LIMIT <= -2 0

108 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! + ...

109 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

110 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

111 Gerçek problemler: 2) En küçük kareler metodu
Fiyat 160 180 200 220 240 260 280 Satış 126 103 82 75 40 20

112 …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ı.

113 …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…

114 …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) = 0 düzenlersek: a Σixi2+ b Σixi – Σixiyi = 0 b’ye göre: 2 Σi(a xi+ b – yi) = 0 düzenlersek: a Σi xi+ n b – Σiyi = 0

115 …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

116 …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

117 …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

118 …en küçük kareler

119 5 GİRDİ- ÇIKTI I/O

120 DAHA ŞIK ÇIKTILAR Çıktılar canınızı sıktı…
PRINT *, LIRA, “TL”, YENILIRA, “YTL EDER” E +07TL YTL EDER PRINT 20, LIRA, “TL”, YENILIRA, “YTL EDER” 20 FORMAT( F12.0, 2X, A, 5X, F8.2, 2X, A) TL YTL EDER

121 DAHA ŞIK ÇIKTILAR En küçük kareler probleminde… PRINT *, N, A, B
E E+02 Gibi abuk çıktılar verecektir… Halbuki PRINT 55, N, A, B 55 FORMAT( 1X, I5, F12.5, 5X, F12.1)

122 …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...

123 …Daha şık çıktılar… Format ifadeleri: Örnekler: 1234, ve **23 Iw I Fw.d F Ew.d E E+01 ESw.d ES E+23 ENw.d EN E+21 A Tc T20 nX 5X İlk karakter: boşluk: Normal tek aralık : Çift aralık : Üstüne yaz 1: Sonraki sayfadan başla

124 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

125 …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

126 REAL :: X = , 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 = BITTI PRINT Form, I, X, J, Y PRINT ‘(1X, F10.0 / 1X, I3, T11, I5)’, X, I, J 234. Aşağıdaki sorularda, şu ifadelerin daha önce yazıldığını kabul ediniz: REAL :: X = , Y = -1.0 INTEGER :: I = 987, J = -44 CHARACTER(20) :: Form = “(1X, I5, F10.1)”

127 …hızlı sınav Bu değerlerin alınabilmesi için veri nasıl yazılmalı?
CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)” ve X = , Y = 6.0, I = 99, J = 876 Bu değerlerin alınabilmesi için veri nasıl yazılmalı? READ *, I, J, X, Y READ “(2I3, 2F6.0)”, I, J, X, Y b bbbbb6 READ ‘(I3, F7.0, 2X, I5, T20, F5.0)’, I, X, J, Y b bb bbbb6

128 …hızlı sınav CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)”
ve X = , 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 b READ 9, I, X, J, Y 9 FORMAT(I2, F5.2 / I3, F2.1)

129 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_no Eşitliğin sağı ya YES yahut NO’dur.

130 WRITE INTEGER :: CIKIS = 6 WRITE (6, *) AHMET, MEHMET
Birim numarası Format ifadesi ADVANCE 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

131 WRITE WRITE (6, 30) AHMET, MEHMET 30 FORMAT (1X, 2F10.2)
Birim numarası Format ifadesi ADVANCE 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

132 WRITE Peki ADVANCE ne? ADVANCE = “NO” ADVANCE = “YES” Birim numarası
Format ifadesi ADVANCE Peki ADVANCE ne? ADVANCE = “NO” ADVANCE = “YES”

133 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_no Eşitliğin sağı ya YES yahut NO’dur. IOSTAT = ifade veya END = ifade

134 READ INTEGER :: GIRIS = 5 READ (5, *) AHMET, MEHMET
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

135 READ READ (5, 30) AHMET, MEHMET 30 FORMAT (2F10.2)
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

136 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? ? Fiyat Satış 160 126 180 103 200 82 220 75 240 260 40 280 20

137 Ö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ı?

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

139 acma_listesi ACTION = “READ” veya “WRITE” veya “READWRITE”
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…

140 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…

141 …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***”

142 …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)

143 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

144 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

145 REWIND ve BACKSPACE Genel ifade: REWIND birim BACKSPACE birim

146 Hızlı sınav X 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

147 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 15 READ (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.

148 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

149 6 FONKSİYON ALT PROGRAMLARI

150 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, Kucuk REAL :: Alfa, Beta, X PRINT *, ABS(X) Alfa = ANINT(100.0 * Beta) / 100.0 Small = MIN(0, Sayi_1, Sayi_2)

151 …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) veya tip-belirleyici FUNCTION fonksiyon-ismi(resmî-argüman-listesi)

152 …FORTRAN’ın İÇ FONKSİYONLARI
fonksiyon başlığı FUNCTION fonksiyon-ismi (resmî-argüman-listesi) veya tip-belirleyici FUNCTION fonksiyon-ismi (resmî-argüman-listesi) FUNCTION TLDEN_YTLYE( YTL) REAL FUNCTION TLDEN_YTLYE( YTL)

153 …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

154 …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)/ END FUNCTION F_DEN_C_YE END PROGRAM SICAKLIK_DONUSUMU INTERNAL

155 …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)/ END FUNCTION F_DEN_C_YE EXTERNAL

156 …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.8 END FUNCTION F_DEN_C_YE REAL FUNCTION F_DEN_C_YE (FSICAKLIK) REAL INTENT(IN) :: FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32.0)/ 1.8 END FUNCTION F_DEN_C_YE

157 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) :: ….

158 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

159 √ 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.

160 HIZLI SINAV FUNCTION NE(N) INTEGER :: NE INTEGER INTENT(IN) :: N NE = (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

161 7 SUBROUTINE ALT PROGRAMLARI

162 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.

163 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.

164 Örnek: 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 * GUN = 0 DO IF(TAMSANIYE .LT ) EXIT TAMSANIYE = TAMSANIYE – 86400 GUN = GUN +1 END DO

165 REAL, INTENT(IN) :: GIRENSAAT INTEGER :: TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE
DO IF(TAMSANIYE .LT ) EXIT TAMSANIYE = TAMSANIYE – 86400 GUN = GUN +1 END DO SAAT = 0 IF(TAMSANIYE .LT. 3600) EXIT TAMSANIYE = TAMSANIYE – 3600 SAAT = SAAT +1

166 REAL, INTENT(IN) :: GIRENSAAT INTEGER :: TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE
DO IF(TAMSANIYE .LT. 3600) EXIT TAMSANIYE = TAMSANIYE – 3600 SAAT = SAAT +1 END DO DAKIKA = 0 IF(TAMSANIYE .LT.60) EXIT TAMSANIYE = TAMSANIYE – 60 DAKIKA = DAKIKA +1 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

167 Kullanılışı PROGRAM BIRPROGRAM REAL :: SAATLER PRINT *, “KAC SAAT?”
READ*, SAATLER CALL GSDS(SAATLER) END PROGRAM BIRPROGRAM

168 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

169 Bir başka çözüm: REAL :: SAATLER PRINT *, “KAC SAAT?” READ*, SAATLER
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

170 Hızlı test SUBROUTINE CALCULATE(ALPHA, NUMBER_1, & NUMBER_2) REAL, INTENT(IN) :: ALPHA INTEGER, INTENT(OUT) :: NUMBER_1 INTEGER, INTENT(INOUT) :: NUMBER_ END SUBROUTINE CALCULATE Ana programda da aşağıdaki ilanlar yapılmış: INTEGER :: CODE, ID_NUMBER REAL :: RATE

171 Hızlı test √ X X X X X Doğru mu?
SUBROUTINE CALCULATE(ALPHA, NUMBER_1, NUMBER_2) REAL, INTENT(IN) :: ALPHA INTEGER, INTENT(OUT) :: NUMBER_1 INTEGER, INTENT(INOUT) :: NUMBER_2 END SUBROUTINE CALCULATE Ana programda da aşağıdaki ilanlar yapılmış: INTEGER :: CODE, ID_NUMBER REAL :: RATE 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) X X X X X

172 Aşağıdaki program nasıl çıktı verir?
program question_11 character(3) :: str1 = “cat”, str2 = “dog”, str3 = “elk” call change(2, str1, str2, str3) print*, “String = “, str1, str2, str3 contains subroutine change(Number, a, b,c) integer, intent(in) Number character(3), intent(inout) a, b, c character(3) :: bat = “bat” if(Number < 3) then a = bat b= bat else c = bat end if end subroutine change end program question_11

173 Çözümler- Cosinus program main REAL :: x INTEGER :: j x = 0. do j=0,90
print*, cos(x), cosinusus(x) x=x end do CONTAINS …. end program main 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

174 Çö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

175 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

176 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?

177 Dizinler- Arrays REAL :: NOT(50) REAL :: NOT(1:50)
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, 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(50) REAL :: NOT(1:50)

178 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)

179 Eşdeğer ifadeler “imâ edilen” do = implied do Meselâ: 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)

180 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

181 İ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...”

182 Fortran dizin fonksiyonları
ALLOCATED(A) DOT_PRODUCT(A, B) MAXVAL(A) MAXLOC(A) MINVAL(A) MINLOC(A) PRODUCT(A) SIZE(A) SUM(A)

183 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

184 Başka... Dizin elemanlarına DO’suz da değer verilebilir: REAL :: A(10)
A = 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)

185 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

186 Öğrenci programının devamı
Öğ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)


"FORTRAN90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin" indir ppt

Benzer bir sunumlar


Google Reklamları