Pages

Subscribe:

8 Haziran 2012 Cuma


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