FORTRAN ÖRNEKLER (2013)
NOT:
- Kod sat rlar ndaki baz bo luklar göstermek için "_ " kullan lm r.
- Kod sat rlar n hemen yan nda, iki ünlem i areti aras nda yaz lan bilgiler o sat rla ilgili aç klamalar için yaz lm r.
sim ile Kar lama
Klavyeden isim girildikten sonra, 'merhaba ...' eklinde kullan kar layacak bir program yaz z.
program karsilama
character ad*20
write(*,*) 'adiniz nedir?'
read(*,*) ad
write(*,*) 'merhaba_', ad
end
Toplama lemi
Klavyeden girilen iki say toplayan bir program yaz z.
program toplama
write(*,*) 'toplama icin iki sayi giriniz:'
read(*,*) a, b
c=a+b
write(*,*)'toplam=', c
end
Daire Çevresi ve Alan Hesaplama
Klavyeden yar çap girilen dairenin çevresini ve alan hesaplayan bir program yaz z.
program daire
pi=3.141592
write(*,*) 'yaricapi giriniz:'
read(*,*) r
cevre=2*pi*r
alan=pi*r**2
write(*,*) 'Alan=_', alan, '_Cevre=_', cevre
end
deal Gaz Yo unlu u Hesaplama
Kullan s ras yla gaz n ad ve mol kütlesini yazd ktan sonra "gazin_adi gazinin yogunlugu [kg/m3]" eklinde ç kt veren bir program yaz z.
program yogunluk
character AD*10
P0=1.013E5
T0=273
R=8314
write(*,*)'gazin adi:'
read(*,*) ad
write(*,*) 'gazin mol kutlesi [kg/kmol]:'
read(*,*) m
R0=P0*m/R/T0
write(*,*) ad,'_gazinin yogunlugu [kg/m3]=', R0
end
Organik Molekül Yo unlu u Hesaplama
Kimyasal formülü CxHy eklinde verilen bir gaz yak n N. .A. yo unlu unu hesaplayan bir program yaz z.
program yogunluk
character ad*20
R=8314
P0=1.013e5
T0=273
MC=12
MH=1
write(*,*) 'Gazin adini giriniz:'
read(*,*) ad
write(*,*) 'C ve H atomlarinin sayisini giriniz:'
read(*,*) x,y
M=MC*x+MH*y
R0=P0*M/R/T0
write(*,*) ad, '_gazinin yogunlugu [kg/m3]=', R0
end
deal Gaz Hacmi Hesaplama
Bir ideal gaz n 1 atm bas nç ve 273 K s cakl ktaki hacim de erini klavyeden girerek, istenilen ba ka bir s cakl k ve bas nçtaki hacmini hesaplamaya yarayan bir program yaz z.
program hacim
p0=1.013E5 !1 atm bas nç!
T0=273 !273 K s cakl k!
write(*,*) 'v0 giriniz:'
read(*,*) v0
write(*,*) 'P ve T giriniz:'
read(*,*) P, T
V=v0*p0/P*T/T0
write(*,*) 'Hacim=', V
end
.=
.
Ortalama ve Toplam Hesaplama
Klavyeden girilen say lar n ortalamas ve toplam hesaplayan bir program yaz z. Bu hesaplamada kullan lacak say lar n giri inin tamamland -999 girerek belirtiniz.
program ortalama
top=0
n=0
20 write(*,*) 'ortalama ve toplam icin sayi giriniz, bitir icin -999'
read(*,*) sayi
if (sayi.eq.-999) goto 10
top=top+sayi
n=n+1
goto 20
10 ort=top/n
write(*,*) 'toplam=', top, '_ortalama=', ort
end
Ders Geçme
Klavyeden s ras yla ö rencinin ad ve soyad , ö renci numaras , aras nav notu, final notu girilerek rencinin ders geçme durumunu ve ba ar notu harfini gösteren bir program yaz z. Program n
sonlanmas için final notunun negatif girilmesi art tan mlay z.
Ba ar Notu Aras nav*0.4+Final*0.6 Ba ar Notu Harfi
100 - 90 A1 89 - 80 A2 79 - 70 B1 69 - 60 B2 59 - 50 C 49 - 0 F3
program sinav
character AS*30, BNH*2
10 write(*,*)'Ad soyad, No, Ara ve Final sinav notlarini gir,final ne
&gatif girilirse programi bitir' !& i areti alt sat rdan devam etmek için kullan r!
read(*,*)AS,NO,ARA,FIN
if (FIN.LT.0) stop
BN=0.4*ARA+0.6*FIN
if (BN.GE.90) BNH='A1'
if (BN.GE.80 .and. BN.LT.90) BNH='A2'
if (BN.GE.70 .and. BN.LT.80) BNH='B1'
if (BN.GE.60 .and. BN.LT.70) BNH='B2'
if (BN.GE.50 .and. BN.LT.60) BNH='C'
if (BN.LT.50) BNH='F3'
write(*,*)'ad=',AS,'_No=',No,'_Basari Notu=',BNH
goto 10
end
Denklem Köklerini Bulma
+ + = format ndaki bir denklemin köklerini, klavyeden a, b, c katsay lar girerek hesaplayan bir program yaz z.
program denklem
write(*,*)'A,B,C yi giriniz'
read(*,*)A,B,C
D=B**2-4*A*C ! hesapland !
if (D) 10,20,30 !*!
10 write(*,*)'gercek kok yoktur.'
stop
20 X=-B/(2*A)
write(*,*)'cakisik iki kok var=',x
30 X1=(-B+D**0.5)/(2*A)
X2=(-B-D**0.5)/(2*A)
write(*,*)'X1=',X1,'X2=',X2
end
*if döngülerinde bu tür, virgüllerle ayr lm bir ifade kullan ld nda artlar u ekilde belirlenmektedir:
D < 0 ise 10
D=0 ise 20
D>0 ise 30
Üçgen art Kontrolü
Üç kenar uzunlu u klavyeden girildi inde üçgenin türünü ya da üçgen art n sa lanmad belirten bir program yaz z.
program ucgen
write(*,*) 'ucgen kenar uzunluklarini giriniz'
read(*,*) a,b,c
if (a.lt.(b+c) .and. b.lt.(a+c) .and. c.lt.(a+b)) then
if (a.eq.b .and. b.eq.c)then
write(*,*)'bu ucgen eskenar ucgendir'
else if ((a.eq.b .and. b.ne.c) .or.
&(b.eq.c .and. c.ne.a).or.
&(b.eq.c .and. c.ne.a))then
write(*,*)'bu ucgen ikizkenar ucgendir'
else
write(*,*)'bu ucgen cesitkenar ucgendir'
end if
else
write(*,*)'bu bir ucgen degildir'
end if
end
Vücut Kitle ndeksi (BMI) Hesaplama
Klavyeden vücut a rl ve boy bilgileri girilerek vücut kitle indeksi hesaplayan, sonuca göre de erlendirme yapan bir program yaz z.
Vücut Kitle ndeksi =
De erlendirme
35 BMI Obez 30 BMI < 35 man 25 BMI < 30 Kilolu 20 BMI < 25 Normal
BMI < 20 Zay f
program kindex
real ki
write(*,*) 'agirligi (kg) giriniz:'
read(*,*) agirlik
write(*,*) 'boyu (m) giriniz:'
read(*,*) boy
ki=agirlik/boy**2
write(*,*) 'ki=',ki
if (ki.lt.20) then
write(*,*) 'zayif'
elseif (ki.ge.20.and.ki.lt.25) then
write(*,*) 'normal'
elseif (ki.ge.25.and.ki.lt.30) then
write(*,*) 'kilolu'
elseif (ki.ge.30.and.ki.lt.35) then
write(*,*) 'sisman'
else
write(*,*) 'obez'
end if
end
Rüzgar H Hesaplama
Farkl arazi ko ullar n etkisini de göz önünde bulunduracak ekilde; klavyeden belirli bir yükseklikte ölçülen rüzgar h ve yükseklik girilerek, istenilen yükseklikteki rüzgar h hesaplayabilen bir program yaz z.
=
Klavyeden girilmesi gereken de erler: V0, Z, Z0, p
V :Hesaplanmak istenen h z
Z :Rüzgar h n hesaplanaca yükseklik
V0 :Belirli bir yükseklikte ölçülen h z
Z0 :V0 n ölçüldü ü yükseklik
p :Pürüz yüksekli i ve stabiliteye ba katsay
1- Büyük ehir: p=0.40 2- Küçük yerle im yeri: p=0.28 3- rsal alan: p=0.16
program ruzgar
10 write(*,*)'1-buyuk sehir'
write(*,*)'2-kucuk yerlesim yeri'
write(*,*)'3-kirsal alan'
write(*,*)'p katsayisinin belirlenmesi icin secim yapiniz:'
read(*,*)no
if (no.lt.1 .or. no.gt.3)then
write(*,*)'yanlis girdiniz tekrar girin'
goto 10
elseif (no.eq.1)then
P=0.4
elseif(no.eq.2)then
P=0.28
else
P=0.16
endif
write(*,*)'Z0 giriniz'
read(*,*)Z0
write(*,*)'V0 giriniz'
read(*,*)V0
write(*,*)'Z giriniz'
read(*,*)Z
V=(Z/Z0)**P*V0
write(*,*)'Z=',Z
write(*,*)'V=',V
end
Serbest Dü me
Durgun halden serbest dü me hareketine ba layan bir cismin, klavyeden girilen yükseklik ve t saniye aral klarla h ve zeminden yüksekli ini hesaplayan bir program yaz z.
program sdusme
G=9.81
write(*,*)'yuksekligi (m),DELTAT(s) giriniz'
read(*,*)Y0,DELTAT
write(*,*)'T[s] v[m/s] y[m]'
write(*,*)'------------------------'
10 T=T+DELTAT
V=g*T
Y=Y0-0.5*G*T**2
write(*,20)T,V,Y
20 format(1x,3F10.3)
if (Y.GT.0) goto 10
end
Say ya Kadar Toplama (if kullanarak)
Klavyeden girilen n say na kadar olan tamsay lar n toplam if döngüsü kullanarak hesaplayan bir program yaz z.
program toplam
top=0
i=1
write(*,*) 'n giriniz:'
read(*,*) n
20 if (i.gt.n) goto 10
top=top+i
i=i+1
goto 20
10 write(*,*) 'toplam=', top
end
Say ya Kadar Toplama (do kullanarak)
Klavyeden girilen n say na kadar olan tamsay lar n toplam do döngüsü kullanarak hesaplayan bir program yaz z.
program toplam
top=0
write(*,*) 'n giriniz:'
read(*,*) n
do 50 i=1, n, 1
top=top+i
50 continue
write(*,*) 'toplam=', top
end
z, Zaman, Yol Hesaplama
Sabit ivme ile hareket eden bir arac n ula maksimum h ve bu h za ula mas için geçen süreyi klavyeden girerek; birer saniye aral klarla ula h (m/s) ve maksimum h za ula ana kadar ald yolu hesaplayan bir program yaz z.
program hiz
write(*,*) 'maksimum hiz (km/h) ve sureyi (s) girin:'
read(*,*) vmax, tmax
A=vmax/tmax
write(*,*) 'Zaman (s) Hiz (m/s) Yol (m)'
do 10 t=1, tmax, 1
v=a*t
x=0.5*a*t**2
write(*,*) t, v*3.6, x
10 continue
end
ç çe Do Döngüsü -1
program do1
write(*,*) 'i j k'
write(*,*) '-----'
do 10 i=1, 3
do 20 j=2, 4
k=i+j
write(*,*) i, j, k
20 continue
10 continue
end
ç çe Do Döngüsü -2
program do2
write(*,*) 'i j k'
write(*,*) '-----'
k=0
i j k -----
1 2 3 1 3 4 1 4 5 2 2 4 2 3 5 2 4 6 3 2 5 3 3 6 3 4 7
i j k -----
1 3 4 1 4 9 2 3 14 2 4 20
do 10 i=1, 2
do 20 j=3, 4
k=k+i+j
write(*,*) i, j, k
20 continue
10 continue
end
ç çe Do Döngüsü -3
program do3
write(*,*) 'i j k'
write(*,*) '-----'
do 10 i=1, 2
k=0
do 20 j=3, 4
k=k+i+j
write(*,*) i, j, k
20 continue
10 continue
end
ç çe Do Döngüsü -4
program do4
write(*,*) 'i j k'
write(*,*) '-----'
do 10 i=1, 2
do 20 j=3, 4
k=0
k=k+i+j
write(*,*) i, j, k
20 continue
10 continue
end
i j k -----
1 3 4 1 4 9 2 3 5 2 4 11
i j k -----
1 3 4 1 4 5 2 3 5 2 4 6
ç çe Do Döngüsü -5
program do5
write(*,*) 'i j k'
write(*,*) '-----'
k=0
do 10 i=1, 2
do 20 j=5, 3, -1
k=k+i+j
write(*,*) i, j, k
20 continue
10 continue
end
ç çe Do Döngüsü -6
program do6
write(*,*) 'i j k'
write(*,*) '-----'
k=0
do 10 i=1, 3, 2
do 20 j=5, 3, -1
k=k+i+j
write(*,*) i, j, k
20 continue
10 continue
end
i j k -----
1 5 6 1 4 11 1 3 15 3 5 23 3 4 30 3 3 36
i j k -----
1 5 6 1 4 11 1 3 15 2 5 22 2 4 28 2 3 33
Pi Say Hesaplama
= 4 + … dizisinin terimleri toplanarak pi say istenen duyarl kla hesaplanabilir. Bu
toplam k saca = 1) eklinde de yaz labilir. Bu dizinin ilk n terimini kullanarak say hesaplayan bir program yaz z.
!denklemler incelendi inde pi say hesaplamak için sadece terim say girilmesinin yeterli oldu u görülmektedir!
program pisayisi
real pi
write(*,*) 'Pi sayisi kac terimle hesaplanacak?'
read(*,*) n
pi=0
isaret=-1
do 10 i=1, n
isaret=-isaret !bu sat r ile döngüdeki i de eri artt kça isaret de eri bir + bir - de er alacakt r!
terim=isaret*4./(2*i-1) !Fortran'da 4. yaz lmazsa bölme i lemi gerçekle memekte!
pi=pi+terim
write(*,*) 'terim sayisi:', i, '_pi=', pi !*!
10 continue
end
* Bu programda her döngü tekrar nda hesaplanan pi say ekrana yazd lmaktad r. Böylece pi say n gittikçe do ru de erine yak nsamas ekrandan izlenebilir. E er continue sat n hemen öncesindeki write sat continue sonras na yaz rsa sadece girilen n terimi sonunda hesaplanan pi say görüntülenebilir.
Dizi Toplam
( ) =2
+3 4
…
fonksiyonunun de erini, verilen x için dizinin ilk n terimini kullanarak hesaplayan bir program yaz z. x ve n de erleri klavyeden girilecektir.
Aç klama:
Fonksiyon incelendi inde 1) i lemine kar k geldi i görülmektedir. Dolay yla n de erine kadar olan i lemlerin hesaplanmas için do döngüsü yaz rken bu i lem tan mlanmal r.
program dizitoplam
write(*,*) 'x degerini giriniz:' !f(x) fonksiyonun hesaplanmas için gerekli olan x de eri!
read(*,*) x
write(*,*) 'toplanacak terim sayisini giriniz:'
read(*,*) n
fx=0 !fx döngüsü olu turmadan önce ba lang ç de erini s r olarak tan tmam z gerekir!
do 10 i=1, n
terim=(-1)**(i+1)*(x**i)/i
fx=fx+terim
write(*,*) 'i=', i, ',_f(x)=', fx
10 continue
end
Tarih Yaz
gg.aa.yyyy eklinde girilmi tarihi gg aa yyyy ve gg/aa/yyyy format nda geri veren bir program yaz z.
program tarih
integer gun, ay, yil
write(*,*) 'Gunun tarihini gg.aa.yyyy seklinde giriniz:'
read(*,10) gun, ay, yil
10 format (i2,1x,i2,1x,i4)
write(*,20) gun, ay, yil
20 format ('_',i2,'_',i2,'_',i4)
write(*,30) gun, ay, yil
30 format (1x,i2,'/',i2,'/',i4)
end
Say Giri i
Klavyeden girilen say kaç basamakl olursa olsun, ilk 4 basama okuyan ve 'girilen sayi: (ilk 4 basamak)' eklinde dönü yapan bir program yaz z.
program sayi
write(*,*) 'bir sayi gir'
read(*,10) n
10 format(i4)
write(*,20)n
20 format (1x,'girilen sayi:',i4)
end
Faktöriyel Hesaplama
Klavyeden girilecek n say na kadar bütün say lara ait faktöriyel de erlerini hesaplayan bir program yaz z.
Elde edilmek istenen:
program faktoriyel
write(*,*) 'n degerini girin:'
read(*,*) n
fakt=1
write(*,20)
20 format (1x,'sayi',30x,'faktoriyel',/,1x,4('-'),30x,10('-'))
do 100 i=1, n
fakt=fakt*i
write(*,10)i, fakt
10 format (1x,i4,3x,F30.3)
100 continue
end
Sayi Faktoriyel ---- ---------- 1 1 2 2 3 6 4 24 5 120 ... ... n n!
Gelecekteki Nüfusu Hesaplama
Bir bölgenin gelecekteki nüfusu = (1 + ) formülü ile hesaplanabilir. Burada
: Gelecekteki nüfus
: Yeni nüfus
p : Nüfus art oran
n : ki nüfus say aras ndaki y l fark
anlam ndad r. Nüfus art oran p, a daki formül yard ile hesaplanabilir.
= 1
eski bir say ma göre nüfustur. Eski ve yeni y llar, bunlara ait nüfus say mlar verildi ine göre say mlardan sonraki 5,10,15,...,50 y l için nüfuslar hesaplay p yazan bir program yaz z.
program nufus
real NY,NE,P,N
integer NG,YY
write(*,*)'eski nufus ve yil'
read(*,*)NE,YE
write(*,*)'yeni nufus ve yil'
read(*,*)NY,YY
N=YY-YE
P=(NY/NE)**(1/N)-1
write(*,*) ' YIL NUFUS'
do 10 I=5,50,5
NG=NY*(1+P)**I
YG=YY+I
write(*,20)YG,NG
10 continue
20 format(1x,F5.0,I9)
end
Celsius-Fahrenheit-Kelvin
Celcius birimindeki s cakl klar -50oC ile 150oC aras nda 10'ar derece aral klarla Fahrenheit ve Kelvin birimine çeviren bir tablo haz rlayan bir program yaz z.
TF=32+1.8*TC
TK=273.15+TC
program sicaklik
C C, F, K sicaklik tablosu
write(*,*) ' T[C] T[F] T[K]'
do 10 TC=-50, 150, 10
TF=32+.18*TC
TK=273.15+TC
write(*,*) TC, TF, TK
10 continue
20 format (1x,F5.0,1x,F5.1,1x,F6.2)
end
Dizi De kenlerle Standart Sapma ve Ortalama Hesaplama
Klavyeden girilen n tane say n aritmetik ortalamas ve standart sapmas hesaplayan bir program yaz z.
= = ( )
program standart
dimension x(100)
write(*,*)'n giriniz:'
read(*,*) n
do 10 i=1, n
write(*,*) i,'. sayiyi gir'
read(*,*) x(i)
top=top+x(i)
10 continue
xort=top/n
top=0
do 20 i=1, n
top=top+(x(i)-xort)**2
20 continue
ss=sqrt(top/(n-1))
do 30 i=1, n
write(*,*) 'x(',i,')-', x(i)
30 continue
write(*,*) 'ortalama=', xort
write(*,*) 's sapma=', ss
end
Matris Toplama
= 1 3 45 7 8 , = 6 1 7
9 3 4
C=A+B toplama i lemini yapan bir program yaz z.
= 7 314 10 12
m : sat r say
n : sütun say
program matris
dimension A(2,3),B(2,3),C(2,3)
integer A,B,C
write(*,*)'satir ve sutun sayisini gir'
read(*,*)M,N
do 10 I=1,M
read(*,*)(A(I,J),J=1,N)
10 continue
do 20 I=1,M
read(*,*)(B(I,J),J=1,N)
20 continue
do 30 I=1,M
do 30 J=1,N
C(I,J)=A(I,J)+B(I,J)
30 continue
write(*,100)
do 40 I=1,M
write(*,110)(A(I,J),J=1,N)
40 continue
100 format(' A matrisi',/,9('-'))
110 format(1x,3I3)
write(*,120)
do 50 I=1,M
write(*,110)(B(I,J),J=1,N)
50 continue
120 format(' B matrisi',/,9('-'))
write(*,130)
do 60 I=1,M
write(*,110)(C(I,J),J=1,N)
60 continue
130 format(' C matrisi',/,9('-'))
end
eklinde geli igüzel girilen say lar s ralayan bir program yaz z.
Dizi de kenler kullan lmadan:
program siralama
real ks
read(*,*)A1,A2,A3,A4
if (A2.lt.A1)then
ks=A2
A2=A1
A1=ks
endif
if(A3.lt.A1)then
ks=A3
A3=A1
A1=ks
endif
if(A4.lt.A1)then
ks=A4
A4=A1
A1=ks
endif
if(A3.lt.A2)then
ks=A3
A3=A2
A2=ks
endif
if(A4.lt.A2)then
ks=A4
A4=A2
A2=ks
Say lar s ralama A1 A2 A3 A4 4 3 2 1
endif
if(A4.lt.A3)then
ks=A4
A4=A3
A3=ks
endif
write(*,*)A1,A2,A3,A4
end
Dizi de kenler kullan larak:
program sirala
real ks
dimension A(1000)
write(*,*)'kac sayi siralanacak?'
read(*,*)N
do 10 I=1,N
write(*,*)I,'. sayiyi gir'
read(*,*)A(I)
10 continue
do 20 I=1,N-1
do 25 J=I+1,N
if (A(J).lt.A(I))then
ks=A(J)
A(J)=A(I)
A(I)=ks
endif
25 continue
20 continue
do 30 I=1,N
write(*,*)A(I)
30 continue
end