FORTRAN 90 Prof Dr skender ksz Ar Gr

  • Slides: 186
Download presentation
FORTRAN 90 Prof. Dr. İskender Öksüz Arş. Gör. Alpay Şahin Arş. Gör. Hüseyin ARBAĞ

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”

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)

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

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 =

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

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

Peki FORTRAN? X=A*B+C

Üst seviye dili o o o o FORTRAN C Pascal Basic C++ Java 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

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

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

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ı

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ı

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

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 =

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.

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)

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,

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.

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

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

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

Öğ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.

Öğ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 =

Öğ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ış,

Ö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

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

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

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

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

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,

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

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

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.

“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

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

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

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

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

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

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: + /

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.

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.

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

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

… 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

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

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

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

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.

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 :

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

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 *

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 = ½

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

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

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

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

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

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

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

Ö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:

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

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)

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 *,

…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

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:

Ş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

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…

…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

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)

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.

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.

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.

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

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

…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

…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

…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

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

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

…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

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

…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

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

…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

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

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

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

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ı

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”

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

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

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

…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

İ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*,

İ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

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 =

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ı

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

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

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

…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

…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

…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

…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

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

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

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

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ı? . . .

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

…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

…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

…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

…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

…en küçük kareler

5 GİRDİ- ÇIKTI I/O

5 GİRDİ- ÇIKTI I/O

DAHA ŞIK ÇIKTILAR Çıktılar canınızı sıktı… PRINT *, LIRA, “TL”, YENILIRA, “YTL EDER” 1.

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.

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,

…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

…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

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

…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

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

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.

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

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 =

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

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

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

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

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

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

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.

Ö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

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 =

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

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

…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

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

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)

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

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

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

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

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

6 FONKSİYON ALT PROGRAMLARI

FORTRAN’ın İÇ FONKSİYONLARI Kitapta 324. sayfadaki 6. 1 tablosuna bakın… Bu fonksiyonlar programlarda serbestçe

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

…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

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

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

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

…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

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

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

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ı

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

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

7 SUBROUTINE ALT PROGRAMLARI

Function alt programından farkı FUN(X) fonksiyon, SUB(X) subroutine olsun… 1. 2. FUN’un ismi geri

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ış: . . .

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

Ö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

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

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

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

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

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)

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,

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

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

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

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

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

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

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

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

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)

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

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

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

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

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,

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

Öğ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)