July 22, 2005

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

0推薦此文章
Today's Visitors: 0 Total Visitors: 245
Personal Category: FORTRAN Topic: 未分類
[Trackback URL]

Reply
  • 1樓

    1樓搶頭香

    最近修了一門課,要利用fortran寫一個程式,15年沒寫
    程式,心中有些不安,上網看到有此網站,心中十分高
    興,有問題再向前輩們請教.

  • 大胖狗 at October 31, 2006 10:15 AM comment | email
  • 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
    -
    先謝謝你
    大感謝 ^________^

  • orangepiggy at July 28, 2007 04:56 AM comment | prosecute
  • 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)

  • orangepiggy at July 28, 2007 05:28 AM comment | prosecute
  • 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

  • proglog at July 31, 2007 03:44 PM comment | prosecute
Post A Comment









Yes No



Please input the magic number:

( Prevent the annoy garbage messages )
( What if you cannot see the numbers? )
Please input the magic number

誰來收藏
Loading ...