You are on page 1of 24

FORTRAN RNEKLER (2013)

NOT:
- Kod satirlarindaki bazi bosluklari gstermek iin "_ " kullanilmistir.
- Kod satirlarinin hemen yaninda, iki nlem isareti arasinda yazilan bilgiler o satirla ilgili aiklamalar
iin yazilmistir.
sim ile Karylama
Klavyeden isim girildikten sonra, 'merhaba ...' seklinde kullaniciyi karsilayacak bir program yaziniz.
program karsilama
character ad*20
write(*,*) 'adiniz nedir?'
read(*,*) ad
write(*,*) 'merhaba_', ad
end
Toplama ylemi
Klavyeden girilen iki sayiyi toplayan bir program yaziniz.
program toplama
write(*,*) 'toplama icin iki sayi giriniz:'
read(*,*) a, b
c=a+b
write(*,*)'toplam=', c
end
Daire evresi ve Alan Hesaplama
Klavyeden yariapi girilen dairenin evresini ve alanini hesaplayan bir program yaziniz.
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 Yogunlugu Hesaplama
Kullanici sirasiyla gazin adini ve mol ktlesini yazdiktan sonra "gazin_adi gazinin yogunlugu
[kg/m3]" seklinde ikti veren bir program yaziniz.
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 Molekl Yogunlugu Hesaplama
Kimyasal forml C
x
H
y
seklinde verilen bir gaz yakitin N.S.A. yogunlugunu hesaplayan bir program
yaziniz.
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 gazin 1 atm basin ve 273 K sicakliktaki hacim degerini klavyeden girerek, istenilen baska
bir sicaklik ve basintaki hacmini hesaplamaya yarayan bir program yaziniz.
program hacim
p0=1.013E5 !1 atm basn!
T0=273 !273 K scaklk!
write(*,*) 'v0 giriniz:'
read(*,*) v0
write(*,*) 'P ve T giriniz:'
read(*,*) P, T
V=v0*p0/P*T/T0
write(*,*) 'Hacim=', V
end

P
0
.I
0
I
0
=
P.I
I

Ortalama ve Toplam Hesaplama
Klavyeden girilen sayilarin ortalamasini ve toplamini hesaplayan bir program yaziniz. Bu
hesaplamada kullanilacak sayilarin girisinin tamamlandigini -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 Geme
Klavyeden sirasiyla grencinin adi ve soyadi, grenci numarasi, arasinav notu, final notu girilerek
grencinin ders geme durumunu ve basari notu harfini gsteren bir program yaziniz. Programin
sonlanmasi iin final notunun negatif girilmesi sarti tanimlayiniz.
Bayar Notu
Arasnav*0.4+Final*0.6
Bayar 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' !& iareti alt satrdan devam etmek iin kullanr!
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 Kklerini Bulma
ax
2
+hx +c = formatindaki bir denklemin kklerini, klavyeden a, b, c katsayilarini girerek
hesaplayan bir program yaziniz.
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 dnglerinde bu tr, virgllerle ayrilmis bir ifade kullanildiginda sartlar su sekilde
belirlenmektedir:
D <0 ise 10
D=0 ise 20
D>0 ise 30

gen Sart Kontrol
kenar uzunlugu klavyeden girildiginde genin trn ya da gen sartinin saglanmadigini belirten
bir program yaziniz.
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

Vcut Kitle ndeksi (BMI ) Hesaplama
Klavyeden vcut agirligi ve boy bilgileri girilerek vcut kitle indeksi hesaplayan, sonuca gre
degerlendirme yapan bir program yaziniz.
Vcut Kitle Indeksi
BHI =Agirlik Boy
2
/
Degerlendirme
35 BMI Obez
30 BMI <35 Sisman
25 BMI <30 Kilolu
20 BMI <25 Normal
BMI <20 Zayif

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

Rzgar Hz Hesaplama
Farkli arazi kosullarinin etkisini de gz nnde bulunduracak sekilde; klavyeden belirli bir ykseklikte
llen rzgar hizi ve ykseklik girilerek, istenilen ykseklikteki rzgar hizini hesaplayabilen bir
program yaziniz.

v
v
0
=[
z
z
0

p

Klavyeden girilmesi gereken degerler: V
0
, Z, Z
0
, p
V :Hesaplanmak istenen hiz
Z :Rzgar hizinin hesaplanacagi ykseklik
V
0
:Belirli bir ykseklikte llen hiz
Z
0
:V
0
hizinin lldg ykseklik
p :Prz yksekligi ve stabiliteye bagli katsayi
1- Byk sehir: p=0.40
2- Kk yerlesim yeri: p=0.28
3- Kirsal 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 Dyme
Durgun halden serbest dsme hareketine baslayan bir cismin, klavyeden girilen ykseklik ve t saniye
araliklarla hizini ve zeminden yksekligini hesaplayan bir program yaziniz.
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

Sayya Kadar Toplama (if kullanarak)
Klavyeden girilen n sayisina kadar olan tamsayilarin toplamini if dngs kullanarak hesaplayan bir
program yaziniz.
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
Sayya Kadar Toplama (do kullanarak)
Klavyeden girilen n sayisina kadar olan tamsayilarin toplamini do dngs kullanarak hesaplayan bir
program yaziniz.
program toplam
top=0
write(*,*) 'n giriniz:'
read(*,*) n
do 50 i=1, n, 1
top=top+i
50 continue
write(*,*) 'toplam=', top
end

Hz, Zaman, Yol Hesaplama
Sabit ivme ile hareket eden bir aracin ulastigi maksimum hizi ve bu hiza ulasmasi iin geen sreyi
klavyeden girerek; birer saniye araliklarla ulastigi hizi (m/s) ve maksimum hiza ulasana kadar aldigi
yolu hesaplayan bir program yaziniz.
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 Dngs -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 Dngs -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 Dngs -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 Dngs -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 Dngs -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 Dngs -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 Says Hesaplama
n =4-
4
3
+
4
5
-
4
7
dizisinin terimleri toplanarak pi sayisi istenen duyarlilikla hesaplanabilir. Bu
toplam kisaca n =_
4
2-1
(-1)
+1 n
=1
seklinde de yazilabilir. Bu dizinin ilk n terimini kullanarak n
sayisini hesaplayan bir program yaziniz.
!denklemler incelendiginde pi sayisini hesaplamak iin sadece terim sayisi girilmesinin yeterli
oldugu grlmektedir!
program pisayisi
real pi
write(*,*) 'Pi sayisi kac terimle hesaplanacak?'
read(*,*) n
pi=0
isaret=-1
do 10 i=1, n
isaret=-isaret !bu satr ile dngdeki i deeri arttka isaret deeri bir + bir - deer alacaktr!
terim=isaret*4./(2*i-1) !Fortran'da 4. yazlmazsa blme ilemi gereklememekte!
pi=pi+terim
write(*,*) 'terim sayisi:', i, '_pi=', pi !*!
10 continue
end
* Bu programda her dng tekrarinda hesaplanan pi sayisi ekrana yazdirilmaktadir. Bylece pi
sayisinin gittike dogru degerine yakinsamasi ekrandan izlenebilir. Eger continue satirinin hemen
ncesindeki write satiri continue sonrasina yazilirsa sadece girilen n terimi sonunda hesaplanan pi
sayisi grntlenebilir.


Dizi Toplam
(x) =x -
x
2
2
+
x
3
3
-
x
4
4

fonksiyonunun degerini, verilen x iin dizinin ilk n terimini kullanarak hesaplayan bir program
yaziniz. x ve n degerleri klavyeden girilecektir.
Aiklama:
Fonksiyon incelendiginde _ (-1)
+1
x
i

n
=1
islemine karsilik geldigi grlmektedir. Dolayisiyla
n degerine kadar olan islemlerin hesaplanmasi iin do dngs yazilirken bu islem
tanimlanmalidir.
program dizitoplam
write(*,*) 'x degerini giriniz:' !f(x) fonksiyonun hesaplanmas iin gerekli olan x deeri!
read(*,*) x
write(*,*) 'toplanacak terim sayisini giriniz:'
read(*,*) n
fx=0 !fx dngs oluturmadan nce balang deerini sr olarak tantmamz 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 Yazm
gg.aa.yyyy seklinde girilmis tarihi gg aa yyyy ve gg/aa/yyyy formatinda geri veren bir program
yaziniz.
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 Giriyi
Klavyeden girilen sayi ka basamakli olursa olsun, ilk 4 basamagini okuyan ve 'girilen sayi: (ilk 4
basamak)' seklinde dns yapan bir program yaziniz.
program sayi
write(*,*) 'bir sayi gir'
read(*,10) n
10 format(i4)
write(*,20)n
20 format (1x,'girilen sayi:',i4)
end



Faktriyel Hesaplama
Klavyeden girilecek n sayisina kadar btn sayilara ait faktriyel degerlerini hesaplayan bir program
yaziniz.
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 Nfusu Hesaplama
Bir blgenin gelecekteki nfusu N
u
=N

- (1+p)
n
forml ile hesaplanabilir. Burada
N
L
: Gelecekteki nfus
N

: Yeni nfus
p : Nfus artis orani
n : Iki nfus sayimi arasindaki yil farki
anlamindadir. Nfus artis orani p, asagidaki forml yardimi ile hesaplanabilir.
p =[
N
j
N
E

1
n
-1
N
L
eski bir sayima gre nfustur. Eski ve yeni yillar, bunlara ait nfus sayimlari verildigine gre
sayimlardan sonraki 5,10,15,...,50 yil iin nfuslari hesaplayip yazan bir program yaziniz.
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 sicakliklari -50oC ile 150oC arasinda 10'ar derece araliklarla Fahrenheit ve Kelvin
birimine eviren bir tablo hazirlayan bir program yaziniz.
T
F
=32+1.8*T
C

T
K
=273.15+T
C
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 Degiykenlerle Standart Sapma ve Ortalama Hesaplama
Klavyeden girilen n tane sayinin aritmetik ortalamasini ve standart sapmasini hesaplayan bir program
yaziniz.
x
ot
=
_ x
i
n
i=1
n
SS =_
_(x
i
-x
crt
)
2
n-1

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
A =[
1 3 4
5 7 8
,B =[
6 1 -7
9 3 4

C=A+B toplama islemini yapan bir program yaziniz.
C =[
7 4 -3
14 10 12

m : satir sayisi
n : stun sayisi
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


seklinde gelisigzel girilen sayilari siralayan bir program yaziniz.
Dizi degiskenler kullanilmadan:
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
Saylar sralama
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 degiskenler kullanilarak:
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

You might also like