FORTRAN 90 Prof Dr skender ksz Ar Gr
- Slides: 186
FORTRAN 90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin Arş. Gör. Hüseyin ARBAĞ Ders kitabı: FORTRAN 90 for Engineers and Scientists Larry Nyhoff ve Sanford C. Leestma Prentice Hall 1997
1 Bilgisayar programlama: Programlama dilleri, makine dili, yüksek düzey diller Derleyici, “source”, “object”, “link” kavramları. Algoritma, bir programın yaşamaları
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.
Makine dili X=A*B+C Opcode Operand 1) 0001000000000100000 (A’daki değeri reg. yükle) Hex: 08 00 04 00 2) 001001000000001000001 (B’deki değerle çarp) Hex: 24 00 04 01 3) 0010001100000001000010 (C’deki değeri reg. ile topla) Hex: 23 00 04 02 4) 000100000001000011 (Registerdeki değeri X’e taşı) Hex: 11 00 04 03 İki tabanındaki sayılar Ondalık sayılar Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Biraz daha hex Ondalık Hex 1=1 10 = A 36 = 24 147 = 93 255 = FF Hex Ondalık A 5 = 165 DD = 221
Makine dili - Assembler X=A*B+C 08 24 23 11 00 00 04 04 00 01 02 03 MOV MUL ADD STO A, ACC B, ACC C, ACC, X
Peki FORTRAN? X=A*B+C
Üst seviye dili o o o o FORTRAN C Pascal Basic C++ Java C# Üst seviye dili Derleyici (compiler) (Java’da ve scriptlerde yok) Makine dili
Derleme (Compilation) Kaynak kod (Source code) Üst seviye dili X=A*B+C Source module Ara dil (Java, C#) Derleyici (compiler) (Java’da ve scriptlerde yok) Object code Object module Makine dili 08 24 23 11 00 00 04 04 00 01 02 03
Bitti mi? Okuma programı Bağlama- link Object program Ekrana yazma programı … programı İcra edilebilir program: Executable Çarp_Topla. exe … programı dll : dynamic link library
Hatalar: o Derleme hataları (Compiler error) o Bağlama hataları (Falan modülü bulamadım) o İcra hataları (Run time error)
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 Başlangıç miktarı: 10 mg Yarı ömür: 140 gün Geçen zaman: 180 gün Çıktı Kalan miktar: ?
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ı: Baslangic. Miktari Kalan miktar: Kalan. Miktar Yarı ömür: Yari. Omur Geçen zaman: Gecen. Zaman
Hesaplama algoritması kuralım Girdiler Çıktı Başlangıç miktarı: Baslangic. Miktari Kalan miktar: Kalan. Miktar Yarı ömür: Yari. Omur Geçen zaman: Gecen. Zaman 1. Baslangic. Miktari, Yari. Omur, Gecen. Zaman değerlerini oku 2. Kalan. Miktar’ı hesapla 3. Kalan. Miktar değerini yaz
Algoritma… 1. Baslangic. Miktari, Yari. Omur, Gecen. Zaman değerlerini al 2. Kalan. Miktar’ı hesapla 3. Kalan. Miktar değerini yaz Nasıl? Gecen. Zaman = Yari. Omur ise: Kalan. Miktar = Baslangic. Miktari X 0. 5 Gecen. Zaman = 2 Yari. Omur ise: Kalan. Miktar = (Baslangic. Miktari X 0. 5) X 0. 5 = Baslangic. Miktari X (0. 5)2 Kalan. Miktar = Baslangic. Miktari X (0. 5) Gecen. Zaman/Yari. Omur Fortran ile: Kalan. Miktar = Baslangic. Miktari * 0. 5 ** (Gecen. Zaman / Yari. Omur)
Algoritma o Baslangic. Miktari, Gecen. Zaman, Yari. Omur değerlerini oku o Kalan. Miktar = Baslangic. Miktari * 0. 5**(Gecen. Zaman/Yari. Omur) hesapla o Kalan. Miktar’ı yazdır
Algoritma Akış diagramı (Flowchart) Başla Baslangic. Miktari Gecen. Zaman Yari. Omur değerlerini oku Kalan. Miktar = Baslangic. Miktari * 0. 5**(Gecen. Zaman/Yari. Omur) hesapla Kalan. Miktar değerini yaz Dur
Ara: Algoritma ~ El Harezmî Ebû Cafer Muhammed bin Musâ el- Harizmî (Ölümü: 847) İlk cebir kitabının yazarı: “Kitabı muhtasar fi hisabil- cebr ve’l mukabele” İlk “algoritma” fikri de onun; o yüzden adını taşıyor… Lâtinceye çevirirken H ile G’yi karıştırmışlar: H: ﺥ G: ﻍ
Artık programı yazabiliriz: 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: ! Baslangic. Miktari : Radyoaktif maddenin mg cinsinden başlangıç miktarı ! YarıOmur : Radyoaktif maddenin gün cinsinden yarı ömrü ! Gecen. Zaman : Gün cinsinden geçen zaman ! Kalan. Miktar : Gecen. Zaman gün sonra geriye kalan miktar (mg olarak) ! ! Girdiler : Baslangic. Miktari, Yari. Omur, Gecen. Zaman ! Çıktı : Kalan. Miktar !----------------------------------------------------
Radyoaktif bozunma programı… devam IMPLICIT NONE REAL : : Baslangic. Miktari, Yari. Omur, Gecen. Zaman, Kalan. Miktar ! Baslangic. Miktari, Gecen. Zaman, Yari. Omur değerlerini oku PRINT *, “Başlangıç miktarı, yarı ömür ve gecen zaman değerlerini giriniz: ” READ *, Baslangic. Miktari, Yari. Omur, Gecen. Zaman ! Kalan. Miktar = Baslangic. Miktari * 0. 5**(Gecen. Zaman/Yari. Omur) hesapla Kalan. Miktar = Baslangic. Miktari * 0. 5 ** (Gecen. Zaman / Yari. Omur) ! Kalan. Miktar değerini yaz PRINT *, “Kalan miktar =“, Kalan. Miktar, “mg” END PROGRAM Radyoaktif_Bozunma
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 Akış başka bir yerde 7 devam ediyor- oraya git Bir alt yordam- alt algoritma
Yazılım geliştirme aşamaları Çözümleme Veri düzeni ve algoritma tasarımı Kodlama Şelale modeli İteratif şelale modeli Bakım (maintenance) Test ve uygulama
Öğrendiğimiz FORTRAN ifadeleri o PROGRAM program- ismi n PROGRAM Radyoaktif_bozunma IMPLICIT NONE Type o REAL : : değişken-isimleri-listesi o n n REAL : : Baslangic. Miktari, Gecen. Zaman INTEGER : : Ogrenci. Sayisi, Ogrenci. Numarasi
Öğrendiğimiz FORTRAN ifadeleri Girdi (input) ifadesi o READ *, okunacak-değişkenler-listesi n READ *, Baslangic. Miktari, Yari. Omur, Gecen. Zaman Çıktı (output) ifadeleri o PRINT *, yazılacak-değişkenler-listesi n o PRINT *, “Kalan miktar = ”, Kalan. Miktar, “mg” WRITE(*, *) yazılacak-değişkenler-listesi n WRITE(*, *) “Kalan miktar = ”, Kalan. Miktar, “mg”
Öğrendiğimiz FORTRAN ifadeleri Atama (assignment) ifadesi o değişken = ifade n n Delta = b*b – 4. * a * c Kalan. Miktar = Baslangic. Miktari * 0. 5 ** (Gecen. Zaman / Yari. Omur) DİKKAT: Cebir denklemi değildir. Bazı dillerde = yerine kullanılır. A * b = c + d gibi şeyler yazılamaz. o Bitiş: END program-ismi n 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. n Kalan. Miktar, Yari. Omur, A 28, Radyoaktif_Bozunma
Ö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…
2 Temel FORTRAN o o o FORTRAN veri tipleri, sabitler, değişkenler Aritmetik işlemler, aritmetik fonksiyonlar Atama komutu Veri girişi ve veri çıkışı Program düzeni ve biçimi
FORTRAN veri tipleri, sabitler, değişkenler: Veri tipleri o o o INTEGER REAL COMPLEX CHARACTER LOGICAL Tam sayı Gerçek sayı Kompleks sayı Alfa-numerik. TRUE. . FALSE.
FORTRAN veri tipleri, sabitler, değişkenler: “Integer” sabitler Integer sabitler o Doğru: n o 0 137 -2516 +17745 Yanlış n 9, 999 16. 0 --5 7 - 3.
FORTRAN veri tipleri, sabitler, değişkenler: “Real” sabitler Real sabitler o Doğru: n 1. 234 -0. 01536 o Yanlış n 5 1, 234 -1. 536 E-2 6. 02 E 23 +5.
FORTRAN veri tipleri, sabitler, değişkenler: “Character” sabitler o “PDQ 123 -A” “Işın Çekirdek” ‘Işın Çekirdek’ ‘Işın’’ın’ o Yanlış ‘Işın’ın’ “PDQ 123 -A’
… değişkenler Önce ilan gerekiyor (decleration) type-specifier : : list INTEGER : : Ogrenci_Sayisi, Iterasyon İsterseniz ilk değerleri ilan sırasında verebiliyorsunuz: INTEGER : : Ogrenci_Sayisi = 65, Iterasyon = 2 REAL : : Kutle, Hiz REAL : : Kutle = 12. , Hiz
Character değişkenler CHARACTER (length-specifier) : : list Character(15) : : Isim, Soyad , Sokak*20 Character : : Isim = “Atila” Sadece A’yı taşır. Character(10) : : Isim = “Ali” “Alibbbbbbb”taşır Kesme de yastıklama da sağdan yapılıyor.
IMPLICIT NONE FORTRAN’da A-H, O-Z ile başlayan değişkenler otomatik olarak REAL sayılır I- N ile başlayan değişkenler: INDEX, JALE, NANEMOLLA… INTEGER sayılır. IMPLICIT NONE bu kabulü geçersiz kılar. IMPLICIT NONE kullanıldığında her değişkenin ne olduğu açıkça (explicit olarak) ilân edilmelidir.
PARAMETER REAL, PARAMETER : : Pi = 3. 141593 INTEGER, PARAMETER : : Ogrenci_Sayisi = 27 Bir başka ilk değer verme metodu. Fark: Bu değer program boyunca değiştirilmez. Neden gerektiğinde 3. 141593 yazmıyoruz?
“Identifiers” o Identifiers: Tanımlayıcılar Program isimleri PROGRAM Ikinci_Derece_Denklem 123 Değişken, parametre isimleri REAL Not. Ortalamasi INTEGER Ogrenci. Sayisi Harfle başlamalı. Devamı alfabe, sayı veya alt_çizgi olabilir. Toplam 31 karakter.
FORTRAN programını parçaları o o o Heading Specification Execution Subprogram END PROGRAM
Sorular Veri tiplerini sayınız o Karakter sabitleri …. veya …. arasına alınmalıdır. o Tanımlayıcılar …. ile başlamalı ve en çok …. karakter olmalıdır. o Fortran programının parçalarını sayınız o Bu değişkenlerin hangileri yanlıştır? Neden? Kalori A-tipi 2 tipi Saatte. Kilometre PS. 175 Saatte_Kilometre N/4 Yuz+ Yüz. Dolar o
Sorular o Aşağıdakiler doğru sabitler midir? Sabitin tipini söyleyiniz. Yanlışsa niçin? 1234 1, 234 -1. 0. 123 E+04 ‘ bir’ bir “bir” ‘Dalton’un yasasi’ 12. 34 YTL 123 E 4 +1234 12+34 “ 12+34”
Sorular Mu kelimesini bir INTEGER olarak tanımlayın INTEGER : : Mu Zaman ve Uzaklik kelimelerini REAL olarak tanımlayın REAL : : Zaman, Uzaklik Ad 1, Ad 2 20 karakterlik, Ad 3 10 karakterlik CHARACTER sabitleridir. Tanımlayın CHARACTER(20) : : Ad 1, Ad 2, Ad 3*10
Sorular Limit 1, Limit 2, Limit 3, başlangıç değerleri 10, 20, 30 olan tam sayılardır. Tanımlayın INTEGER : : Limit 1 = 10, Limit 2 = 20, Limit 3 = 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 Ad 1, Ad 2 en çok 20 karakter boyunda, Ad 3 en çok 10 karakterlik CHARACTER değişkenleridir. Tanımlayınız. CHARACTER(20) : : Ad 1, Ad 2, Ad 3*10
Sorular Bölüm, “Kimya Muhendisligi”ne eşit karakter değişkenidir. Tanımlayın. CHARACTER(*) : : Bolum = “Kimya Muhendisligi” Merih, 1. 2 E 12 ve Dunya 1. 5 E 10 değerlerini taşıyan sabitlerdir. Tanımlayınız. REAL, PARAMETER : : Merih = 1. 2 E 12, Dunya 1. 5 E 10
Aritmetik işlemler ve fonksiyonlar o o o Bilin bakalım bunlar hangi işlemler: + / * ** B 2 – 4 AC B**2 – 4 * A * C 9. / 4. 2. 25000 9/4 2 4. / 9. 0. 444444 4/9 0
Aritmetik işlemler ve fonksiyonlar o Karışıksa ne sonuç vereceğ belli olmaz; onun için karıştırmayın. 3. 0 + 8 / 5 ile 3 + 8. / 5 aynı sonucu vermez. o Bir durumda karıştırma tavsiye edilir: o 2. 0 ** 3 8. 0 2. **3. exp(3. ln(2. )
Aritmetik işlemler ve fonksiyonlar o o İş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 ABS(X) COS(X) EXP(X) INT(X) FLOOR(X) FRACTION NINT(X) LOG(X) REAL(X) MAX(X 1, … SIN(X) X N) MIN(X 1, … SQRT(X) X N) MOD(X, Y) TAN(X)
… fonksiyonlar o o X – Y bölü X + Y ‘nin mutlak değerinin logaritmasını alın LOG(ABS((X – Y) / (X + Y))) A 2 – B 2 – 2 AB Cos T nin FORTRANcasını yazın A ** 2 – B ** 2 – 2. * A * B * COS(T)
Ne eksik? o o Hesap yapıyoruz ama elde ettiğimiz değerleri bir yerlere koyamıyoruz: Atama ifadesi: Assignment statement: = Variable = expression
Atama ifadesi İlanlar, aslında hafızada (RAM’da) yer ayırır. REAL : : XKoord, YKoord INTEGER : : Sayi, Terim XKoord ? YKoord ? Sayi ? Terim ?
Atama ifadesi XKoord = 5. 23 YKoord = SQRT(25. 0) Sayi = 17 Terim = Sayi / 3 + 2 XKoord = 2. 0 * XKoord Ykoord Sayi Terim 10. 46 5. 23 ? 5. 0 ? 17 ? ? 7
Atama ifadesi o o o 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 -18. 567 B -18. 567 A B C -18. 567 122. 45 ? 122. 45
Atama ifadesi A = A +B ne demek? Böyle bir ifade acemi programcıyı şaşırtabilir. o A = A + B icra edildiği anda… o A 103. 883 122. 45 B -18. 567
Hızlı sınav INTEGER : : M, N Aşağıdakilerin geçerli atama ifadeleri olup REAL : : Pi, Alfa olmadığını, geçersizse sebebini söyleyin. Pi = 3. 141593 3=N N = N+ 1 N+1=N Alfa = 1 Alfa = “ 1” Alfa = Alfa M=N=1 Şu FORTRAN atama komutlarını yazınız: Hiz ile Zaman değişkenlerini çarpıp sonucu Mesafe’ye koyun. Mesafe = Hiz * Zaman A 2+B 2 ‘nin karekökünü C ye C = SQRT(A ** 2 + B **2) Sayi adlı tam sayı değişkeninin değerini 1 arttirin Sayi = Sayi +1
Serbest düşüş problemi z = ½ gt 2 + v 0 t + h 0 v = gt +v 0 Z = 0. 5 * g * Zaman + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir
Veri giriş çıkışı Z = 0. 5 * g * Zaman + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir READ *, giren veri-listesi READ (*, *) giren veri-listesi READ *, g, zaman, vsifir, hsifir PRINT *, çıkan veri-listesi WRITE (*, *) çıkan veri-listesi PRINT *, “Yükseklik = “, Z, “m”, “Hız = ”, Hiz, “m/s”
Serbest düşüş probleminin giriş-çıkışlı hâli 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 + Vsifir * Zaman + Hsifir Hiz = g * Zaman + Vsifir PRINT *, “Yukseklik = “, Z, “m”, “ Hiz = ”, Hiz, “m/s” PRINT *, “Hosca kalin…” END PROGRAM Serbest_Dusme
Not: END ve STOP komutları o o Eskiden END program dosyasının sonunu gösterirdi. Programlar STOP END diye biterdi. Şimdi END STOP + END anlamına geliyor. END programın sonunda kullanılır. STOP’u istediğiniz yerde kullanabilirsiniz. STOP veya STOP 15 veya STOP “BITTI”
Program düzeni ve biçimi o o o o Satır en çok 132 karakter uzunluktadır Komutları aralarına ; koyarak tek satıra yazabilirsiniz Satır altta devam edecekse sonuna & konur CHARACTER zincirini devam ettirmek için hem satır sonuna, hem diğer satırın başına & konur. PRINT *, “Nasilsiniz? İyi misiniz? & & Korkarim iyisiniz. : -)” “Comment” için satır ! ile başlatılır. Arada da kullanılır. REAL Hiz ! Herhangi bir andaki hiz İfadelerde etiket (statement label) kullanılıyorsa bu ifadeden önce gelir, etiket ile ifade arasında en az bir boşluk bırakılır ve etiket 1 – 99999 arasında bir sayı olur. İfadeler icra edilir (executable) veya icra edilmeyen (non-executable) diye ayrılır.
Akış kontrolü READ *, A, B, C DELTA = B*B – 4. * A * C DELTA = SQRT(DELTA) X 1 = (-B + DELTA) / (2. * A) X 2 = (-B - DELTA) / (2. * A) PRINT *, X 1, X 2
Akış kontrolü devam… READ *, A, B, C DELTA = B*B – 4. * A * C IF(DELTA > 0) THEN DELTA = SQRT(DELTA) X 1 = (-B + DELTA) / (2. * A) X 2 = (-B - DELTA) / (2. * A) PRINT *, “Kokler gercek: ”, X 1, X 2 END IF
Akış kontrolü devam… READ *, A, B, C DELTA = B*B – 4. * A * C IF(DELTA > 0) THEN DELTA = SQRT(DELTA) X 1 = (- B + DELTA) / (2. * A) X 2 = (- B – DELTA) / (2. * A) PRINT *, “Kokler gercek: ”, X 1, X 2 ELSE DELTA = SQRT(-DELTA) X 1 R = -2. * B X 2 R = X 1 R X 1 IM = DELTA / (2. * A) X 2 IM = -X 1 I PRINT *, “Kokler kompleks: X 1 = ”, X 1 R, XIIM, “ ve X 2 =“, X 2 R, X 2 IM END IF
READ *, A, B, C DELTA = B*B – 4. * A * C IF(DELTA > 0) THEN DELTA = SQRT(DELTA) X 1 = (- B + DELTA) / (2. * A) X 2 = (- B – DELTA) / (2. * A) PRINT *, “Kokler gercek: ”, X 1, X 2 ELSE IF (DELTA < 0) THEN DELTA = SQRT(-DELTA) X 1 R = -B / (2. * A) X 2 R = X 1 R X 1 IM = DELTA / (2. * A) X 2 IM = -X 1 I PRINT *, “Kokler kompleks: X 1 = ”, X 1 R, XIIM, “ ve X 2 =“, & X 2 R, X 2 IM ELSE X 1 = -B / (2. * A) X 2 = X 1 PRINT*, “Kokler esit, X 1 = X 2 = ”, X 1 END IF
Ödev: İkinci derece denklem çözen programı yazıp çalıştırın ama sıra şöyle olsun: Önce diskriminant >0, sonra pozitif. o 0 - 100 arasındaki öğrenci notunu okuyup, 0 - 20 ye F 20 - 40 a D 40 - 60 a C 60 - 80 e B 80 - 100 e A veren bir program yazınız. o
Bir başka problem: Bir program yazınız: Haftanın günlerini sayı olarak okusun. Günün adını yazsın: 1 ise Pazartesi, 2 ise Salı, … ve 7 ise Pazar…
Gün programı PROGRAM HAFTANIN_GUNLERI IMPLICIT NONE INTEGER GUN PRINT *, “HAFTANIN HANGI GUNU? ” READ *, GUN IF(GUN == 1) THEN PRINT *, “PAZARTESI” STOP ELSE IF(GUN == 2) THEN PRINT *, “SALI” STOP ELSE IF(GUN == 3) THEN PRINT *, “CARSAMBA” STOP
Haftaya devam: IF(GUN == 4) THEN PRINT *, “PERSEMBE” STOP ELSE IF(GUN == 5) THEN PRINT *, “CUMA” STOP ELSE IF(GUN == 6) THEN PRINT *, “CUMARTESI” STOP
…VE HAFTANIN SONU IF(GUN == 7) THEN PRINT *, “PAZAR” STOP ELSE PRINT *, “GIRDIGINIZ GUNDE BIR & &YANLISLIK OLMASIN? ”, GUN END IF END PROGRAM HAFTANIN_GUNLERI
Aynı probleme bir başka çözüm: SELECT CASE (GUN) CASE (1) PRINT *, “PAZARTESI” CASE (2) PRINT *, “SALI” CASE (1) CASE (3) PRINT *, “CARSAMBA” CASE (4) PRINT *, “PERSEMBE” CASE (5) PRINT *, “CUMA” CASE (6) PRINT *, “CUMARTESI” CASE (7) PRINT *, “PAZAR” CASE DEFAULT PRINT *, “GIRDIGINIZ SAYI 1 ILE 7 ARASINDA DEGIL: “, GUN END SELECT END PROGRAM HAFTANIN_GUNLERI
Şimdi “resmen” görelim: IF IF (logical expression) THEN ifadeler… END IF ELSE de bulunabilir: IF (logical expression) THEN ifadeler… ELSE başka ifadeler… END IF
Başka? IF (logical expression) THEN ifadeler… ELSE IF (logical expression) THEN ifadeler… END IF
…VE ELSE IF IF (logical expression) THEN ifadeler… ELSE IF(logical expression) THEN başka ifadeler… ELSE IF(logical expression) THEN daha da başka ifadeler ELSE ifadeler. . ifadeler… END IF
SELECT CASE(selector) CASE (alternatif 1) ifadeler… CASE (alternatif 2) ifadeler… -----CASE DEFAULT ifadeler… END CASE alternatif diye belirttiğimiz etiketlerin içinde INTEGER, CHARACTER veya LOGICAL sabit veya ifade olabilir. REAL olamıyor. . Neden? DEFAULT ne demek?
IF ve SWITCH ifadeleri isim alabilir İsim: IF(logical expression) THEN ----END IF İsim: SELECT(selector) -----END SELECT İsim
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. 02 E 23 . 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. , “X 1= ”, X 1
Mantık operatörleri özeti: Kıyas operatörleri: Diğer mantık operatörleri . GT. . LT. . GE. . LE. > < >= <= . AND. . OR. . NOT. . EQV. . EQ. . NE. == /= . NEQV. Hiyerarşi: . NOT. . AND. . OR. . EQV. (veya. NEQV. )
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 . TRUE. . NOT. P. AND. Q . FALSE. P. AND. Q. OR. . NOT. R . TRUE. P. OR. Q. AND. Q . TRUE. P. AND. . NOT. Q. OR. R . FALSE. P. AND. . NOT. (Q. OR. R) . FALSE.
… alıştırmalar INTEGER: : NUMBER = 3, COUNT = 4, SUM = 5 Aşağıdaki mantık ifadelerinin sonucunu bulunuz: SUM – NUMBER <= 4 . TRUE. 0 <= COUNT <= 5 OLMAZ! NUMBER**2 + COUNT**2 = = SUM**2 . TRUE. NUMBER < COUNT. OR. COUNT < SUM . TRUE. (NUMBER + 1 < SUM). AND. . NOT. (COUNT + 1 < SUM)
…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 olmaz (-10 <= X). AND. (X <= 10)
…alıştırmalar REAL: : X, Y X ve Y’nin ya birlikte negatif, yahut birlikte pozitif olduklarını. TRUE. Sonucunu veren bir mantık ifadesi yazınız. (X < 0). EQV. (Y < 0)
…alıştırmalar Aşağıdakilerden hangileri geçerli IF ifadeleridir? IF( A > B) PRINT *, A IF B < C N = N + 1 X IF ( X <= Y) STOP IF (A = X) READ *, Y IF(1 <= N <= 10) N = 10 X IF (N > 1) PRINT *, “*” IF ( X = = 10) INTEGER: : TAM X
…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 6 X = 5, Y = 5 5 X = 6, Y = 5 6
…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 10 X = 5, Y = -5 10 X = -5, Y = 5 10
…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 PEKIYI N = 90 PEKIYI N = 89 IYI N = 70 ORTA N=0 ZAYIF
…alıştırmalar N tam sayısı negatif veya 100’den büyükse çıktıya “ARALIK DISI” yazan bir IF ifadesi yazın: IF( N < 0. OR. N > 100) PRINT *, “ARALIK DISI”
…alıştırmalar REAL: : X; INTEGER N IF (X< 1. 5) THEN IF (X < 1. 5) N = 1 X <= 1. 5 ise N = 1, ELSE IFX(X. OR. < 2. 5) 1. 5 < X < 2. 5 ise IF (1. 5< X <THEN 2. 5) N = 2 ve X bunların N = 2 dışındaysa N = 3 IF (X >= 2. 5) N = 3 değerini veren bir IF ELSE yazınız. Yazarken N=3 programınızın hızlı çalışmasına dikkat END IF edin.
…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
…alıştırmalar REAL: : ORTALAMA READ*, ORTALAMA SELECT CASE (INT(ORTALAMA) CASE (90: ) NOT = “A” CASE (80: 89) NOT = “B” CASE (70: 79) NOT = “C” CASE (60: 69) NOT = “D” CASE(: 59) NOT = “F” END SELECT
4 Tekrarlı icra IF ve SELECT komutlar olmasa FORTRAN programında ifadeler yazılış sırasına göre yerine getirilirdi. Programlar “karar” veremezdi. Düz akışı değiştiren son komut tipi “tekrar” yapılarıdır. Tekrar yapıları bir şart yerine gelinceye kadar aynı işlemler kümesinin bir daha- bir daha yapılmasını sağlar.
Sayaçlı DO döngüleri DO kontrol-değişkeni = ilk-değer, son-değer, adım ifadeler END DO kontrol-değişkeni ilk değer son-değer adım : Bir tam sayı değişkenidir : kontrol-değişkeninin alacağı ilk değerdir. : kontrol-değişkeninin alabileceği son değerdir : Döngüden her geçişte ilk değer’e eklenecek tam sayıdır
DO kontrol-değişkeni = ilk-değer, son-değer, adım ifadeler END DO !Misal, sayıların toplamı !Misal: 1’den N’e kadar tek sayıların toplamı: INEGER: : I, N REAL: : TOPLAM -----TOPLAM = 0. DO I = 1, N , 2 TOPLAM = TOPLAM + I END DO
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 tek sayıların toplamı !Misal: sayıların toplamı: INEGER: : I, N REAL: : TOPLAM -----TOPLAM = 0. DO I = 100, 1, N , 2 100 TOPLAM = TOPLAM + I
Sınıf ortalamasının bulunması !Sınıfta 54 öğrenci var. Aldıkları notlar tek !girilecek ve öğrenci sayısı (OGRENCI) kadar !not girildiğinde ortalama hesaplanacak: PROGRAM ORTALAMA_AL IMPLICIT NONE INTEGER: : OGRENCI, SAYAC REAL: : TOPLAM, ORTALAMA, NOT
Sınıf ortalamasının bulunması TOPLAM = 0. DO SAYAC = 1, OGRENCI PRINT*, “NOT GIRINIZ” READ*, NOT TOPLAM = TOPLAM + NOT END DO ORTALAMA = TOPLAM / REAL(OGRENCI) PRINT*, OGRENCI, “ OGRENCININ ORTALAMA & &NOTU = “, ORTALAMA END PROGRAM ORTALAMA_AL
Aynı problemin bir başka çözümü TOPLAM = 0. DO SAYAC = OGRENCI, 1, -1 PRINT*, “NOT GIRINIZ” READ*, NOT TOPLAM = TOPLAM + NOT END DO ORTALAMA = TOPLAM / REAL(OGRENCI) PRINT*, OGRENCI, “ OGRENCININ ORTALAMA & &NOTU = “, ORTALAMA END PROGRAM ORTALAMA_AL
Hızlı sı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 1 2 / 2 3/ 3 4/ 4 5/ 5 6/ 6 7
…hızlı sınav Çıktı nedir: DO I = 6, 1, -1 PRINT*, I**2 END DO DO I = 6, 6 PRINT*, “MERHABA” END DO DO I = 6, 5 PRINT*, “MERHABA” END DO 6 5 36 25… MERHABA
İki kural: 1 o DO parametreleri döngünün içinde değiştirilemez: DO I = 1, 10 PRINT*, I I = I +1 OLMAZ END DO
İki kural: 2 o DO döngüleri içiçe geçebilir: DO I = 1, 5 PRINT*, I DO J = 1, 4 PRINT*, I + J END DO
Mantık çıkışlı DOlar DO ifadeler IF(mantık-ifadesi) EXIT daha-ifadeler END DO
DO ifadeler IF(mantık-ifadesi) EXIT daha-ifadeler END DO Ortalama probleminin mantık DO’suyla çözümü TOPLAM = 0. SAYAC == 10 DO DO SAYAC = 1, OGRENCI DO SAYAC =“NOT SAYAC +1 PRINT*, GIRINIZ” PRINT*, “NOT GIRINIZ” IF(SAYAC > 53) EXIT READ*, NOT PRINT*, “NOT GIRINIZ” TOPLAM = + TOPLAM = TOPLAM + NOT READ*, SAYAC +1 END DO =NOT TOPLAM => TOPLAM IF(SAYAC 53) EXIT + NOT END DO DO END
CYCLE Bir şart yerine geldiği zaman döngünün o tekrarı yapılmaz: 1’den N’e kadar sayıları toplama: DO DO I = 1, N I = I +1 TOPLAM = TOPLAM + I IF(I>N) EXIT END IF(I/2*2 DO TOPLAM. EQ. = TOPLAM 2) CYCLE+ !ISADECE TEK SAYILAR END TOPLAM DO = TOPLAM + I END DO
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 X “post-test” döngüsünün içindeki komutlar en az bir kere yapılır
…hızlı test Programcılar üç (dört) tip hata yaparlar: 1 - Başlangıçta bol gramer hatası- Bunlar derlemede yakalanır 2 - Program çalışırken ortaya çıkacak hatalar: 0’a bölmek, sayı değişkenine karakter okumak gibi. Bunlar icra aşamasında ortaya çıkar. 3 - Mantık hataları – bunları ancak testlerin yanlış sonuç vermesiyle anlaşılır… 4 - Link zamanı hataları: Yazılamayan dosyalar, bulunamayan alt programlar…
…hızlı test SQRT fonksiyonunun içine negatif bir sayı girmesi …………. . hatasıdır icra zamanı gramer Unutulmuş bir parantez veya tırnak …………. . hatasıdır ve …………. . bunu yakalar. derleyici Bir algoritma tasarımında bir adımın ihmal edilmesi …………………. hatasıdır. ………. . bunu yakalar mantık ? ?
…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 = 2 * SAYI END DO
…hızlı test SAYI ve LIMIT tam sayı ise aşağıdaki program parçası 4 ve -2 girdileri ile nasıl bir çıktı verir? READ*, LIMIT SAYI = 0 DO IF(SAYI > LIMIT) EXIT LIMIT <= 4 -2 PRINT*, SAYI 0/ 1/ 2/ 3/ 4 SAYI = SAYI + 1 END DO
…hızlı test SAYI ve LIMIT tam sayı ise aşağıdaki program parçası 4 ve -2 girdileri ile nasıl bir çıktı verir? READ*, LIMIT SAYI = 0 DO PRINT*, SAYI LIMIT <= <= 4 -2 IF(SAYI > LIMIT) EXIT 0/ 0 1/ 2/ 3/ 4/ 5 SAYI = SAYI + 1 END DO
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! +. . .
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
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
Gerçek problemler: 2) En küçük kareler metodu Fiyat Satış 160 126 180 103 200 82 220 75 240 82 260 40 280 20
…en küçük kareler Yapılması gereken: Kavuniçi parçaların toplamını minimize etmek! Toplamını? . . . Mutlak değerlerinin toplamını veya karelerinin toplamını.
…en küçük 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 fark 2 = (a xi+ b – yi)2 Fark karelerinin toplamı = Σi(a xi+ b – yi)2 En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir…
…en küçük 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 Σixi 2+ b Σixi – Σixiyi = 0 b’ye göre: 2 Σi(a xi+ b – yi) = 0 düzenlersek: a Σi xi+ n b – Σiyi = 0
…en küçük kareler a Σixi 2+ b Σixi = Σixiyi a Σi xi+ b n = Σiyi İki bilinmeyen için iki denklem! Toplamlara isim verelim… Kolay olsun: X 2 = Σixi 2 X = Σixi XY = Σixiyi Y = Σiyi D = X 2 * n – X*X a = (XY * n – X * Y) / D b = (X 2 Y – X * XY) / D
…en küçük kareler X 2 = Σixi 2 X = Σixi XY = Σixiyi D = X 2 * n – X*X a = (XY * n – X * Y) / D b = (X 2 Y – X * XY) / D ____________________________________________________ REAL : : X 2, X, XY, Y, D, A, B, IKS, YE INTEGER : : N, SAYAC READ *, N X 2 = 0; XY = 0; Y = 0 DO SAYAC = 1, N READ *, IKS, YE X = X + IKS X 2 = X 2 + IKS * IKS XY = XY + IKS * YE Y = Y + YE END DO
…en küçük kareler X 2 = Σixi 2 X = Σixi XY = Σixiyi D = X 2 * n – X*X a = (XY * n – X * Y) / D b = (X 2 Y – X * XY) / D ____________________________________________________ DO SAYAC = 1, N READ IKS, YE X = X + IKS X 2 = X 2 + IKS * IKS XY = XY + IKS * YE Y = Y + YE END DO D = X 2 * REAL(N) – X * X A = (XY * REAL(N) – X * Y) / D B = (X 2* Y – X * XY) / D PRINT *, N, A, B
…en küçük kareler
5 GİRDİ- ÇIKTI I/O
DAHA ŞIK ÇIKTILAR Çıktılar canınızı sıktı… PRINT *, LIRA, “TL”, YENILIRA, “YTL EDER” 1. 2000000 E +07 TL 12. 0000 YTL EDER PRINT 20, LIRA, “TL”, YENILIRA, “YTL EDER” 20 FORMAT( F 12. 0, 2 X, A, 5 X, F 8. 2, 2 X, A) 12552000 TL 12. 55 YTL EDER --------------------
DAHA ŞIK ÇIKTILAR En küçük kareler probleminde… PRINT *, N, A, B 12 -7. 92923532 E-01 2. 49998734 E+02 Gibi abuk çıktılar verecektir… Halbuki PRINT 55, N, A, B 55 FORMAT( 1 X, I 5, F 12. 5, 5 X, F 12. 1) 7 -0. 79294 249. 9 -----------------
…daha şık çıktılar PRINT 55, N, A, B 55 FORMAT( 1 X, I 5, F 12. 5, 5 X, F 12. 1) yerine PRINT “( 1 X, I 5, F 12. 5, 5 X, F 12. 1)”, N, A, B PRINT 20, LIRA, “TL”, YENILIRA, “YTL EDER” 20 FORMAT( F 12. 0, 2 X, A, 5 X, F 8. 2, 2 X, A) yerine PRINT “( F 12. 0, 2 X, A, 5 X, F 8. 2, 2 X, A)”, LIRA, “TL”, & YENILIRA, “YTL EDER” yazabiliriz. . .
…Daha şık çıktılar… Format ifadeleri: Örnekler: 1234, 3. 14159 ve 6. 02 10**23 Iw I 8 1234 Fw. d F 12. 4 3. 1416 Ew. d E 14. 4 0. 3142 E+01 ESw. d ES 14. 4 6. 0200 E+23 ENw. d EN 14. 4 602. 0000 E+21 İlk karakter: A boşluk: Normal tek aralık Tc T 20 0: Çift aralık n. X 5 X +: Üstüne yaz 1: Sonraki sayfadan başla
Hızlı sınav (Doğru mu yanlış mı? ) İlk karakter 0 ise bir sonraki sayfaya gidilir. X (Doğru mu yanlış mı? ) 3 I 2 ile I 2, I 2 aynıdır. (Doğru mu yanlış mı? ) F 10. 3 formatındaki 10, ondalık işaretinin solundaki hane sayısını, 3 de sağındaki hane sayısını verir. X (Doğru mu yanlış mı? ) T formatı çıktı ve girdilerin belli bir noktada kesilmesi (truncate) için kullanılır. X (Doğru mu yanlış mı? ) Format PRINT’deki bilgiye göre kısaysa, sağa bakan ilk parantezden itibaren tekrarlanır.
…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 ‘(1 X, 4 I 3)”, N ifadesi, 100 değerini kaç defa yazdıracaktır? 1 defa
…hızlı sınav REAL : : X = 234. 56, Y = -1. 0 INTEGER : : I = 987, J = -44 CHARACTER(20) : : Form = “(1 X, I 5, F 10. 1)” Ne çıkar? sorularda, şu ifadelerin daha önce Aşağıdaki PRINT 5, I, X kabul ediniz: yazıldığını 5 FORMAT(1 X, “I = “, I 3, 2 X, “X =“, F 8. 3, “BITTI”) 234. 56, Y = -1. 0 IREAL =987 : : XX= =234. 560 BITTI -------------------INTEGER : : I = 987, J = -44 PRINT Form, I, X, J, Y CHARACTER(20) : : Form = -1. 0 “(1 X, I 5, F 10. 1)” 987 234. 5 -44 -------------------PRINT ‘(1 X, F 10. 0 / 1 X, I 3, T 11, I 5)’, X, I, J 234. 987 -44 -------------------
CHARACTER (20) : : FORM = “(2 I 3, F 5. 2, F 1. 0)” …hızlı sınav ve X = 123. 45, Y = 6. 0, I = 99, J = 876 Bu değerlerin alınabilmesi için veri nasıl yazılmalı? READ *, I, J, X, Y 99 876 123. 45 6. READ “(2 I 3, 2 F 6. 0)”, I, J, X, Y b 99876123. 45 bbbbb 6 ------------READ ‘(I 3, F 7. 0, 2 X, I 5, T 20, F 5. 0)’, I, X, J, Y b 99 123. 45 bb 876 bbbb 6 -------------
CHARACTER (20) : : FORM = “(2 I 3, F 5. 2, F 1. 0)” …hızlı sınav ve X = 123. 45, Y = 6. 0, I = 99, J = 876 Bu değerlerin alınabilmesi için veri nasıl yazılmalı? READ FORM, I, J, X, Y b 99876123456 ------------READ 9, I, X, J, Y 9 FORMAT(I 2, F 5. 2 / I 3, F 2. 1) 9912345 ------------87660 -------------
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. 3. 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.
1. WRITE 2. 3. 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
1. WRITE 2. 3. Birim numarası Format ifadesi ADVANCE Formatlı çıkış almak isterseniz: WRITE (6, ‘(1 X, 2 F 10. 2)’) AHMET, MEHMET WRITE (6, FMT = ‘(1 X, 2 F 10. 2)’) AHMET, MEHMET WRITE (6, 30) AHMET, MEHMET 30 FORMAT (1 X, 2 F 10. 2) WRITE (UNIT = 6, FMT = 30) AHMET, MEHMET 30 FORMAT (1 X, 2 F 10. 2)
1. WRITE Peki ADVANCE ne? ADVANCE = “NO” ADVANCE = “YES” 2. 3. Birim numarası Format ifadesi ADVANCE
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. 3. 4. 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
1. READ 2. 3. 4. Birim numarası Format ifadesi ADVANCE IOSTAT veya END Dosya manipülasyon ifadeleri 5. 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. READ 2. 3. 4. Birim numarası Format ifadesi ADVANCE IOSTAT veya END Dosya manipülasyon ifadeleri 5. Formatlı okuma isterseniz: READ (5, ‘(2 F 10. 2)’) AHMET, MEHMET READ (5, FMT = ‘(2 F 10. 2)’) AHMET, MEHMET READ (5, 30) AHMET, MEHMET 30 FORMAT (2 F 10. 2) READ (UNIT = 5, FMT = 30) AHMET, MEHMET 30 FORMAT (2 F 10. 2)
Dosya işlemleri Veri her zaman öyle birkaç sayı olmaz. Girişte de, çıkışta da… Klavyeyle yazıp, ekrandan okuyamazsınız… Dosyalara yazmak ve dosyalardan okumak gerekir. 500 değer çifti olan bir en küçük kareler? 500 000? Fiy Sat a ı t ş 160 126 180 103 200 82 220 75 240 82 260 40 280 20
Ö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ı?
birim açma_listesi ACTION = FILE = POSITION = STATUS = 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”
birim acma_listesi ACTION = FILE = POSITION = STATUS = IOSTAT = ACTION = “READ” veya “WRITE” veya “READWRITE” Meselâ INTEGER : : KOD IOSTAT = KOD POSITION = “REWIND” veya KOD = 0 dosya kazasız belasız açıldı… “APPEND” veya “ASIS” KOD > 0 dosya açılamadı, sebep verilen numaradan IOSTAT = bir_tam_sayı_değişken bulunur… Daha sonra bu değişkeni okuyup KOD < 0 Verilerin sonuna sonuçta ne olduğunu anlayabiliriz. gelindi, hata yok… (IOSTAT, READ ile de kullanılabilir. )
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…
…OPEN Dosya ismini illâ programın içine yazmak gerekmez… CHARACTER(10): : Dosya. Ismi WRITE(*, ‘(1 X, A)’, ADVANCE = “NO”) & “Dosyanin ismini yaziniz: ” READ*, Dosya. Ismi OPEN(UNIT = 12, FILE = Dosya. Ismi, STATUS = “OLD”, & ACTION = “READ”, POSITION = “REWIND”, IOSTAT = & ACILDIMI) IF (ACILDIMI >0) PRINT “**** DOSYAYI ACAMIYORUM***”
…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, ‘(1 X, 2 F 10. 3)’) FIYAT, MIKTAR İşimiz bitince de dosyayı kapatırız: CLOSE(13)
IOSTAT uygulama örneği DO !Bir sonraki veriyi oku READ (12, *, IOSTAT = GIRDI_DURUMU) KOD, & SICAKLIK, BASINC IF(GIRDI_DURUMU > 0) STOP “GIRDI HATASI” IF(GIRDI_DURUMU < 0) EXIT !Veri bitti ! Veriyi işlemeye devam et SAY = SAY +1 …. . TOPLAMBASINC = TOPLAMBASINC + BASINC END DO
END uygulama örneği DO !Bir sonraki veriyi oku READ (12, *, END = 20) KOD, SICAKLIK, BASINC !IF(GIRDI_DURUMU < 0) EXIT YERİNE… ! Veriyi işlemeye devam et SAY = SAY +1 …. . TOPLAMBASINC = TOPLAMBASINC + BASINC END DO 20 CONTINUE
REWIND ve BACKSPACE Genel ifade: REWIND birim REWIND 12 BACKSPACE birim
Hızlı sınav WRITE (10, 20) X, Y ifadesinde 10 ve 20 nedir? 10 yazılacak birim (cihaz veya dosya), 20 bir FORMAT ifadesidir. PRINT *, CEVAP ifadesine eşdeğer bir WRITE ifadesi yazınız. WRITE (*, *) CEVAP (Doğru mu yanlış mı? ) OPEN komutundaki FILE = “NEW” bu dosyanın mevcut olmadığını, bu program tarafından yaratılacağını gösterir. X
Hızlı sı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, ‘(5 x, I 3)”) NOT (Doğru mu yanlış mı? ) IOSTAT = VAR ise ve hata meydana gelmemekle birlikte dosyanın sonuna varılmışsa, VAR eksi değer alacaktır. (Doğru mu yanlış mı? ) READ(5, 10, END = 15) NOT komutunda, okunacak veri kalmayınca program, 15 numaralı komuttan devam edecektir.
Hızlı sınav (Doğru mu, yanlış mı) BACKSPACE komutu, mevcut konumun soluna bir değer yazmak için kullanılır. X _____ komutu, dosyayı başlangıcına REWIND çekmek için kullanılır.
6 FONKSİYON ALT PROGRAMLARI
FORTRAN’ın İÇ FONKSİYONLARI Kitapta 324. sayfadaki 6. 1 tablosuna bakın… Bu fonksiyonlar programlarda serbestçe kullanılır. LOG 10 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)
…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)
…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)
…Fahrenheit- Santigrat dönüşümü FUNCTION F_DEN_C_YE (FSICAKLIK) REAL : : F_DEN_C_YE REAL INTENT(IN) : : FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32. 0)/ 1. 8 END FUNCTION F_DEN_C_YE
…Fahrenheit- Santigrat dönüşümü PROGRAM SICAKLIK_DONUSUMU IMPLICIT NONE REAL : : FDERECESI, CDERECESI CHAR(1) : : CEVAP DO WRITE(*, ‘(1 X, A)’, ADVANCE = “NO”) “F SICAKLIGI GIRINIZ” READ *, FDERECESI CDERECESI = F_DEN_C_YE(FDERECESI) PRINT ‘ 1 X, 2(F 6. 2, A)’, FDERECESI, “ F ”, CDERECESI, “ C YE ESITTIR” WRITE(*, ‘(1 X, A)’, ADVANCE = “NO”) “BASKA DONUSUM YAPCAN MI? & & (E VEYA H)” READ *, CEVAP IF (CEVAP /= “H”) EXIT END DO CONTAINS FUNCTION F_DEN_C_YE (FSICAKLIK) REAL : : F_DEN_C_YE REAL INTENT(IN) : : FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32. 0)/ 1. 8 END FUNCTION F_DEN_C_YE END PROGRAM SICAKLIK_DONUSUMU INTERNAL
…Fahrenheit- Santigrat dönüşümü PROGRAM SICAKLIK_DONUSUMU IMPLICIT NONE REAL : : FDERECESI, CDERECESI CHAR(1) : : CEVAP DO WRITE(*, ‘(1 X, A)’, ADVANCE = “NO”) “F SICAKLIGI GIRINIZ” READ *, FDERECESI CDERECESI = F_DEN_C_YE(FDERECESI) PRINT ‘ 1 X, 2(F 6. 2, A)’, FDERECESI, “ F ”, CDERECESI, “ C YE ESITTIR” WRITE(*, ‘(1 X, A)’, ADVANCE = “NO”) “BASKA DONUSUM YAPCAN MI? & & (E VEYA H)” READ *, CEVAP IF (CEVAP /= “E”) EXIT END DO END PROGRAM SICAKLIK_DONUSUMU FUNCTION F_DEN_C_YE (FSICAKLIK) REAL : : F_DEN_C_YE REAL INTENT(IN) : : FSICAKLIK F_DEN_C_YE = (FSICAKLIK – 32. 0)/ 1. 8 END FUNCTION F_DEN_C_YE EXTERNAL
…Fonksiyonun tipi 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
Değişkenler… Yerel değişken- global değişken (Scope… Erişim? ) Altprogramda ilan edilen değişkene dışarıdan ulaşılamaz. Ana programda ilân edilen değişkene o programın iç alt programlarından ulaşılabilir. Eğer alt programda aynı isimde değişken varsa, o öne geçer. SAVE REAL, SAVE : : liste veya SAVE liste INTENT (IN) REAL INTENT (IN) : : ….
HIZLI SINAV 1. İki tip FORTRAN altprogramı hangileridir? FUNCTION ve SUBROUTINE 2. FUNCTION alt programının dört parçasını sayın. fonksiyon başlığı tanımlar kısmı icra kısmı END FUNCTION ifadesi
HIZLI SINAV 3. TOPLA (A, B) de A ve B nedir? TOPLA fonksiyonun argümanları 4. Bir programda, bir değişkenin değerine ulaşılabilen program kısımlarına o değişkenin nesi denir? Scope 5. (Doğru mu? ) Fonksiyon alt programı ve ana program aynı değişken isimlerini kullanabilir. √
HIZLI SINAV FUNCTION NE(N) INTEGER : : NE INTEGER INTENT(IN) : : N NE = (N * (N + 1) ) / 2 END FUNCTION NE Ana programda SAYI 1 = NE(SAYI 2) yazıyorsa SAYI 2’ye, ……… actual argüman denir. Ana programda SAYI = NE(3) yazıyorsa, SAYI hangi değeri alır? 6 NE fonksiyonun içinde NE = 1 gibi bir ifade bulunabilir. X
7 SUBROUTINE ALT PROGRAMLARI
Function alt programından farkı FUN(X) fonksiyon, SUB(X) subroutine olsun… 1. 2. FUN’un ismi geri dönen değeri taşır. SUB herhangi bir değer taşımaz. (1) in sonuçları: FUN’un tipi vardır: REAL, INTEGER, LOGICAL gibi… SUB’un tipi yoktur.
Function alt programından 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.
Örnek: 132. 23456 gibi bir saat değeri verildiğinde bunu gün, saat, dakika, saniye’ye çevirip sonucu basan bir subroutine !Bu subroutine yukarda anlatılan işi yapar SUBROUTINE GSDS(GIRENSAAT) REAL, INTENT(IN) : : GIRENSAAT INTEGER : : TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE TAMSANIYE = GIRENSAAT * 3600. + 0. 5 GUN = 0 DO IF(TAMSANIYE. LT. 86400) EXIT TAMSANIYE = TAMSANIYE – 86400 GUN = GUN +1 END DO
REAL, INTENT(IN) : : GIRENSAAT INTEGER : : TAMSANIYE, GUN, SAAT, DAKIKA, SANIYE GUN = 0 DO IF(TAMSANIYE. LT. 86400) EXIT TAMSANIYE = TAMSANIYE – 86400 GUN = GUN +1 END DO SAAT = 0 DO IF(TAMSANIYE. LT. 3600) EXIT TAMSANIYE = TAMSANIYE – 3600 SAAT = SAAT +1 END DO
REAL, INTENT(IN) : : GIRENSAAT INTEGER : : TAMSANIYE, GUN, SAAT, DAKIKA, 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 "(1 X, T 10, A, T 20, A, T 30, A, T 40, A/ 2 X, 4 I 10)", “GUN”, & “SAAT”, “DAKIKA”, “SANIYE”, GUN, SAAT, DAKIKA, SANIYE END SUBROUTINE GSDS
Kullanılışı PROGRAM BIRPROGRAM REAL : : SAATLER PRINT *, “KAC SAAT? ” READ*, SAATLER CALL GSDS(SAATLER) END PROGRAM BIRPROGRAM
Bir başka çözüm SUBROUTINE GSDS(GIRENSAAT, GUN, SAAT, DAKIKA, SANIYE) REAL, INTENT(INOUT) : : GIRENSAAT INTEGER, INTENT(OUT) : : GUN, SAAT, DAKIKA, SANIYE INTEGER : : TAMSANIYE …. . ! VE PRINT KOMUTU BU SUBROUTINE’DEN CIKARILIR …. . END SUBROUTINE GSDS
Bir başka çözüm: PROGRAM BIRPROGRAM REAL : : SAATLER PRINT *, “KAC SAAT? ” READ*, SAATLER CALL GSDS(SAATLER, GUN, SAAT, DAKIKA, SANIYE) PRINT "(1 X, T 10, A, T 20, A, T 30, A, T 40, A/ 2 X, 4 I 10)", & “GUN”, “SAAT”, “DAKIKA”, “SANIYE”, & GUN, SAAT, DAKIKA, SANIYE END PROGRAM BIRPROGRAM
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
Hızlı test 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 = CALCULATE(2. 45, CODE, ID_NUMBER) X X CALL CALCULATE(RATE + 0. 5, 0, CODE 2 ID_NUMBER) CALL CALCULATE(RATE, ID_NUMBER) X CALL CALCULATE(RATE, CODE, ID_NUMBER) CALL CALCULATE X CALL CALCULATE(RATE, RATE) X √
Aşağıdaki program nasıl çıktı verir? program question_11 character(3) : : str 1 = “cat”, str 2 = “dog”, str 3 = “elk” call change(2, str 1, str 2, str 3) print*, “String = “, str 1, str 2, str 3 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
Çözümler- Cosinus real function cosinusus(x) program main implicit none REAL : : x !cos x = 1 - x 2/2! + x 4/4!- xn/ n! +. . . REAL, INTENT(IN): : x INTEGER : : j REAL : : cosx, terim x = 0. INTEGER : : fkt, isaret, i do j=0, 90 cosx = 1. ; fkt = 1 ; isaret = 1 print*, cos(x), cosinusus(x) do i=1, 20, 2 isaret=-isaret x=x+0. 01745 fkt = fkt * i * (i +1) terim = REAL(isaret) * x**(i+1) / fkt end do cosx=cosx+terim CONTAINS end do cosinusus = cosx …. end function cosinusus end program main
Çözümler- çeyrek çember program main integer : : i, j, function topla icmidismi(x, y) Integer integer, real, parameter : : nokta intent(in) : : x, =y 10000 real : : sonuc if(sqrt(1 -x*x) > y) then topla = 0 icmidismi = 1 do 100 ielse = 0, nokta do 100 j = 0, nokta icmidismi = 0 100 topla = topla + icmidismi(i/real(nokta), j/real(nokta)) end if sonuc = real(topla) / (nokta + 1) ** 2 function icmidismi printend *, 4. *sonuc end program main
program main logical function boltest(sayi, bolen) implicit none integer, intent(in): : sayi, bolen integer : : i, j if((sayi/bolen) * bolen == sayi) then logical asalmi, boltest =. true. do 100 i = 3, 1001, 2 else asalmi =. true. boltest =. false. do 200 j = 3, i-1 end if if(boltest(i, j)) asalmi =. false. end function boltest 200 continue 100 if(asalmi) print *, i end program main
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 = 0. DO 100 I = 1, 50 READ *, NOT PRINT*, NOT 100 ORTALAMA = ORTALAMA + NOT ORTALAMA = ORTALAMA / 50. ŞİMDİ N’APCAZ?
Dizinler- Arrays 50 öğrencili bir sınıfta, her öğrencinin notunu ve notun ortalamanın kaç puan üstünde veya altında olduğunu hesaplayıp bastırmak istiyoruz. REAL, REAL DIMENSION(50) : : NOT(50) NOT(1: 50) : : NOT ORTALAMA = 0 DO 100 I = 1, 50 READ *, NOT(I) 100 ORTALAMA = ORTALAMA + NOT(I) ORTALAMA = ORTALAMA / 50. 200 DO 200 I = 1, 50 PRINT*, NOT(I), ORTALAMA – NOT(I)
Başka bir çözüm REAL : : NOT(50), SAPMA(50) ORTALAMA = 0 DO 100 I = 1, 50 READ *, NOT(I) 100 ORTALAMA = ORTALAMA + NOT(I) ORTALAMA = ORTALAMA / 50. DO 200 I = 1, 50 200 SAPMA(I) = ORTALAMA – NOT(I) DO 300 I = 1, 50 300 PRINT*, NOT(I), SAPMA(I)
Eşdeğer ifadeler DO 100 I = 1, 50 100 READ *. NOT(I) yerine READ *, (NOT(I), I = 1, 100) veya READ *, NOT PRINT için de aynı şeyler geçerli. . . “imâ edilen” do = implied do Meselâ: DO 300 I = 1, 50 300 PRINT *, NOT(I), SAPMA(I) yerine PRINT *, (NOT, SAPMA, I = 1, 50)
Hafızada yer ne zaman ayrılıyor? REAL : : NOT(1: 50) veya REAL, DIMENSION(1: 50) : : NOT Bunlar icra edilebilen (executable) ifadeler değil. . . Bütün ilân ifadeleri gibi (tip, implicit, v. s. ) derleme zamanında yerine getiriliyor. Peki ya öğrenci sayısını bilmiyorsak? REAL, DIMENSION(: ), ALLOCATABLE : : NOT, SAPMA
İcra zamanı dizinleri REAL, DIMENSION(: ), ALLOCATABLE : : NOT, SAPMA INTEGER : : HATA. . READ *, OSAY ALLOCATE(NOT(1: OSAY), SAPMA(1: OSAY), STAT = HATA) IF(HATA. NE. 0) STOP “HAFIZADA YER YOK”. . DEALLOCATE(NOT, SAPMA, STAT = HATA) IF(HATA. NE. 0) PRINT *, “BOYLE BIR ARRAY YOK KI. . . ”
Fortran dizin fonksiyonları ALLOCATED(A) DOT_PRODUCT(A, B) MAXVAL(A) MAXLOC(A) MINVAL(A) MINLOC(A) PRODUCT(A) SIZE(A) SUM(A)
Not ortalaması probleminin başka bir çözümü PROGRAM NOT_ORTALAMASI. . . PRINT *, ORTALAMA(NOT, OSAYI). . . CONTAINS REAL FUNCTION ORTALAMA (DEGERLER, SAYI) INTEGER : : SAYI REAL : : DEGERLER(SAYI) ORTALAMA = SUM(DEGERLER) /REAL(SAYI) END FUNCTION ORTALAMA END PROGRAM NOT_ORTALAMASI
Başka. . . Dizin elemanlarına DO’suz da değer verilebilir: REAL : : A(10) A=0 Bütün elemanları 0 yapar A = (/11, 22, 33, 44, 55, 66, 77, 88, 99, 110 /) Elemanlara gösterilen değerleri verir Bilin bakalım bu ne yapar: REAL : : B(5) INTEGER : : I(5) I = (/5, 3, 3, 4, 3/) B = A(I) A(1: 10: 2) = (/(I**2, I = 1, 5)) INDEKS ÜÇLÜSÜ (SUBSCRIPT TRIPLET)
WHERE En iyisi misalle anlatmak: integer, dimension(5) : : a = (/0, 2, 5, 0, 10/) real dimension(5) : : b WHERE(a > 0) b= 1. 0/ a WHERE(a>0) b = 1. 0/a ELSEWHERE b = -1. 0 END WHERE
Öğrenci programının devamı. . . Öğrenci numaraları, notları okunacak, ortalamdan sapmalarıyla birlikte yazılacak. real : : ogrenci(50, 3), topla integer : : i read 20, (ogrenci(I, 1), ogrenci(I, 2), I = 1, 50) 20 format(2 f 10. 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)
- Bilanci i nje biznesi
- Dr skender
- Debi dhe kredi ne kontabilitet
- Skender basic
- Prica cesta skender kulenovic analiza
- Dr skender
- Fortran77
- Fortran ge
- What is fortran
- Fortran
- Input/output statement in fortran
- Fortran goto
- Fortran language
- Fortran car
- Coarray fortran tutorial
- Fortran programski jezik
- Compaq visual fortran
- Fortran
- Fortran
- Function in fortran
- Is fortran case sensitive
- Fortran mpi hello world
- Fortran code example
- Fortran keras bridge
- None
- Fortran 1957
- Funciones en fortran
- Coarray fortran tutorial
- Objektum orientált programozás
- Fortran 77 tutorial
- The fortran optimizing compiler
- Fortran programming examples
- Fortran
- Fortran data types
- Fortran card
- Dimension fortran
- Megan damon
- Sejarah fortran
- Linguaggio fortran
- Fortran programlama dili
- Basic cobol fortran
- Fortran translator
- Prof andries stulting
- Studenti e professori uniti per
- Conclusion partielle exemple
- Prof 2000
- 5th digit finger
- Science prof online
- Oscar breathnach
- Prof. larissa rocha
- Prof jasper imungi
- Candda
- Bekir kocazeybek
- Hydrophilic substances
- Enteral beslenme kontrendikasyonları
- Science prof online
- Professor robert galavan
- Prof angela gallop
- Pnwumonia
- Prof. dr. kristan schneider
- Milan miljevic
- Allo prof prédicat
- Prof dr zaliman sauli
- Prof john fitzgerald
- Calitatile doinei
- Ali fuat güneri
- Shine dalgarno dizisi görevi
- Those winter sundays poetry prof
- Homologi hromozomi
- Brometo de ciclopentila
- Professor michael woodward
- Prof. dr. ramazan öztürk
- Ayhan demiriz
- Hadi pratomo
- Prof ram meghe institute of technology and research
- Adenin
- Professor arthur winter
- Enkoprezis ne demek
- Lernzirkel erbkrankheiten
- Merton miller
- Prof. dr. izzet öztürk
- Prof. dr. arief s. rachmat
- V/n=rt/p
- Einkunftsarten
- Prof dr metin ingeç
- Prof. dr biljana stojković
- Pacemaker
- Prof. dr. pradeep kumar gupta
- Prof dr behçet coşar
- Prof. dr. mustafa serdar genç
- Ayah dr. iris rengganis
- Fosfoglukomutaz nedir
- Prof chris french
- Sait karakurt
- Prof. dr. hasan serdar öztürk
- Dr abid hossain mollah
- Prof dr gerhard schmidt
- Prof paul browne
- Elektrostimülasyon
- Prof. carsten grüllich
- Prof. johanna haberer
- Xuhua xia rate my prof
- Prof. dr. stephan madaus
- Kryteria king's college
- Ekstrapiramidal bozukluklar ve hareket bozukluklari
- Prof. dr. fügen aktan
- Dr faruk yencilek
- Tayfun oktar
- Yahya büyükaşık hacettepe
- Prof dr pervin topçuoğlu
- Shock prof
- Prof dr kamil adalet
- Randamentul motorului otto
- Angle congru allo prof
- Professor jan papy
- Prof maya devita
- Hipofosfatazi
- Prof lorenz heidelberg
- Prof.sse
- Prof. dr. cem ficicioglu
- Prof turum
- Prof jamasri
- Prof dr ali mert
- @prof.aline gaque
- Pozycja ortopnoe
- Umi narimawati
- Prof agamenon
- Prof dr cengiz kılıç
- Poetry prof
- Prof dr ahmet ursavaş
- Who classification of pneumonia
- Rachel lindner upb
- Prof. karl plotz
- Alloprof registre de langue
- Ptisam
- Prof w c wilson
- Prof suganda tanuwidjaja
- Prof dr nevzat yüksel
- Prof dr fatih gülşen
- Prof.dr.pelin gündeş
- Pembangunan ekonomi menurut prof denis goulet
- Doalgaz
- Prof. dr. matthias loose
- Lehrstuhl gröpl
- Deniz cemgil arıkan yorumlar
- Rahmi onur iletişim
- Prof. dr. karim fereidooni herkunft
- özofageal disfaji
- Under supervision of prof
- Ebru dikensoy
- Roy sembel
- Emin üstünyurt
- Prof. dr. peter baumeister
- Prof lardo
- Ali metin kafadar
- Bektaş tepe biyoloji
- Prof ad
- Prof.dr. sezgin alsan
- Submatite
- Primitivo lupoli
- Prof jamal wiwoho
- Luka tembak (vulnus)
- Kompartman sendromu 5p
- Luka
- Prof dr murat derbent
- Prof kasai ndahiriwe
- Hiley formula
- Nuran yıldız kimdir
- Cispr 22 radiated emission limits
- Proiect prof
- Prof dr tamer sayın
- Fabrizio onida
- Sfi research professorship
- Red cell antikor testi
- Prof azhar kasim
- Aphasie
- Prof dr aysun idil
- Posner schlossman sendromu
- Murat vural itü
- Prof. dr. petek aşkar
- Prof dr bülent erbay
- "universidade paulista unip instituto"
- [email protected]
- Dr emel başar
- Prof dr rengin yıldırım
- Submergion diş
- Prof. dr. fügen aktan