Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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.

Benzer bir sunumlar


... konulu sunumlar: "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."— 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 1) Hafızanın A adresindeki değeri al, ALU’da bir “register”e yükle; 2) Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı “register”de tut. 3) Hafızanın C adresindeki değeri registerdeki değere ekle. 4) Registerdeki değeri hafızanın X adresine koy.

4 Makine dili X = A * B + C OpcodeOperand 1) (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  HexHex  Ondalık 1 = 1 10 = A 36 = 24A5 = = 93DD = = 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 Ü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) Üst seviye dili Derleyici (compiler) (Java’da ve scriptlerde yok) Makine dili X = A * B + C Ara dil (Java, C#) Kaynak kod (Source code) Source module Object code Object module

10 Bitti mi? Object program Okuma programı Ekrana yazma programı … programı Bağlama- link İcra edilebilir program: Executable Çarp_Topla.exe 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 mgKalan 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 mgKalan 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ı: BaslangicMiktariKalan miktar: KalanMiktar Yarı ömür: YariOmur Geçen zaman: GecenZaman

14 Hesaplama algoritması kuralım GirdilerÇıktı Başlangıç miktarı: BaslangicMiktariKalan miktar: KalanMiktar Yarı ömür: YariOmur Geçen zaman: GecenZaman 1.BaslangicMiktari, YariOmur, GecenZaman değerlerini oku 2.KalanMiktar’ı hesapla 3.KalanMiktar değerini yaz

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

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

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

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ı: 7 Algoritmanın başı veya sonu Veri girişi veya çıkışı İşlem Akış başka bir yerde devam ediyor- oraya git Akış bir karara göre ikiye (veya daha fazla yola) ayrılıyor: Yol çatallanıyor. Döngü Bir alt yordam- alt algoritma

22 Yazılım geliştirme aşamaları Çözümleme Veri düzeni ve algoritma tasarımı Kodlama Test ve uygulama Şelale modeli İ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 x 2 – 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ı  REALGerçek sayı  COMPLEXKompleks sayı  CHARACTERAlfa-numerik  LOGICAL.TRUE..FALSE.

29 Integer sabitler  Doğru:   Yanlış  9, FORTRAN veri tipleri, sabitler, değişkenler: “Integer” sabitler

30 FORTRAN veri tipleri, sabitler, değişkenler: “Real” sabitler Real sabitler  Doğru:  E E23+5.  Yanlış  51,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 = 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/4 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.34YTL123E4E “12+34”

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

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

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

43 Aritmetik işlemler ve fonksiyonlar  Bilin bakalım bunlar hangi işlemler:  +  -  /  *  ** B 2 – 4AC B**2 – 4 * A * C 9. / 4.  / 4  2 4./ 9.  / 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: 2.0 ** 3  8.02.**3.  exp(3.ln(2.)

45  İş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! Aritmetik işlemler ve fonksiyonlar

46 ABS(X)FRACTION(X)NINT(X) COS(X)LOG(X)REAL(X) EXP(X)MAX(X 1,… X N )SIN(X) INT(X)MIN(X 1,… X N )SQRT(X) FLOOR(X)MOD(X, Y)TAN(X)

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

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

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

50 Atama ifadesi XKoord = 5.23 YKoord = SQRT(25.0) Sayi = 17 Terim = Sayi / XKoord = 2.0 * XKoord XKoord? Ykoord? Sayi? Terim?

51 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 A B A B C?

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 B

53 Hızlı sınav INTEGER :: M, N REAL :: Pi, Alfa Pi = = N N = N+ 1 N + 1 = N Alfa = 1Alfa = “1” Alfa = AlfaM = 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 A 2 +B 2 ‘nin karekökünü C ye Sayi adlı tam sayı değişkeninin değerini 1 arttirin Aşağıdakilerin geçerli atama ifadeleri olup olmadığını, geçersizse sebebini söyleyin. C = SQRT(A ** 2 + B **2) Sayi = Sayi +1

54 Serbest düşüş problemi z = ½ gt 2 + v 0 t + h 0 v = gt +v 0 Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir

55 Veri giriş çıkışı 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” Z = 0.5 * g * Zaman * Zaman + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir

56 Serbest düşüş probleminin giriş-çıkışlı hâli PROGRAM Serbest_Dusme ! ! Bu program yüksekliği z = ½ gt 2 + v 0 t + h 0 ve hızı v = gt +v 0 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 aD aC eB eA 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” STOP ELSE IF(GUN == 3) THEN PRINT *, “CARSAMBA” STOP

66 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

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: IF (logical expression) THEN ifadeler… ELSE başka ifadeler… END IF

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

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

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

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: 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 DEGISKENSABIT 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:.GT.>.LT.<.GE.>=.LE.<=.EQ.=.NE./= Diğer mantık operatörleri.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. RP.OR. Q.AND. Q P.AND..NOT. Q.OR. R P.AND..NOT. (Q.OR. R) .TRUE. .FALSE. .TRUE. .FALSE.

77 … 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) .TRUE. OLMAZ! .TRUE.

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

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 Aşağıdakilerden hangileri geçerli IF ifadeleridir? …alıştırmalar 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 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 =

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

83 …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 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 100) PRINT *, “ARALIK DISI”

85 …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) N = 1 IF (1.5< X.OR. X < 2.5) N = 2 IF (X >= 2.5) N = 3 IF (X< 1.5) THEN N = 1 ELSE IF (X < 2.5) THEN N = 2 ELSE N = 3 END IF

86 …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 ise sonuç nedir? 198 NUMBER = -1 ise? -2 NUMBER = 50 ise? BOS VER

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 sayıların toplamı: INEGER:: I, N REAL:: TOPLAM TOPLAM = 0. DO I = 1, N TOPLAM = TOPLAM + I END DO !Misal, 1’den N’e kadar tek sayıların toplamı, 2

91 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 100TOPLAM = 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 Çı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 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 Çı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 … 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 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

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

107 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 …hızlı test 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 x 2 /2! – Cos 0 x 3 /3! + Sin 0 x 4 /4!.. Sin x = x – x 3 /3! + x 5 /5! – x 7 / 7! +...

109 Gerçek problemler: 1) Seri toplamı Sin x = x – x 3 /3! + x 5 /5! – x 7 / 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 – x 3 /3! + x 5 /5! – x 7 / 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 Satış

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 x i değeri için fark 2 = (a x i + b – y i ) 2 Fark karelerinin toplamı = Σ i (a x i + b – y i ) 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 x i + b – y i ) 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 Σ i x i (a x i + b – y i ) = 0 düzenlersek: a Σ i x i 2 + b Σ i x i – Σ i x i y i = 0 b’ye göre: 2 Σ i (a x i + b – y i ) = 0 düzenlersek: a Σ i x i + n b – Σ i y i = 0

115 …en küçük kareler a Σ i x i 2 + b Σ i x i = Σ i x i y i a Σ i x i + b n = Σ i y i İki bilinmeyen için iki denklem! Toplamlara isim verelim… Kolay olsun: X2 = Σ i x i 2 X = Σ i x i XY = Σ i x i y i Y = Σ i y i D = X2 * n – X*X a = (XY * n – X * Y) / D b = (X2 Y – X * XY) / D

116 …en küçük kareler X2 = Σ i x i 2 X = Σ i x i XY = Σ i x i y i 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 = Σ i x i 2 X = Σ i x i XY = Σ i x i y i 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 IwI81234 Fw.dF Ew.dE E+01 ESw.dES E+23 ENw.dEN E+21 A TcT20 nX5X İlk karakter: boşluk: Normal tek aralık 0: Ç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 …hızlı sınav 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)” REAL :: X = , Y = -1.0 INTEGER :: I = 987, J = -44 CHARACTER(20) :: Form = “(1X, I5, F10.1)” 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

127 …hızlı sınav 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 bbbbb READ ‘(I3, F7.0, 2X, I5, T20, F5.0)’, I, X, J, Y b bb876 bbbb CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)” ve X = , Y = 6.0, I = 99, J = 876

128 …hızlı sınav 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) CHARACTER (20) :: FORM = “(2I3, F5.2, F1.0)” ve X = , Y = 6.0, I = 99, J = 876

129 WRITE WRITE(kontrol_listesi) çıktı_listesi Kontrol_listesi’nde neler bulunabilir? 1. Birim numarası, çıktının alınacağı birim olabilir. (Bir tam sayı) UNIT = 6 veya sadece 6… 2. 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. 3. ADVANCE= yes_veya_no Eşitliğin sağı ya YES yahut NO’dur.

130 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 1. Birim numarası 2. Format ifadesi 3. ADVANCE

131 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) 1. Birim numarası 2. Format ifadesi 3. ADVANCE

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

133 READ READ (kontrol_listesi) girdi_listesi Kontrol_listesi’nde neler bulunabilir? 1. Birim numarası, girdinin okunacağı birim olabilir. (Bir tam sayı) UNIT = 5 veya sadece 5… 2. 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. 3. ADVANCE= yes_veya_no Eşitliğin sağı ya YES yahut NO’dur. 4. IOSTAT = ifade veya END = ifade

134 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 1. Birim numarası 2. Format ifadesi 3. ADVANCE 4. IOSTAT veya END 5. Dosya manipülasyon ifadeleri

135 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) 1. Birim numarası 2. Format ifadesi 3. ADVANCE 4. IOSTAT veya END 5. Dosya manipülasyon ifadeleri

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? ? FiyatSatış

137 Ö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: 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” birimFILE = STATUS = ACTION = POSITION = IOSTAT =

139 acma_listesi 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.) birimFILE = STATUS = ACTION = POSITION = IOSTAT = 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 REWIND 12 BACKSPACE 12

146 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

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) / 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)/ 1.8 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)/ 1.8 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. SAVEREAL, 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. 6 actual X

161 7 SUBROUTINE ALT PROGRAMLARI

162 Function alt programından farkı FUN(X) fonksiyon, SUB(X) subroutine olsun… 1. FUN’un ismi geri dönen değeri taşır. SUB herhangi bir değer taşımaz. 2. (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 – GUN = GUN +1 END DO

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

166 REAL, INTENT(IN) :: GIRENSAAT INTEGER :: 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

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: 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 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 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 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 program main integer :: i, j, topla integer, parameter :: nokta = 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

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

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, 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, PRINT*, NOT(I), ORTALAMA – NOT(I) 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(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, SAPMA(I) = ORTALAMA – NOT(I) DO 300 I = 1, PRINT*, NOT(I), SAPMA(I)

179 Eşdeğer ifadeler DO 100 I = 1, 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, 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 = 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)

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 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, topla = topla + ogrenci(i, 2) topla = topla / real(50) do 200 i = 1, ogrenci(i, 3) = topla - ogrenci(i, 2)


"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." indir ppt

Benzer bir sunumlar


Google Reklamları