FORTRAN
REHBERİ
Tam sayı değişkenler: bu KaLeMuN
ve il,
Jandarma
bu harflerle başlayan değişkenler tam sayı olarak işlem görür.
**Eğer sayımız reel sayı ise ve tam sayı
olarak(yani kesirsiz) işleme koyulmasını istiyorsak.Programın
başında
INTEGER
YAN,GEL,A,B,V
şeklinde tanımlamamazı gerekir
**Eğer tam sayı ise ve reel sayı olarak
sonucun buçuklu olarak bulunmasını istiyorsak.
REAL
ISIM,NAR,K,L,M
Yazmalıyız.Dikkat ederseniz özellikle
K,L,M,N,I,J'den örnekler verdim.Çünkü bu harflerle başlayan
değerler tamsayı oluyordu.
**Alfasayısal değişkenleri (örneğin dosya
adları) tanımlamak için CHARACTER * 18 tanımı kullanılır.Not:18
CHARACTER komutunun alabileceği metnin en uzun karakter sayısını
belirler.Burada 18 alınmıştır.Ama 3,5,8 gibi herhangi bir sayı
da olabilir.
Fortran'da İşlem:
Toplama:+
Çıkarma:-
Çarpma:*
Bölme:/
Üs alma:**
Karakökü alma:sqrt( ) veya
Değişkeni A kabul edersek A**(1./2.)
Mutlak değer: abs( )
Dikkat ederseniz 1 ve 2 nin sonuna . koyduk
çünkü Fortran'ın noktalar olmasa sonuc 0.5 i 0 a yuvarlaması söz
konusu.Bunun olmaması için . konulması zorunludur.
Not:Fortran programında parantezler çarpma
işlemi yerine geçmezler.Yanlızca işlem gruplarını ayırmak için
kullanılırlar.Bu yüzden çarpma için * işaretini unutmamalıyız.
Büyüktür küçüktür tanımları:
Büyüktür(Greater Than): .GT.
Küçüktür(Less Than): .LT.
Büyük Eşit(Great and Equal): .GE.
Küçük Eşit(Less and Equal): .LE.
Eşittir(EQual): .EQ.
Eşit Değildir(Non Equal): .NE.
Not:Görüldüğü gibi harflerin başında ve
sonunda nokta var.
Örnek:
-If
(A.EQ.1) GO TO 10- : Eğer A,1'e eşitse 10'uncu satıra git anlamı
taşır(
iki taraftaki - işaretleri başlangıç ve bitişi tanımlamak için
yazılmıştır fortranda yazılmaz. )
GO TO deyimi
dikkatinizi çekmiştir.Onun amacı bu gibi mantıksal
çıkarımlarda işlem sırasını belirli satıra
yönlendirmektir.Bunun için Fortran'ın yeşil çizgisinin soluna
satır numarası verilir.
Örnek:Sürekli ismin yazıldığı ve
gösterildiği bir dizin girelim.
|PROGRAM isimgoster
|CHARACTER *20 ISIM
|CHARACTER *20 ISIM
10 |WRITE(*,*) "ISIM GIRINIZ"
|READ (*,*) ISIM
|WRITE(*,*) ISIM
|GOTO 10
|STOP
|END
Burada program her isim yazılışından sonra
tekrar 10'uncu satıra dönecek ve ISIM GIRINIZ diyecektir.
GO TO 'nun ikinci kullanımı:
read(*,*) net
go to(10,20,30),net
bu net teriminin 0 ve 1 degeri icin 10'uncu,2
aldığı deger ici 20'nci,3 aldığı değer için de 30'uncu satıra
git demektir.Bu şekilde uzatılarak devam edilebilir.
IF'in
kullanımı:
-IF (I.LE.4) I=I+4- Eğer I küçük eşit 4
ise I ile 4'ü topla yeni I değerinin bul anlamına gelir.
-IF(I.NE.8) GO TO 10- Eğer I 8'e eşir değilse
10'uncu satıra git.
Not:Eğer işlem tek seferlikse If komutundan
sonra hemen devam edilip go to gibi terimler kullanılabilir;değilse
then'li kalıbı kullanmak zorundayız.Örneğin aşşağıdaki
örnekte else de eklenerek if iki seferde tamamlanan bir yapıya
sokulduğu için then'li kalıp kullanıldı.
If terimi iki şekilde kullanılır.Biri:
-If (aogr.GT.8) then
write(*,*) "Uygun"
else
write(*,*)"Uygun degil"
endif
Burada aogr 8'den büyükse uygun yaz değilse
uygun değil yaz diyor.
İkincil kullanım şekli:
If (aogr.GT.8) then
write(*,*) "Uygun"
else if ((aogr.LT.8).and.(aogr.GE.4)) then
write(*,*) "Kontrol edilmesi gerekiyor"
else if((aogr.LT.4).and.(aogr.GT.0)
write(*,*) "Uygun degil"
Burada aogr 8'den büyükse uygun,8'den küçük
4'ten büyük eşitse kontrol edilmesi gerekiyor,4'den küçük 0'dan
büyükse uygun degil yaz diyor.
Do
kullanımı:
Do kullanımı için:
Do I=1,4,1
ifadesi I terimini 1 den 4'e kadar 1'er 1'er
arttır demektir.
Eğer,
Do I=1,4
yazılırsa kaçar kaçar arttığını
otomatik belirler ve bu 1'er 1'er olur.
Şu şekilde değer de verilebilir.
Do I=1,nogr
ifadesi I terimini 1 den nogr'e kadar 1'er 1'er
arttır demektir.
Örnek:
program ogrencinotlari
write(*,*) "ogrenci sayisini giriniz"
read(*,*) nogr
do I=1,nogr
write(*,*) "birinci vize notunu giriniz"
read(*,*) vize
write(*,*) "final notunu giriniz"
read(*,*) final
ort=vize*0.4+final*0.6
write(*,*) ort
enddo
stop
end
DIMENSION komutu
Dimension komutu bir değişken birden fazla
değer alıcaksa kullanılır.
Mesela -Dimension Vize(100),Final(100),Ort(100)
Üç terimlisi 100 tane farklı değer alabilir
demektir.
Örnek:
program notort
dimension vize(100),final(100),ort(100)
write(*,*) "Ogrenci sayisini giriniz."
read(*,*) nogr
do I=1,nogr
write(*,*) I,".ogrencinin vize ve final
notunu giriniz"
read(*,*) vize(I),final(I)
ort(I)=vize(I)*0.4+final(I)*0.6
write(*,*)
"vize=",vize(I),"final=",final(I),"ortalama=",ort(I)
enddo
stop
end
Dosya'dan
okuma dosya açma:
Open komutu yaptığımız işlemleri
kaydetmede ya da daha önce kaydedilmiş olan veriyi içeri aktarmada
kullanılan bir komuttur.
Program matematik
dimension vize(100),final(100),ort(100)
write(*,*) 'matematik dersi alan ogrenci
sayisini giriniz"
read(*,*) nogr
open(15,file="matematik")
do I=1,nogr,1
write(*,*) " vize ve final notunu giriniz"
read(*,*) vize(I),final(I)
ort(I)=vize(I)*0.4+final(I)*0.6
write(15,*)
vize(I),final(I),ort(I)
enddo
stop
end
Yukarıda matematik adında bir dosya açtık
ve "write(15,*)
vize(I),final(I),ort(I)" satırında bu sefer ekrana değil 15
olarak kodladığımız matematik adlı dosyamıza yazdırdık.
Peki daha önce yazılmış olanı açıp ordan
aktarmak istersek:
Program matematik
character*15 dosadi
character*15 adsoyad
dimension
ort(100),no(100),vize(100),final(100),adsoyad(100,2)
------------------>(1. sütünda
isim 2. süt.da soyisim olduğunu gösteriyor.)
write(*,*) "Ogrenci notlari dosyadan
okunacak.Kabul icin 1 iptal icin 2"
read(*,*) isec
if(isec.EQ.1) then
write(*,*) "Veri dosyasinin adini giriniz"
read(*,*) dosadi
open(10,file=dosadi)
read(10,*) nogr
do I=1 nogr
read(10,*)
no(I),adsoyad(I,1),adsoyad(I,2),vize(I),final(I)
ort(I)=vize(I)*0.4+final(I)*0.6
end do
endif
vizetop=0.0
finaltop=0.0
orttop=0.0
do I=1,nogr
vizetop=vizetop+vize(I)
finaltop=finaltop+final(I)
orttop=orttop+ort(I)
end do
vizeort=vizetop/nogr
finalort=finaltop/nogr
ortort=orttop/nogr
open(20,file="sinifor")
do I=1,nogr
write(20,*)
no(I),adsoyad(I,1),adsoyad(I,2),vize(I),final(I),ort(I)
enddo
write(20,*) "vize
ortamalasi=",vizeort,"final ortalamasi=",finalort,"ortalama
not=",ortort
stop
end
Görüldüğü gibi daha önceden yazılmış
olan dosadi adlı dosyayı açarak sırayla tüm istediklerimizi
okuttuk.Dikkat ederseniz file= den sonra dosaya açarsak ""
işareti bulunmamakta.Bu daha önceden yazılmış bir dosya olduğu
anlamına gelir."" ifadesi ise yeni dosya yazarken
kullandik.Ayni örnekte açtiğimiz sinifor dosyasi buna örnektir.
NOT:Program
Ctrl+F10 ile çalıştırılıp F11 ile adım adım takip edilebilir.
Matrisler
program matrisislem
dimension a(20,20),b(20,20),c(20,20),d(20,20)
write(*,*) "A matrisinin boyutlarini
giriniz"
read(*,*) NA,MA
write(*,*) "A matrisini giriniz."
Do I=1,NA
read(*,*)(A(I,J),J=1,MA)
enddo
write(*,*) "B matrisini boyularini
giriniz."
read(*,*) NB,MB
write(*,*) "B matrisini giriniz."
Do I=1,NB
read(*,*) (A(I,J),J=1,MB)
enddo
Do I=1,NA
Do J=1,MA
C(I,J)=A(I,J)+B(I,J)
enddo
enddo
do I=1,NA
write(*,*) (C(I,J),J=1,MA)
enddo
stop
end
Dosyadan
okutmak istersek:
program matrisislem
dimension a(20,20),b(20,20),c(20,20),d(20,20)
character*20 dosadi
write(*,*) "Dosya adini giriniz"
read(*,*) dosadi
open(10,file=dosadi)
read(10,*) NA,MA
Do I=1,NA
read(10,*)(A(I,J),J=1,MA)
enddo
read(10,*) NB,MB
Do I=1,NB
read(10,*) (A(I,J),J=1,MB)
enddo
Do I=1,NA
Do J=1,MA
C(I,J)=A(I,J)+B(I,J)
enddo
enddo
do I=1,NA
write(*,*) (C(I,J),J=1,MA)
enddo
stop
end
Bir diğer örnek:
A= |342| B = |42|
|546|2X3 |67|
|35|3X2
program matristablo
dimension a(20,20),b(20,20),c(20,20),d(20,20)
NOT: Buradakiler daha çok temel mahiyetinde .Alt program yazımı ve format vb. konuları ele almadım bu yüzden.Çünkü bunlar hocanın soru soruş stiline göre püf noktaları olan konular.Hocamız daha eski yıllardan klasik sorarken artık(2012 bahar dönem itibari ile) 70 puanlık test 30 puanlık klasik soruyor.Dolayısıyla bu püf noktalar da özellikle testlerde hayati önem taşıyor.Derste dinlemeniz önemli.Başarılar.
Can SOYASLAN