Re: [問題] 矩陣讀資料問題

看板Fortran作者 (\-o-/)時間13年前 (2011/10/28 10:40), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《don1022 (向前衝)》之銘言: : 請教板上各位,關於讀矩陣寫法碰到困難 : 目前有兩個檔案 分別以 A B 來替代 : 檔案 A 格式如下 檔案 B 格式如下 : 120.00 22.50 120.00 22.50 15.0 : 120.00 22.52 120.00 22.51 14.5 : 120.00 22.53 120.00 22.52 14.7 : 120.00 22.54 120.00 22.53 16.1 : 120.00 22.57 120.00 22.54 16.5 : . . : . . : . 120.00 22.57 18.5 : 120.00 23.55 . : . . : . . : 121.50 22.10 120.00 23.55 18.1 : 意思為檔案 A 內容(如120.00 22.50) 檔案 B內容都有 : 我想要將檔案 B 內數值(如 15.0 , 14.7 , 16.1 , 16.5等值) 寫入至檔案 A : 有相同內容(如120.00 22.50 ) 後面為 15.0 : 我的想法分別將檔案A 檔案B 分別以矩陣方式讀入 : 當我檔案 A讀到120.00 22.50時 去搜索檔案B有相同內容的值寫入 : 我是用 IF 作判斷, 但是在執行時出現有矩陣大小問題 : 因為矩陣B維度較大 矩陣A維度較小 : 請教板上各位 我該如何撰寫程式將矩陣B數值寫入矩陣A內 : 麻煩板上各位給我指點一些方向, 謝謝大家幫忙 Hi,我是Fortran新手,提供一些我的想法給你參考 我覺得你的A,B的資料都可以用2維矩陣表示,應該不需要設不同維度。 假設你有兩個純文字文件 A.txt是 120 22.5 120 22.52 120 22.53 120 22.54 120 22.57 B.txt是 120 22.5 15 120 22.51 14.5 120 22.52 14.7 120 22.53 16.1 120 22.54 16.5 120 22.57 18.5 Program replace implicit none integer,parameter::n=10 !n要大於等於A,B的列數 real(kind=8)::A(3,n),B(3,n) real(kind=8)::Tol integer::i,j,K,L integer::status=0 open(10,file='A.txt') open(20,file='B.txt') Tol = 1D-6 !容許誤差 A =0 B =0 i =1 do while(.true.) read(10,*,iostat = status ) A(1:2,i) !讀取A的資料 if(status /= 0) exit i=i+1 end do K =i-1 i =1 do while(.true.) read(20,*,iostat= status ) B(1:3,i) !讀取B的資料 if(status /= 0) exit i=i+1 end do L =i-1 do i =1,K write (*,*) A(1:3,i) !A尚未填入資料前的狀態 end do do i=1,K !若A與B前兩欄相同則將B第三欄資料填入A do j=1,L if( abs(A(1,i) - B(1,j))< Tol .and. abs(A(2,i) - B(2,j))< Tol) then A(3,i) = B(3,j) end if end do end do write(*,*) "============================" do i =1,K write (*,*) A(1:3,i) !A填入資料後的狀態 end do end program 測試過可以將B的資料正確填入A 不知道這是不是你要的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.58.38 ※ 編輯: zmark 來自: 140.114.58.38 (10/28 11:50) ※ 編輯: zmark 來自: 140.114.58.38 (10/28 15:35) ※ 編輯: zmark 來自: 140.114.58.38 (10/28 15:44)

10/30 00:35, , 1F
建議浮點數不要用==來判斷 盡量用相減絕對值小於容許誤差
10/30 00:35, 1F
謝謝指正! 我改好了^^ ※ 編輯: zmark 來自: 61.230.193.132 (10/30 11:57)
文章代碼(AID): #1EgXOdjr (Fortran)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EgXOdjr (Fortran)