2005年7月22日 星期五

FORTRAN入門課程(1)解決最簡單的問題

很多人很怕學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

2005年2月2日 星期三

如何用程式解決問題-2

大綱
  1. 資料處理所需程式語言命令
  2. 讀取/寫入標準文字檔案
  3. 修改資料格式
  4. 日期處理
  5. 實例討論


1. 資料處理所需程式語言命令
  • 檔案處理
  • 字串處理
  • 日期函數
  • 資料型態轉換
  • 迴圈
  • 矩陣
2. 讀取/寫入標準文字檔案
  • 檔案開啟與關閉
  • 讀取檔案內容
  • 寫入檔案內容
  • 作業流程

3. 修改資料格式

  • 資料分割與合併
  • 去除空白列
  • 改變分隔符號

2005年2月1日 星期二

如何用程式解決問題-1

大綱
  1. 確認您所面臨的問題是什麼?
  2. 您所熟悉的語言是什麼?
  3. 工具程式
  4. 問題處理流程
    • 作業流程
    • 演算法
    • 資料結構


1.確認您所面臨的問題是什麼?
  • 資料處理(格式轉換)
    • 加逗點
    • 正負號改變
  • 繪圖
  • 分析與計算
  • 地理資訊系統
2.您所熟悉的語言是什麼?
  • 語言百百種,哪一種好呢?
    • FORTRAN
    • C++
    • Java
    • Visual Basic
  • 語言與編輯器
    • C++: Visual C++, C++ Builder
    • Java
  • 工具程式:具有某種特異功能或者建構於某個軟體的巨集語言
    • Matlab
    • IDL
    • AML, Avenue, PCI, MapBasic
  • 工具程式庫
    • 影像
    • 繪圖
    • GIS
3. 問題處理流程
  • 作業流程
    • ㄧ個問題用手如何處理
    • 重複計算的作業程序
  • 演算法
    • 是否已經有現成的演算法,如排序
  • 資料結構
    • 資料結構定義完,程式也寫完了
    • 好的資料結構配合好的演算法

2004年12月1日 星期三

開張宣言

這是個人在另外一個網誌在 空間資訊科學的分支,想把程式設計在空間資訊科學上的應用, 分門別類說清楚。 為什麼要開這樣的網誌呢?每天不是在寫程式, 就是在網路上逛程式設計相關的網站, 常常找不到這個, 找不到那個...

對於一個長久以來一直在寫程式的人而言,最常聽到的問題是:為什麼有那麼多種程式語言呢? 既使是同一種語言,為什麼又有那麼多種編譯程式呢? 不為什麼,想想程式的種類已經比這個地球上的生物少很多,心裏就應該覺得很慶幸的了。 

其實,在這個程式設計合眾國裏,只有一種共同的語言:英文。
雖然語言百百種,但是不會英文就只能接受二手資訊。

在這個程式設計合眾國裏,只有一種共同的生物:懶人。
如果您很勤快的可以坐在電腦面前一天去抓1000個網頁,恐怕您不不會有興趣寫程式,
愈是懶惰的人才會發揮超人的懶人力氣去設計很奇怪的程式。

在這個程式設計合眾國裏,只有一種共同的目標:效率。
常常坐在電腦面前一天,有時候只為了寫一個可以快5秒鐘的程式。