n m mİ -...

34
Arzu Erdem 2010-2011 BAHAR DÖNEMİ FORTRAN 2010-2011 Bahar Dönemi Matematik Bölümü ders notları Koceali Üniversitesi [email protected]

Upload: vanthu

Post on 08-May-2018

399 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Arz

u E

rdem

20

10

-20

11

BA

HA

R D

ÖN

EMİ

FO

RT

RA

N

2010-2011 Bahar Dönemi Matematik Bölümü ders notları

Koceali Üniversitesi [email protected]

Page 2: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

GİRİŞ

AMAÇ:

Problem çözme kavramını geliştirmek ve incelemek

Problem çözerken başka yollar düşünmek ve geliştirmek

Problemi çözmek için öncelikle, problemin nasıl bir duruşunun veya tavrının olduğunu

düşünmemiz gerekmektedir. Ve bu bazen göründüğü kadar kolay olmamaktadır. Bunun için

2 temel yöntem ele alınabilir:

1. Doğal diller

2. Yapay diller

DOĞAL DİLLER

Pek çok insanın kullanmış olduğu dillerdir. Fakat zaman zaman farklılıklar mevcut olabilir.

Örneğin

o 3 yaşındaki bir çocuk ile yetişkinin konuşması arasındaki farklar

o Bir araba yapımında, fizikçi ile mühendisin kullanmış olduğu dil arasındaki farklılıklar

o Yeni teknolojilerin kullanımlarının anlatılmasında işçi ve yöneticilerin kullanmış

olduğu diller, vb.

Veya doğal diller bazen çok anlamlı da olabilirler. Örneğin

Yaşlı bir adam ve kadın yolda yürüyorlar.==> Kadın ve adam ikisi de yaşlı mı?

Bu yüzden problemin tanımlanması ve çözülmesinde doğal dilleri kullanırken çok dikkatli

olmalıyız!

YAPAY DİLLER

En çok kullanılan yapay diller ise teknik terim ve notasyonlardır:

Terimler

o Sıcaklık (°C, °F)

o Basınç ((Pa)-Pascal, (N/m2) Newton/m2)

o Kütle ((kg), (g), (t) - ton), vb.

Notasyonlar

o Cebir (N,Z,Q,R,C ile gösterilen sayı kümeleri)

o Temel hesaplar ( )

o Mantık ( )

Page 3: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ALGORİTMA

Bir problemi veya problemin bir parçasını çözmek için kullanılan adımlar dizisidir.

Hata! Sıra belirtilmemiş.Tost ve yağda yumurta pişirmek için bir algoritma yazınız.

Öncelikle pişirmek için eksiklerimizin olup olmadığını kontrol etmek ve varsa bunları

tamamlamak işimizin yarısını yapmak demektir. Buna göre

1. İhtiyaç listesini belirleriz

sonra ise

2. Yapılacakları adım adım sıralarız. Burada adımlarımızın tam olması gerekmektedir. Örneğin

yumurta yapımında yağı koymadan yumurtaları kırarsak yumurtalarımız yanabilir gibi

PROGRAM DİLLERİ

PROGRAM DİLİ NEDİR?

Problemi çözmek için bilgisayarın anlamlandırdığı bir araçtır. Problemlerin çeşitliliği ile

birlikte programların çeşitliliği meydana gelmiştir.

Programın ilk olarak 0-1 i kullanan bir dijital araç olarak başlamıştır. Ve 0-1 ikilisinin

kullanımının yetersiz geldiği durumlarda ise programlar geliştirilmiştir.

FORTRAN (FORMULA TRANSLATİON)

1954’ten 1957 ye kadar IBM ve John Backus tarafından geliştirilen bir dildir. Problemlerin

bilimsel olarak çözülmesinde kullanılır ve öğrenmesi oldukça kolaydır. Bilimsel olarak hala

kullanılan bir dildir ve özellikle eğitim sektöründe uygun olması sebebiyle kullanılır. 1958 de

Fortan II versiyonu ile yenilenmiştir. Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90,

Fortran 95, Fortran 2003 ve Eylül 2010’da Fortran 2010 adıyla bilinen geliştirilmiş versiyonları

da mevcuttur.

COBOL (COMMON BUSİNESS ORİENTATED LANGUAGE)

İş dünyası tarafından kabul edilen bir programdır. Bilimsel hesaplamalardan daha çok daha

karmaşık tarzdaki problemler için kullanılır.

ALGOL

1950’lerde geliştirilen ve UNESCO tarafından desteklenen bir dildir. Ve Algol 60, Algol 68 gibi

versiyonları ile geliştirilmiştir.

PASCAL

Page 4: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Pascal’ı dizayn eden Niklaus Wirth, Algol 68’in disaynında bulunmuştur. Pascal görüntü

olarak Algol 68 ile benzerlikler taşırken daha etkili ve öğrenmesi daha kolay bir dildir.

BASİC (BEGİNNERS ALL PURPOSE SYMBOLİC INSTRUCTİON CODE)

Kemeny ve Kurtz tarafından Dartmouth da, 1960’larda geliştirilmiştir. Öğrenmesi kolay

olduğu gibi bazı yetersizliklerinden dolayı çok fazla eleştiri alan bir dildir.

C

Brian Kernighan ve Dennis Ritchie tarafından geliştirilen yüksek seviyede gelişmeler içeren

bir dildir.

MATLAB(MATRİX LABORATORY)

C, C++ ve Fortran dillerini içinde barındıran bir ara yüzdür. 1970 lerde University of New

Mexico’da Cleve Moler tarafından oluşturulmuş ve 2000 lerde MathWorks tarafından

geliştirilmiştir.

Page 5: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

VERİ TİPLERİ

SABİTLER

INTEGER (TAM SAYI)

Tamsayı türüdür ve sınırlıdır. İşlemcinin ve bilgisayarın kapasitesine göre sınır değişir.

ÖÖÖrrrnnneeekkk:::

1234 tamsayıdır ancak 1234. değildir.

REAL (REEL SAYI)

8 basamağa kadar değişen bir sabittir.

ÖÖÖrrrnnneeekkk:::

1234.

1234E3=1234000

-23456. = -2.3456E4

DOUBLE

16 basamağa kadar değişen reel sayılardır. Reel sayılardaki E sembolü yerine D sembolü

kullanılır.

Örnek:

1234D3=1234000

CHARACTER (KARAKTER)

Tek harf veya harfler bütünüdür. Tek tırnak içinde yazılır.

Örnek:

‘S’

‘ ‘

‘Abab’

‘Bugün hava çok güzel’

Yanlış kullanım

Page 6: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

‘Yanlış kullanım

Yanlış kullanım’

Karakter işlemlerinde kesme işareti kullanmak için iki kesme işareti tanımlanmalıdır.

ÖÖÖrrrnnneeekkk::: ‘Bugün Sıla’’nın doğum günü’

LOGİCAL (MANTIKSAL)

Doğru ve yanlış değerlerini alan mantıksal sabitlerdir.

ÖÖÖrrrnnneeekkk::: . true ve .false

COMPLEX (KOMPLEKS SAYILAR)

Kompleks sayılar reel sayı ikilileri olarak tanımlanır.

ÖÖÖrrrnnneeekkk::: (1.2345,-6.5E4) 1.2345 reel kısım, -6.5E4 sanal kısım olarak tanımlanır.

DEĞİŞKENLER

Değişkenler, programın depoladığı giriş, çıkış, sabit ve ara değerlerdir. Değişkenlerin

isimlerinde alfabetik karakter ve sayı bulunabilir. Ancak isimler harflerle başlamalıdır ve 31

karakterden uzun olmamalıdır. Ayrıca değişkenleri programın başında tanımlamalıyız!

ÖÖÖrrrnnneeekkk:::

A3, A_2, loop3, sam, A3B4 Doğru

123x, 0A, _abc Yanlış

Fortran büyük ve küçük harf ayrımı yapmaz!

ÖÖÖrrrnnneeekkk::: NUMBER ve NUMber isimli değişkenler aynıdır!

Sabitler gibi değişkenlerinde tipleri mevcuttur ve tipler sabit tipleri gibidir. Programın

başlangıcında değişken tiplerini tanımlarken çok dikkatli olunmalıdır. Eğer değişken

tanımlamayı yapmazsanız, Fortran otomatik olarak bir belirleme yapar:

I,J,K,L,M,N harfleri ile başlayan değişkenler tam sayıdır,

A -H ve O – Z harfleri ile başlayan değişkenler reel sayı olarak atanır.

CHARACTER*7:: PROG PROG=’FORTRAN’

Page 7: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

EKRANA YAZMAK

VARSAYILAN FORMATTA YAZMAK

EKRANA YAZMAK

VARSAYILAN FORMATTA YAZMAK

LOGİCAL:: D D=.TRUE.

PROGRAM NASIL YAZILIR VE ÇALIŞTIRILIR?

Fortran ara yüzü için kullanılacak program Force 2.0 dır.

Yeni dosya açmak için FİLE –NEW

Var olan dosyayı açmak için FİLE –OPEN

En son açılmış olan dosyaları açmak için FİLE – REOPEN

Kaydetmek, Farklı formatta kaydetmek ve tüm dosyaları kaydetmek için FİLE –SAVE,

FİLE –SAVE AS, FİLE –SAVE ALL kullanılır. Dosya uzantıları .f olarak kaydedilir.

Programı veya tüm programları kapatmak için FİLE – CLOSE, FİLE – CLOSE ALL

Programı çalıştırmak için RUN (F9)

Programı derlemek için RUN – COMPİLE (CTRL+F9)

Derlenen programı açmak için RUN – EXECUTE (SHİFT + F9)

Programı durdurmak için RUN – STOP (CTRL+ F12)

WRİTE(*,*)

Programın çıktılarının ekranda görünmesi ve yazdırılması için kullanılır. Parantez içindeki ilk *

işareti çıktının nereye yazılacağını ikinci * ise hangi formatta yazılacağını belirtir.

WRITE(*,*)

READ(*,*)

Programın girişlerinin okunması için kullanılır. Write da olduğu gibi parantez içindeki ilk *

işareti çıktının nereye yazılacağını ikinci * ise hangi formatta yazılacağını belirtir.

READ (*,*)

Klavye

Read (*,*)

Bilgisayar

Page 8: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

PROGRAMI ADLANDIRMAK VE BİTİRMEK

Program yazarken aşağıdaki gibi program ile başlamalı stop ve end ile bitirmeliyiz.

Program Program_adı …. İşlemler …. Stop End Program_adı

Programı kaydederken kaydedeceğimiz ad ve Program_adı aynı olmak zorunda değildir

ancak hangi programın neyi ifade ettiğini anlamamız açısından aynı adları vermekte fayda

vardır.

COMMENT (YORUM) SATIRLARI

Çalışmayan ve yorumda bulunulacak veya açıklama yapılacak satırlar için C, ! işaretlerinden

biri kullanılır.

ÖÖÖrrrnnneeekkk::: “Merhaba tanıştığıma memnun oldum. Ben …” yazdıran program,

hi.f

ÖÖÖrrrnnneeekkk::: İki sayının toplamını yazdıran program,

top.f

ÖÖÖrrrnnneeekkk::: Değişken tiplerinin hassasiyeti ile ilgili program. (x=3.4 y=3 ve tanımlama integer

olarak ve x/(x-y) ifadesini buldursun!),

Degisken.f

ÖÖÖrrrnnneeekkk::: Kompleks sayılarda 4 işlemi hesaplayan program,

Kompleks.f

Bilgisayar

write (*,*)

Ekran

Page 9: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

OPERATÖRLER

ARİTMETİK OPERATÖRLER

Operator Açıklama

+ Toplama veya pozitif sayı

- Çıkarma veya negatif sayı

* Çarpma

/ Bölme

** Kuvvet

MATEMATİKSEL FONKSİYONLAR

Fonksiyon Açıklama

ABS (x) X in mutlak değer

COS (x) x in Cosine değeri (radian olarak)

EXP(x) Exponential Fonksiyon

INT(x) X’in tam kısmı

LOG(x) X in doğal logaritması

MAX(xl, . . . , Xn) xl, . . .,xn ‘nin Maximumu

Page 10: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

MIN(xl, . . . , xn) xl, . . ., xn ‘nin Minimumu

MOD(x,y) x (mod y); x - INT(x/y) * y

NINT(x) X in en yakın tamsayıya yuvarlatılması

SIN(x) X in Sine değeri (radian olarak)

SQRT(x) x in karekökü

MANTIKSAL OPERATÖRLER

Operator Açıklama

.NOT. Mantıksal negatiflik

.AND. Mantıksal birleşme

.OR. Mantıksal ayrılma

.EQV. Mantıksal eşitlik

.NEQV. Mantıksal eşitsizlik

.NOT.

Logic 1 .NOT. (Logic 1)

TRUE FALSE

FALSE TRUE

.AND.

Logic 1 Logic 2 (Logic 1) .AND. (Logic 2)

TRUE TRUE TRUE

TRUE FALSE FALSE

Page 11: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

FALSE TRUE FALSE

FALSE FALSE FALSE

.OR.

Logic 1 Logic 2 (Logic 1) .OR. (Logic 2)

TRUE TRUE TRUE

TRUE FALSE TRUE

FALSE TRUE TRUE

FALSE FALSE FALSE

.EQV.

Logic 1 Logic 2 (Logic 1) .EQV. (Logic 2)

TRUE TRUE TRUE

TRUE FALSE FALSE

FALSE TRUE FALSE

FALSE FALSE TRUE

.NEQV.

Logic 1 Logic 2 (Logic 1) .NEQV. (Logic 2)

TRUE TRUE FALSE

TRUE FALSE TRUE

FALSE TRUE TRUE

FALSE FALSE FALSE

ÖÖÖrrrnnneeekkk::: employed=.true, age=50 ” test = employed .AND. (age<45)” değeri nedir?

ÖÖÖrrrnnneeekkk::: name = ‘James’ ” test = (name='Dimitris') .OR. (name='James')” değeri nedir?

ÖÖÖrrrnnneeekkk::: big=100, small=2 ” test = .NOT. (big>small)” , “test = .NOT. test” değerleri nedir?

Page 12: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ÖÖÖrrrnnneeekkk::: “test = (5*3>12) .EQV. (6*2>8)”, “test = (5*3<12) .EQV. (6*2<8)” değerleri nedir?.

ÖÖÖrrrnnneeekkk::: “test = (5*3>12) .NEQV. (6*2>13)”, “test = (5*3>12) .NEQV. (6*2<13)” değerleri

nedir?.

Operatorler.f

İLİŞKİSEL OPERATÖRLER

Operator Açıklaması

.LT. Küçük

.LE. Küçük veya eşit

.EQ. Eşit

.NE. Eşit deği

.GT. Büyük

.GE. Büyük veya eşit

İŞLEM ÖNCELİĞİ

Sıra İşlem Bilgisayar Dili

1 Parantezler ()

2 Üs alma A**B

3 Çarpma ve Bölme A*B, A/B

4 Toplama ve Çıkarma A+B, A-B

Page 13: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ÖÖÖrrrnnneeekkk::: Aşağıdaki ifadeleri dışarıdan girilen değerler için sonuçları bulduran programlar,

A+B-C+2AB-7,

,

,

,

,

Page 14: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

KONTROL İFADELERİ

IF KOŞUL

If karar yapısı, bir koşul sağlandığı zaman yapılacak işlemleri kapsar. Kontrol edilecek koşul

ifadesinin sonucu True değerini alırsa, If End If bloğu arasındaki kodlar çalıştırılır.

If (Şart) Then Komutlar ElseIf (Şart) Komutlar ElseIf (Şart) Komutlar … Else Komutlar End If

Eğer birden fazla koşulumuz yoksa ancak birden fazla komutumuz varsa

If (Şart) then Komutlar End If

Tek şartımız varsa Then ve End If kullanmayabiliriz.

IF (TODAY.EQ.MONDAY) THEN

.

ELSEIF (TODAY.EQ.TUSDAY) THEN

.

ELSEIF (TODAY.EQ.WEDDAY) THEN

.

ELSEIF (TODAY.EQ.THRDAY) THEN

.

ELSEIF (TODAY.EQ.FRIDAY) THEN

.

ELSEIF (TODAY.EQ.SATDAY) THEN

.

Page 15: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ELSEIF (TODAY.EQ.SUNDAY) THEN

.

ELSE

there has been an error. The variable TODAY has

taken on an illegal value.

ENDIF

If (Şart) Komutlar

Örnek:

1 , 0

,0 2( )

3 ,2 4

4 , 4

x

x xf x

x

x x

ile tanımlanan fonksiyonun dışarıdan girilen “x” değerine

göre ( )f x ’i hesaplayan program,

Örnek: 2( ) 5 3f x x x fonksiyonu için sgn ( )f x fonksiyonunu hesaplayan ,

Örnek: Dışarıdan girilen herhangi bir sayının negatifi pozitif veya 0 olduğunu veren program,

Örnek: Dışarıdan girilen bir sayının tek mi çift mi olduğunu veren program,

Örnek: Dışarıdan girilen 2 sayıdan büyük olanı veren programı yazınız.

Örnek: 1.vize ve 2. Vize durumlarına göre not hesabı yapan ve geçmesi için finalden kaç

alması gerektiğini veren program,

Page 16: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

SELECT CASE

Tekrarlamalı If koşulu yerine Select Case yapısı da kullanılabilir.

SELECT CASE( ifade ) CASE( değeri ) koşullar ... CASE DEFAULT koşullar END SELECT

select case season

case ('summer')

leaves = .true.

sun = .true.

case('winter')

leaves = .false.

sun = .false.

case('spring','autumn')

leaves = .true.

sun = .false.

case default

write(*,*) 'mistake in season name'

end select

Örnek: Verilen aya göre hangi mevsimde olduğu belirten program,

Örnek: Belirtilen tarihteki ayın kaç gün sürdüğünü veren algoritmayı yazınız.

AY.f

Page 17: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Örnek: Dışarıdan girilen tek haneli bir sayıyı yazı ile yazdıran programın VBasic dilinde yazınız.

SAYI.f

Örnek: Katlı bir otoparkta arabalar girişte plaka numaraları, sahibinin adı ve giriş saati kaydedilecektir. Garaj yöneticisi araba sahibi gelip plakasını veya ismini söylediğinde arabanın kalma süresi ile orantılı olan ücretini bulup fişini kesebilecek program,

OTOPARK.f

0 - 2 saat 1,5 YTL

2 - 8 saat 3 YTL

8-24 saat 5 YTL

Örnek:

Koc - 21 Mart - 20 Nisan

Boga - 21 Nisan - 20 Mayıs

Ikizler - 21 Mayıs - 21 Haziran

Yengec - 22 Haziran - 22 Temmuz

Aslan - 23 Temmuz - 23 Ağustos

Basak - 24 Ağustos - 23 Eylül

Terazi - 24 Eylül - 23 Ekim

Akrep - 24 Ekim - 22 Kasım

Yay - 23 Kasım -21 Aralık

Oglak - 22 Aralık -20 Ocak

Kova - 21 Ocak - 19 Şubat

Balik - 20 Şubat - 20 Mart

Burç çizelgesine göre ay ve günü girdiğimizde hangi burcumuzun olduğunu veren program.

BURC.f

Page 18: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

GOTO

Programı durdurmadan önce başka bir ifadeye yönlendirmek istiyorsak GOTO ifadesini

kullanırız.

...

IF( x<10 ) GOTO 10

...

10 STOP

Örnek: Yaş girişi ve negatif sayı girilmesi durumunda tekrar giriş yaptıran program,

DO

DO *kontrol cümlesi+ komutlar END DO

Veya

DO sayac = başlangıç, bitiş [,adım] komutlar END DO

Döngüleri yazarken çakışmamasına veya kontroller le birlikte düzgün kullanımına dikkat

ediniz!

main: IF( sum>100 ) THEN

inner: DO i=1,n

...

END IF main

END DO inner !illegal, inner must be within main

EXİT

Koşullu olarak DO döngüsünden çıkmak için kullanılır.

do

Page 19: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ifadeler if (mantıksal ifade) exit komutlar end do

Örnek: Dışarıdan girilen N sayısına göre 1’den N’e kadar olan sayıların karelerinin toplamını

hesaplayan program,

DO1.f

Örnek: Dışarıdan girilen N sayısına göre; T1,1’den N’e kadar sayıların toplamı; T2, 1’den N’e kadar tek sayıların toplamı; T3 de 1’den N’e kadar çift sayıların toplamıdır. Buna göre T1, T2,

T3 değerlerini hesaplayan program

DO2.f

Örnek: 1-N arasında girilen pozitif sayılardan negatif sayı girişi olduğunda döngüden çıkıp

yeniden giriş yapmasını sağlayan program,

DO3.f

Örnek: Tüm kenarları tamsayı ve hipotenüsü 20’den küçük olan tüm dik üçgenleri bulduran program

Örnek: Dışarıdan girilen bir N tamsayısı için 1-N arasında kaç tane asal sayı olduğunu bulduran program

Örnek: Dışarıdan girilen N değerine göre (N>20), 0-N arası tüm sayıların toplamını, 5-N-6 arası tek sayıların çarpımını, 14-N arası çift sayıların toplamını hesaplayan program

Örnek: ln 1 x fonksiyonun seriye açılımı ......432

)1ln(432 xxx

xx şeklindedir.

Buna göre dışarıdan girilen x için ln 1 x değerini hesaplayan program,

Örnek: arctan x fonksiyonun seriye açılımı ......!5!3

arctan53 xx

xx şeklindedir. Buna

göre dışarıdan girilen x için arctan x değerini hesaplayan program

Örnek: Dışarıdan girilen x için ......53

53 xxxT ; 1x değerini hesaplayan program,

Page 20: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Örnek: Dışarıdan girilen x için ......5

1

3

1153 xxx

T ; 1x değerini hesaplayan

program,

Örnek: Dışarıdan girilen x için ......3

)1(

2

)1(13

3

2

2

x

x

x

x

x

xT ; 2/1x değerini

hesaplayan program,

Örnek: Dışarıdan girilen n sayısına göre 2222

11......

3

11

2

11

1

11

na çarpımını

bulduran program,

Örnek: Dışarıdan girilen n sayısına göre 1 1 1

....sin1 sin1 sin 2 sin1 sin 2 ... sin

an

seri toplamını bulduran program,

Örnek: Dışarıdan girilen n sayısına göre

n

na

1....

2

11

!.....

2

11

!2

1

!1 ifadesini bulduran

program,

DO WHİLE

Tekrarlamalı ifadelerde koşul sağlandıkça işlemlerin sağlanması için kullanılan bir komuttur.

do while(mantıksal ifade) komutlar end do

Örnek: Dışarıdan girilen 10 tabanındaki pozitif bir tamsayının, belirtilen tabandaki karşılığını hesaplayan program,

Örnek: Verilen N sayısını oluşturan tek rakamların toplamını bulmak için program yazınız.

Örnek: M tabanında verilen N sayısının 10 tabanında değerini bulmak için program yazınız.

Page 21: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

DİZİLER

Birden fazla giriş yapılıp, programda kullanılacak olan değişken türlerini dizi olarak

tanımlamamız gerekir. Dizilerin 2 boyutlu durumunu ise matris olarak düşünürüz.

Aşağıda 8 elemanlı bir dizi örneği görmekteyiz.

Aşağıdaki ise 2 satır ve 4 sütundan oluşan bir matrisi gösterir.

Fortran dilinde dizi ve matrisleri aşağıdaki kullanımlar ile belirtiriz:

DIMENSION name(bound) DIMENSION name (bound1,bound2) REAL name(bound) INTEGER name(bound) CHARACTER name(bound) LOGICAL name(bound) REAL name (bound1,bound2) INTEGER name (bound1,bound2) CHARACTER name (bound1,bound2) LOGICAL name (bound1,bound2)

Aşağıdaki örnekte bir telefon rehberi örneği verilmiştir. Matris gibi düşündüğümüzde 1.

Sütun kişilerin adlarını, 2. Sütun kişilerin adreslerini ve 3. Sütun ise bunlara karşılık gelen

telefon numaralarını ifade eder ve her bir satır için kişilerin bilgilerini doldurabiliriz.

Page 22: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Bir başka örnek olarak aşağıdaki kitap katoloğunu verebiliriz: 1. Sütun kitabın yazarını, 2.

Sütun kitabın adını ve 3. Sütun ise yayın evini belirtir. Örneğin 4. Sütun yayım yılı ve 5.

Sütunda da fiyat bilgileri ilan bir çizelgeye genişletebiliriz.

Ve son örnek olarak da bir sınıfın ders notu tablosunu verebiliriz:

DİZİLERİN ÖZELLİKLERİ

gösterimi ile 8 elemanlı a dizisinin 5. Elemanı

belirtmekteyiz.

gösteriminde ise b matrisi 5x4 ‘lük bir matristir ve taralı kısım

b matrisinin 4. Satırının 2. Sütun elemanını gösterir.

Page 23: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Aşağıdaki örnekte ise aylara göre sağanak yağış miktarı verilmiştir:

Dizilerin indisleri her zaman pozitif olmak zorunda değildir!

REAL V(-5:5) v(-5),v(-4),v(-3),v(-2),v(-1),v(0),v(1),v(2),v(3),v(4),v(5) elemanları ile 11 boyutlu bir dizi tanımlar

REAL A(3:5, 3:5) A(3,3),A(3,4),A(3,5), A(4,3),A(4,4),A(4,5), A(5,3),A(5,4),A(5,5) elemanları ile birlikte 3x3 lük bir matris verir.

CHARACTER M(3,4)*7, V(9)*4

Örnek: Dışarıdan girilen N boyutlu bir A dizisinin tüm elemanlarının toplamını hesaplayan program.

Örnek: Dışarıdan girilen N boyutlu bir A dizisinin tüm elemanlarının karelerinin toplamını hesaplayan program.

Örnek: Dışarıdan girilen N boyutlu A ve B dizilerin toplayarak C dizisini oluşturan program.

Örnek: Dışarıdan girilen N boyutlu A ve B dizilerinin karşılıklı elemanlarının çarpımından oluşan C dizisini oluşturan program. .

Örnek: Dışarıdan girilen N boyutlu A dizisini bir “k” katsayısı ile çarpıp B dizisini oluşturan program.

Örnek: Dışarıdan girilen N boyutlu bir A dizisini elemanlarının ters sırada yazılmasıyla elde edilen B dizisini bulduran program.

Örnek: Dışarıdan girilen N boyutlu A ve B vektörlerinin iç çarpımını hesaplayan program.

Page 24: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Örnek: Dışarıdan girilen N boyutlu A dizisini aritmetik, geometrik ve harmonik ortalamalarını hesaplayan program.

Örnek: 0B sayısı verildiğinde 11a ; ,.....4,3,2 ,112 iaa ii kuralı ile tanımlanan

dizisinin B – den küçük olan tüm elemanlarını bulmak için program yazınız.

Örnek: Dışarıdan girilen NxN tipinde A ve B matrislerinin toplamını hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin izini (ana köşegen üzerindeki elemanların toplamını) hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin 2. köşegen üzerindeki elemanların toplamını hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin 2. satır elemanlarının toplamın hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin 2. sütun elemanlarının toplamını hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin tüm elemanlarının toplamın veren program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin transpozesini veren program.

Örnek: Dışarıdan girilen N sayısına göre NxN tipinde birim matris oluşturan program.

Örnek: Dışarıdan girilen NxN tipinde A ve B matrislerinin çarpımını hesaplayan program.

Örnek: Dışarıdan girilen NxN tipinde A matrisinin esas köşegenin üst kısmında kalan elemanların toplamını veren program.

Page 25: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

FORMAT

OPEN

Read ve Write komutlarında bir veriyi giriş yaparken veya yazdırırken bilgisayar ekranındaki

dosyaya yazdırıyorduk Hâlbuki var olan bir dosyadaki veriyi kullanabileceğimiz gibi

verilerimizi saklamak ve bir dosyaya da yazdırmak isteyebiliriz. Bunun için dosya açmak

gerekmektedir. Fortranda dosya açma işlemi ise OPEN komutu ile yapılır.

OPEN (UNIT=sayı,FILE=’dosyanın adı’) OPEN (UNIT=10,FILE=’fibonacci.DAT’)

Örnek: Dışarıdan verdiğiniz 3x3 lük bir matrisi txt uzantılı bir dosyaya yazdırın.

OPEN1.f

DO döngüsüne girilmeden okutma ve yazdırma yapmak için

WRITE (2,*) ((A(I,J),J=1,N),I=1,N) READ (*,* ) ((A(I,J),J=1,N),I=1,N)

Komutu da kullanılabilir.

TAM SAYILAR, I FORMATI

Bazen programda varsayılan format kullanmak yetersiz olabilir. Özellikle de verilerimizi

dosyadan okutuyorsak Format özelliklerini bilmemiz gerekmektedir. Read ve Write

komutlarındaki ikinci * sembolü yerine belirtilen format tanıtılabilir. Tamsayı format için

kullanım:

Iw (idth) w: toplam karakter sayısı I3 için 123, -93

Örneğin,

write(*,10) i,j,k

10 format(i2,i4,i10)

Ifadesi ile I,j,k tamsayılarını toplam olarak sırasıyla 2,4 ve 20 basamaklı olarak belirtmeliyiz.

Aynı formatta birden fazla sayıyı formatları için

Page 26: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

2I8 8 basamaklı 2 tam sayıyı belirtir.

Örnek: 5,7,2 basamaklı tam sayı girişi ve yazdırılması için program,

REEL SAYILAR, F FORMATI

Reel sayı format için kullanım:

Fw.d w: toplam karakter sayısı, ondalıklı basamaklarda dahil olmak üzere, d ise ondalıklı basamak F8.3 için 1234.678, -234.678

Örneğin,

write(*,10) T,S

10 format(F5.2,F7.4)

Ifadesi ile T,S reel sayılarını toplam olarak sırasıyla 5 basamaklı-2 ondalıklı ve 7 basamaklı-4

ondalıklı olarak belirtmeliyiz.

REAL :: itest=123.4567 !number to write

...

WRITE(*,*) itest ! 1.2345670E+02 -not F format

WRITE(*,’(F8.0)’) itest ! 123.

WRITE(*,’(F10.4)’) itest ! 123.4567

WRITE(*,’(F10.5)’) itest ! 123.45670

WRITE(*,’(F10.9)’) itest !**********

WRITE(*,’(2F8.4)’) itest, 7654321 !123.4567765.4321

WRITE(*,’(2F10.4)’) itest, 7654321 ! 123.4567 765.4321

Aynı formatta birden fazla sayıyı formatları için

2F8.3 8 basamaklı, 3 ondalıklı 2 reel sayıyı belirtir.

Örnek: 3 ondalıklı 7 basamaklı, 5 ondalıklı,8 basamaklı reel sayı girişi ve yazdırılması için program,

KARAKTERLER, A FORMATI

Karakter format için kullanım:

Page 27: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Aw w: toplam karakter sayısı A5 için ABCDE

Örneğin,

write(*,10) b

10 format(A8)

Ifadesi ile b yi 8 karakter olarak belirtmeliyiz.

CHARACTER(LEN=8) :: long=’Bookshop’

CHARACTER(LEN=1) :: short=’B’

...

WRITE(*,*) long ! Bookshop

WRITE(*,’(A)’) long !Bookshop

WRITE(*,’(A8)’) long !Bookshop

WRITE(*,’(A5)’) long !Books

WRITE(*,’(A10)’) long ! Bookshop

WRITE(*,’(A)’) short !B

WRITE(*,’(2A) short, long !BBookshop

WRITE(*,’(2A3) short, long ! BBoo

Aynı formatta birden fazla karakter formatları için

2A4 4 harfli 2 karakteri belirtir.

Örnek: 7 ve 12 karakterli değişkeleri okutun ve yazdırın,

CONTROL FONKS İYONLARI

Yeni bir satırdan yazdırmak için / sembolü kullanılır.

Boşluk vermek için ise X sembolü kullanılır.

INTEGER :: n=1234 !number to write

...

WRITE(*,’(I4, 2X, I4)’) i, i-1 !1234_ _1233

Page 28: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

WRITE(*,’(I4, 4X, I4)’) i, i-1 !1234_ _ _ _1233

INTEGER :: value = 100

INTEGER :: a=101, b=201

...

WRITE(*,’( ’The value is’, 2X, I3, ’ units.’)’) value

WRITE(*,’( ’a =’, 1X, I3, /, ’b = ’, 1X, I3)’)

WRITE(*,’( ’a and b =’, 2(1X, I3) )’) a, b

Komutlarından sonar ekrandaki görüntü:

The value is 100 units.

a = 101_ _ _

b = 201_ _ _

a and b = 101_ _ _ 201

Page 29: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

ALT PROGRAMLAR

Sin, Sqrt gibi fonksiyonları kullandığımızda aslında alt programları kullanmış oluyoruz. Bu

fonksiyonlar Fortranın yazılımında verilen fonksiyonlardır. Bizde bu fonksiyonlar gibi

fonksiyon yazıp alt program tanımlayabiliriz. Alt programları, Fortranın belirli olan

işleyişinden bağımsız olarak ele alabiliriz. Ayrı ayrı yazılabilir ve derlenebilir. Büyük

programlar yazarken, program alt programlar bölmek, programın doğruluğunu test etmek

amacıyla oldukça kullanışlı bir yöntemdir. Alt programların diğer bir avantajı ise, çalışan bir

alt programınızı diğer pek çok ana programda kullanabilirisiniz.

2 türlü alt program ele alacağız:

1. Functions: isimleri ile çağırılırlar. Örneğin sin(x).

2. Subroutines: alt programların en genelidir. Çok kompleks programların 1 veya 1 den

fazla cevabı olması durumlarında çalışırlar.

RETURN

Alt programları sonlandırmadan önce alt programa gönderme yapan komuttur. Alt

programlarda END komutundan önce kullanılmalıdır.

CHARACTER*25 TEXT

TEXT = "Some kind of minor catastrophe"

CALL OOPS ( TEXT )

STOP

END

SUBROUTINE OOPS ( S )

CHARACTER S* 32

WRITE (*,*) S

RETURN

END

FUNCTİON

Function kullanımları ana programda olmalıdır ve ana programın END komutundan

sonra yazılmaya başlamalıdır.

Function kullanımı Function ile başlayan ve argumanları olan bir kullanımdır.

Page 30: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

function bigroot(a,b,c)

Function kullanımları END ifadesi ile bitmelidir.

end function function_name

END ifadesinden önce kesinlikle RETURN ifadesi kullanılmalıdır.

Function kullanımlarında da kontrol ifadeleri (if,do,select) kullanılabilir

Function ifadelerinde de değişken tipleri aynı şekilde geçerlidir.

Function kullanımlarında 1 (tek) değer hesaplanır!

program fn1

real:: a,b,c,bigroot

!

! Program to demonstrate the use of a FUNCTION subprogram

!

write(6,10)

read(5,*) a, b, c

write(6,20) bigroot(a, b, c)

10 format(' Enter the coefficients a, b, c '/)

20 format(' The larger root is ',F12.6)

stop

end program fn1

!

! End of main program

!

function bigroot(a, b, c)

real:: bigroot, a, b, c, test, root1, root2

!

! Function to find largest root of a quadratic

! If no real roots then function returns value -9.0E35

Page 31: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

!

test = b*b - 4.0*a*c

if(test.ge.0.0) then

root1 = (-b + sqrt(test)) / (2.0 * a)

root2 = (-b - sqrt(test)) / (2.0 * a)

if(root2.gt.root1)then

bigroot = root2

else

bigroot = root1

end if

else

bigroot = -9.0e35

end if

return

end function bigroot

Yukarıdaki örnek, 2.dereceden bir polinomun köklerinden en büyüğünü buldurmak için

Function komutu kullanılarak yapılmıştır.

Örnek: Kombinasyonu fonksiyon kullanarak ve kullanmayarak bulan program

Örnek: fonksiyonu için ifadesini fonksiyon kullanarak ve

kullanmayarak hesaplayan program, aynı örnek için ifadesinin hesaplanmasını

genelleştiriniz.

Örnek: xe fonksiyonunun seriye açılımı 2

1 ...1! 2! !

Nx x x x

eN

şeklindedir. Buna göre,

dışarıdan girilen x ve N değerine göre xe ’I funksiyon kullanarak ve Fortran’ın kütüphanesinde kullanılan fonksiyon ile kaşılaştıracak şekilde program,

SUBROUTİNES

Function ifadesi ile tek bir değer hesaplanabilirken, Subroutines ifadesi ile birden çok değer

hesaplanabileceği gibi hiçbir değer de hesaplanmayabilir.

Page 32: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Subroutine, ana programın içinde bulunan bir alt programdır ve ana programın END

komutundan sonra yazılmaya başlanır

Subroutine komutu, Subroutine ile başlayan ve argumanları olan bir kullanıma

sahiptir.

subroutine(orig,sorted,N)

Subroutine komutu END ifadesi ile biter

END komutundan önce RETURN kullanılmalıdır

Subroutine ile birden fazla değer çıktısı alınabildiğinden değişken tipleri

belirtilmelidir. Değişken tipleri ana programda tanımlandığı kurallar geçerlidir.

Subroutine komutunda dizi/matrisleri de tanımlayabilir ve sonuç olarak dizi/matris

çıktısı alabilirsiniz.

Aşağıdaki örnekte ise 2. Dereceden bir polinomun köklerini bulduran bir programdır:

program subrout1

implicit none

real:: a,b,c,root1,root2

logical:: realroots

! demonstration of simple subroutine

write(*,10)

read(*,*) a,b,c

!

call solvit(a,b,c,root1,root2,realroots)

!

if (realroots) then

write(*,20) root1,root2

else

write(*,*) 'Sorry, there are no real roots'

endif

!

10 format('Enter 3 coefficients')

Page 33: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

20 format('The roots are',2f12.6)

stop

end

!

!subroutine solvit

!

subroutine solvit(a,b,c,root1,root2,realroots)

implicit none

real::a,b,c,root1,root2,test

logical::realroots

!

test=b**2 - 4*a*c

!

if(test>=0.0) then

root1 = (-b + sqrt(test))/(2.0*a)

root2 = (-b - sqrt(test))/(2.0*a)

realroots = .true.

else

realroots = .false.

end if

!

return

end

Örnek: N ve M boyutlu A ve B dizilerinin en büyük elemanlarını karşılaştıran program,

Page 34: N m Mİ - akademikpersonel.kocaeli.edu.trakademikpersonel.kocaeli.edu.tr/aerdem/ders/aerdem15.02.2011_10.37... · Fortran III, Fortran IV, Fortran 66, Fortran 77, Fortran 90, Fortran

Örnek: A NxM, B ise NxK boyutlu matrisler olmak üzere, satırlarının en büyüğünden oluşan dizilerin iç çarpımını veren program (Euclid iç çarpımı!)

Örnek: Dışarıdan girilen NxN tipindeki A, B, ve C matrislerini kullanarak T T TD A BC CB C B ABC matrisini oluşturan program