FORTRAN入門課程(1)解決最簡單的問題
本課程語音檔案可 在此下載(26:24 15.8 MB),語音檔16:16以後為第四課課程內容。
很多人很怕學FORTRAN,記得大三的時候(1986年),航空系的同學跑來問我有關FORTRAN的問題,
陪他一起來的同學很感嘆,學習「福傳」會讓別人恥笑,還是學習像c語言這樣的東西吧!
如果,您同意他的看法,也沒錯,因為,FORTRAN不但是古老而且是很保守的語言。
但是,一但被FORTRAN拿來用的功能,就會千古流傳。
接下來,開始介紹今天的課程動機:
有一天,另外一個部門的人跑來請我幫忙,有一批資料雖然只有三個欄位x,y,z
因為資料太大,不管用什麼軟體都打不開這個資料檔。
問我有什麼方法可以很快的把正負號顛倒(資料有正有負)?
當時正好要去開會,就請一位新進的同仁小陳幫忙處理。
才剛開完會回來,小陳告訴我資料已經處理好了,我很驚訝他怎麼這麼厲害?
以下是他寫的FORTRAN程式:
program change_sign real(kind=8) :: x,y,z open(10,file='data.xyz',status='old') open(20,file='new_data.xyz',status='unknown') do while (.not.eof(10)) read(10,*)x,y,z write(20,*)x,y,-z end do close(10) close(20) stop end我一看,好漂亮(本來想說好簡短)的FORTRAN程式!!!
大家不要看這個程式很短喲,當天拿來的資料檔共有4000萬筆! 如果用Execl開啟,只能處理前65536筆資料呢。
為了教學方便,我把這個程式註解了一下:
program change_sign ! 宣告x,y,z變數 real(kind=8) :: x,y,z ! 開啟原資料檔 open(10,file='data.xyz',status='old') ! 開啟輸出資料檔 open(20,file='new_data.xyz',status='unknown') ! 處理10號檔案裡面所有的資料,直到eof(end of file) do while (.not.eof(10)) read(10,*)x,y,z write(20,*)x,y,-z end do ! 關閉資料檔 close(10) close(20) stop end這個程式的作業流程,請參考 如何用程式解決問題2
Today's Visitors: 0 Total Visitors: 245

1樓
1樓搶頭香
最近修了一門課,要利用fortran寫一個程式,15年沒寫
程式,心中有些不安,上網看到有此網站,心中十分高
興,有問題再向前輩們請教.
2樓
2樓頸推
你好
最近剛學習FORTRAN
從來沒學過任何程式語言的我
讓我大傷腦筋
想請在FORTRAN中想要打立方根要如何寫設定呢?
我只知道平方根可以用[SQRT(X)]
以下是我的程式
是要算出三個數字的三種平均數
-
program homework2a
real A,B,C,x,y,z
write(*,*)"please enter the x"
read(*,*)x
write(*,*)"please enter the y"
read(*,*)y
write(*,*)"please enter the z"
read(*,*)z
A=(x+y+z)/3
B=(x*y*z) **(1/3)
C=3/(1/x+1/y+1/z)
write(*,*)"( x+ y+ z)/3=",A,"(
Arithmetic mean)"
write(*,*)"(x* y *z) **(1/3)=",B,"(
Geometric mean)"----->有問題的一行 >_____<
write(*,*)"3/(1/x+1/y+1/z)=",C,"(
Harmonic mean)"
stop
end
-
先謝謝你
大感謝 ^________^
3樓
3樓坐沙發
題目題目一起給你比較清楚
我怕我講的不清楚
謝謝你
-
1. Write a program to compute and display
the means of three REAL variables
Initialized with positive real values.
Arithmetic mean = 1/3 ( x+ y+ z)
Geometric mean (x y z) 1/3-->這是次方 也就是開
立方根
Harmonic mean 3/(1/x+ 1/y+1/ z)
4樓
福樓
改成這樣就可以了,(x*y*z)**power是關鍵
program homework2a
real*8 A,B,C,x,y,z,power
write(*,*)"please enter the x"
read(*,*)x
write(*,*)"please enter the y"
read(*,*)y
write(*,*)"please enter the z"
read(*,*)z
power=1.0/3.0
A=(x+y+z)/3
B=(x*y*z) **power
C=3/(1/x+1/y+1/z)
write(*,*)'( x+ y+ z)/3=',A,'(Arithmetic
mean)'
write(*,*)'(x* y *z) **(1/3)=',B,'(Geometric
mean)'
write(*,*)'3/(1/x+1/y+1/z)=',C,'(Harmonic
mean)'
stop
end