FORTRAN ÖRNEKLER (2013) NOT: - Kod sat satrlar ndaki baz baz bo boluklar göstermek için "_ " kullan kullanlm lmr. r. - Kod sat sat rlar n n hemen yan yannda, iki ünlem i iareti aras arasnda yaz yazlan bilgiler o sat satrla ilgili aç açklamalar için yaz yazlm lmr. r.
sim ile Karlama Klavyeden isim girildikten sonra, 'merhaba ...' eklinde kullan kullan kar kar layaca layacakk bir program yaz yazz. z. program karsilama character ad*20 write(*,*) 'adiniz nedir?' read(*,*) ad write(*,*) 'merhaba _ ', ', ad end
Toplama lemi Klavyeden girilen iki say say toplayan toplayan bir program yaz yazz. 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 çap girilen dairenin çevresini ve alan alan hesaplayan hesaplayan bir program yaz yaz z. 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 Younluu Hesaplama Kullan srasyla gazn ad ve mol kütlesini yazdktan sonra "gazin_adi gazinin yogunlugu [kg/m3]" eklinde çkt veren bir program yazz. 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 Younluu Hesaplama Kimyasal formülü C xHy eklinde verilen bir gaz yak n N..A. younluunu hesaplayan bir program yazz. 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 gazn 1 atm basnç ve 273 K scaklktaki hacim deerini klavyeden girerek, istenilen baka bir scaklk ve basnçtaki hacmini hesaplamaya yarayan bir program yazz. 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
. = .
Ortalama ve Toplam Hesaplama Klavyeden girilen saylar n ortalamas ve toplam hesaplayan bir program yazz. Bu hesaplamada kullanlacak saylar n giriinin 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 srasyla örencinin ad ve soyad, örenci numaras, arasnav notu, final notu girilerek rencinin ders geçme durumunu ve baar notu harfini gösteren bir program yazz. Programn sonlanmas için final notunun negatif girilmesi art tanmlayz.
Baar Notu Arasnav*0.4+Final*0.6
Baar Notu Harfi
100 - 90 89 - 80 79 - 70 69 - 60 59 - 50 49 - 0
A1 A2 B1 B2 C 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' read(*,*)AS,NO,ARA,FIN if (FIN.LT.0) stop BN=0.4*ARA+0.6*FIN
!& i areti alt sat rdan devam etmek için kullanr!
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
+ + =
formatndaki bir denklemin köklerini, klavyeden a, b, c katsaylar girerek hesaplayan bir program yazz. program denklem write(*,*)'A,B,C yi giriniz' read(*,*)A,B,C
10
D=B**2-4*A*C
! hesapland!
if (D) 10,20,30
!*!
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 kullanldnda artlar u ekilde belirlenmektedir: D < 0 ise 10 D=0
ise 20
D>0
ise 30
Üçgen art Kontrolü Üç kenar uzunluu klavyeden girildiinde üçgenin türünü ya da üçgen artn salanmad belirten bir program yazz. 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 arl ve boy bilgileri girilerek vücut kitle indeksi hesaplayan, sonuca göre deerlendirme yapan bir program yazz. Vücut Kitle ndeksi 35 30 25 20
=
BMI BMI < 35 BMI < 30 BMI < 25
BMI < 20
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
Deerlendirme Obez man Kilolu Normal Zayf
Rüzgar H Hesaplama Farkl arazi koullar 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 yazz.
= Klavyeden girilmesi gereken deerler: V 0 , Z, Z 0 , p V
:Hesaplanmak istenen hz
Z
:Rüzgar hn hesaplanaca yükseklik
V 0
:Belirli bir yükseklikte ölçülen hz
Z 0
:V 0 n ölçüldüü yükseklik
p
:Pürüz yükseklii ve stabiliteye ba katsay
1- Büyük ehir: 2- Küçük yerleim yeri: 3- rsal alan:
p=0.40 p=0.28 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 balayan bir cismin, klavyeden girilen yükseklik ve t saniye aralklarla h ve zeminden yüksekliini hesaplayan bir program yazz. 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 sayna kadar olan tamsaylar n toplam if döngüsü kullanarak hesaplayan bir program yazz. 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 sayna kadar olan tamsaylar n toplam do döngüsü kullanarak hesaplayan bir program yazz. 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 aracn ula maksimum h ve bu hza ulamas için geçen süreyi klavyeden girerek; birer saniye aralklarla ula h (m/s) ve maksimum hza ulaana kadar ald yolu hesaplayan bir program yazz. 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
i 1 1 1 2 2 2 3 3 3
j ----2 3 4 2 3 4 2 3 4
k 3 4 5 4 5 6 5 6 7
end
ç çe Do Döngüsü -2 program do2 write(*,*) 'i j k' write(*,*) '-----' k=0
i 1 1 2 2
j k ----3 4 4 9 3 14 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
i
write(*,*) 'i j k'
1 1 2 2
write(*,*) '-----' do 10 i=1, 2
j k ----3 4 4 9 3 5 4 11
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 1 1 2 2
j ----3 4 3 4
k 4 5 5 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
i 1 1 1 2 2 2
j k ----5 6 4 11 3 15 5 22 4 28 3 33
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 1 1 1 3 3 3
j k ----5 6 4 11 3 15 5 23 4 30 3 36
Pi Say Hesaplama
= 4 + … dizisinin terimleri toplanarak pi say istenen duyarlkla hesaplanabilir. Bu toplam k saca = 1) eklinde de yazlabilir. Bu dizinin ilk n terimini kullanarak say hesaplayan bir program yazz.
!denklemler incelendiinde pi say hesaplamak için sadece terim say girilmesinin yeterli olduu 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 satr ile döngüdeki i deeri arttkça isaret deeri bir + bir - de er alacaktr!
terim=isaret*4./(2*i-1) !Fortran'da 4. yazlmazsa bölme ilemi gerçeklememekte! pi=pi+terim write(*,*) 'terim sayisi:', i, '_pi=', pi 10
!*!
continue end
* Bu programda her döngü tekrar nda hesaplanan pi say ekrana yazdlmaktadr. Böylece pi sayn gittikçe doru deerine yak nsamas ekrandan izlenebilir. Eer continue satn hemen öncesindeki write sat continue sonrasna yazrsa sadece girilen n terimi sonunda hesaplanan pi say görüntülenebilir.
Dizi Toplam
() = + … 2
3
4
fonksiyonunun deerini, verilen x için dizinin ilk n terimini kullanarak hesaplayan bir program yazz. x ve n deerleri klavyeden girilecektir. Açklama:
Fonksiyon incelendiinde 1) ilemine kar k geldii görülmektedir. Dolayyla n deerine kadar olan ilemlerin hesaplanmas için
do döngüsü yazrken bu ilem
tanmlanmalr. program dizitoplam write(*,*) 'x degerini giriniz:' ! f(x) fonksiyonun hesaplanmas için gerekli olan x deeri! read(*,*) x write(*,*) 'toplanacak terim sayisini giriniz:' read(*,*) n fx=0
!fx döngüsü 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 Yaz gg.aa.yyyy eklinde girilmi tarihi gg aa yyyy ve gg/aa/yyyy formatnda geri veren bir program yazz. 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 Girii Klavyeden girilen say kaç basamakl olursa olsun, ilk 4 basama okuyan ve 'girilen sayi: (ilk 4 basamak)' eklinde dönü yapan bir program yazz. 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 sayna kadar bütün saylara ait faktöriyel deerlerini hesaplayan bir program yazz. Elde edilmek istenen: Sayi ---1 2 3 4 5 ... n
Faktoriyel ---------1 2 6 24 120 ... n!
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 100
format (1x,i4,3x,F30.3) continue end
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 arasndaki yl fark
anlamndadr. Nüfus art oran p, adaki formül yard ile hesaplanabilir.
= 1 eski bir sayma göre nüfustur. Eski ve yeni yllar, bunlara ait nüfus saymlar verildiine göre saymlardan sonraki 5,10,15,...,50 yl için nüfuslar hesaplay p yazan bir program yazz. 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 scaklklar -50oC ile 150oC arasnda 10'ar derece aralklarla Fahrenheit ve Kelvin birimine çeviren bir tablo hazrlayan bir program yazz. TF=32+1.8*T C 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