[問題] 用結構struct來儲存分子座標是否適當

看板C_and_CPP (C/C++)作者 (pluseus)時間14年前 (2011/07/27 20:14), 編輯推噓1(1059)
留言60則, 10人參與, 最新討論串1/1
開發平台(Platform):visual studio C++ 問題(Question): 不好意思,小弟剛正在學習用C++來自動化處理研究上要處理的問題 因為我第一次學習程式語言,問的問題很基本,請版上的先進們多多包含 我要面對的是分子座標的處理 分子座標的結構如下: (ex.H20) x y z O -0.59 1.13 0.00 H 0.37 1.23 0.00 H -0.94 2.03 0.00 也就是一個3X4的矩陣 但是column1是原子代號(char),column2,3,4是座標(double) 是不是沒有辦法直接用array來表示? 所以我寫了一個struct來記錄這個分子的座標 struct geometry { char name; double coordinate[3]; }; struct geometry atom[3]; atom[0].name='O'; atom[0].coordinate[0]=-0.59; atom[0].coordinate[1]=1.13; atom[0].coordinate[2]=0.00; atom[1].name='H'; atom[1].coordinate[0]=0.37; atom[1].coordinate[1]=1.13; atom[1].coordinate[2]=0.00; atom[2].name='H'; atom[2].coordinate[0]=-0.91; atom[2].coordinate[1]=2.03; atom[2].coordinate[2]=0.00; 做完之後,總覺得怪怪的 請問這樣做是否適當呢?請問有沒有更適當的做法呢? 萬分感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.218.129 ※ 編輯: pluseus 來自: 140.112.218.129 (07/27 20:16)

07/27 20:15, , 1F
適不適合,應視你接下來要做什麼事.
07/27 20:15, 1F

07/27 20:21, , 2F
我是覺得,這樣到要readin其他分子座標好像不太容易
07/27 20:21, 2F

07/27 20:21, , 3F
不知道有沒有其他建議的寫法 :P
07/27 20:21, 3F

07/27 20:23, , 4F
建議是,把分子座標寫在檔案裡面,再readin就方便多了。
07/27 20:23, 4F

07/27 20:29, , 5F
http://codepad.org/Y9zmQi7h 初始化陣列是個方法.
07/27 20:29, 5F

07/27 21:24, , 6F
目前這樣寫是沒啥問題,你就繼續往下寫吧
07/27 21:24, 6F

07/27 21:24, , 7F
等到覺得這個架構不方便,再思改進也不遲
07/27 21:24, 7F

07/27 21:27, , 8F
不建議用james,一開始已經不kiss的寫法,到了一千行時
07/27 21:27, 8F

07/27 21:27, , 9F
會出大問題
07/27 21:27, 9F

07/27 21:47, , 10F
寫了4次ga後的心得是:錯誤也是一種學習..
07/27 21:47, 10F

07/27 21:51, , 11F
ga是什麼? 我只用不建議,沒有反對james732意見
07/27 21:51, 11F

07/27 21:52, , 12F
因為新手一定會經過這階段,寫寫改改.但是要快點脫離這
07/27 21:52, 12F

07/27 21:53, , 13F
行為.因為業界的程式幾乎不會給你這樣大改.
07/27 21:53, 13F

07/27 21:53, , 14F
soga. ga: 基因演算法
07/27 21:53, 14F

07/27 21:54, , 15F
甚至一開始寫不好,會延禍到未來使用的人(包含自己)
07/27 21:54, 15F

07/27 21:59, , 16F
GA我是把他泛型化, 搞比較久而已XD
07/27 21:59, 16F

07/27 21:59, , 17F
對於本科系的人來說, struct反而是比較難懂的概念, 反
07/27 21:59, 17F

07/27 22:00, , 18F
而用陣列會讓他們有回到家的感覺, 這時候我是用巨集
07/27 22:00, 18F

07/27 22:01, , 19F
#define COORDINATE_X 0 等先建議其改寫, 之後比較能
07/27 22:01, 19F

07/27 22:02, , 20F
接受新概念時, 再來改善架構, 可讀性反而是較為迫切
07/27 22:02, 20F

07/27 22:02, , 21F
的問題
07/27 22:02, 21F

07/27 22:04, , 22F
改正推文 → 非本科系
07/27 22:04, 22F

07/27 22:06, , 23F
等他們用了一堆名稱的array之後, 在陣痛中, 再跟他們講
07/27 22:06, 23F

07/27 22:07, , 24F
struct 或 物件化 好用的地方, 就比較能接受了.
07/27 22:07, 24F

07/27 22:07, , 25F
會用什麼技術技巧並不是一開始會想去用, 而是需要它們來
07/27 22:07, 25F

07/27 22:08, , 26F
簡化一些負荷不了的事情.
07/27 22:08, 26F

07/27 22:14, , 27F
to 原PO: 要用array也是可以. 都改成double型態.
07/27 22:14, 27F

07/27 22:14, , 28F
再加個 char ←→ double 的對照表.
07/27 22:14, 28F

07/27 22:17, , 29F
size_t
07/27 22:17, 29F

07/27 22:18, , 30F
從陣列跳到struct花了一段時間才接受struct的觀念..
07/27 22:18, 30F

07/27 22:20, , 31F
糟了, 想用多型作掉 XD
07/27 22:20, 31F

07/27 22:21, , 32F
我來去試看看double array[3][4],萬分感謝上面幾位的建議
07/27 22:21, 32F

07/27 22:23, , 33F
不知是不是我自以為是 http://0rz.tw/w8iIU
07/27 22:23, 33F

07/27 22:24, , 34F
教初學者時,用 struct 普遍性比用 array 還容易接受 xd
07/27 22:24, 34F

07/27 22:26, , 35F
抽象化很好理解, 但是下去寫遇到 . 就點不出來
07/27 22:26, 35F

07/27 22:39, , 36F
to tropical72:有點複雜 XD
07/27 22:39, 36F

07/27 22:40, , 37F
to ericinttu:請問你說的對照表是給電腦看的還是給人看的?
07/27 22:40, 37F

07/27 22:41, , 38F
您是指例如H代號1,O代號8這樣下去寫double array[3][4]嗎?
07/27 22:41, 38F

07/27 22:48, , 39F
我猜的..http://codepad.org/9HiMEwYa 可能會有更好的.
07/27 22:48, 39F

07/27 23:00, , 40F
我想ericinttu應該是樓上的意思,對照是給電腦看的XD 感恩!
07/27 23:00, 40F

07/27 23:10, , 41F
建議不要用 char <-> double 這樣的轉型...
07/27 23:10, 41F

07/27 23:23, , 42F
樓上的意思是還是用struct來寫嗎? 為什麼嗎? 感謝!
07/27 23:23, 42F

07/27 23:25, , 43F
大家都想得好多啊...XD
07/27 23:25, 43F

07/27 23:36, , 44F
那乾脆都用char好了...
07/27 23:36, 44F

07/27 23:40, , 45F
如果要用struct 就給個清晰易懂的名稱...
07/27 23:40, 45F

07/27 23:44, , 46F
「放下牛角,立地寫code」,一些答案往下寫時會慢慢浮出.
07/27 23:44, 46F

07/27 23:45, , 47F
除非這真的是個 big problem..
07/27 23:45, 47F

07/28 00:35, , 48F
我覺得足夠了,記一個分子當然要記分子名稱及座標.
07/28 00:35, 48F

07/28 03:10, , 49F
@pluseus 我覺得用 struct 比較清楚也比較好維護。你可以
07/28 03:10, 49F

07/28 03:10, , 50F
另外寫一個函式,給他名字和座標幫你填完整個 struct 這樣
07/28 03:10, 50F

07/28 03:24, , 51F
就不用寫重複的程式碼。C 或許可以參考 opaque pointer...
07/28 03:24, 51F

07/28 03:29, , 52F
(不過要先學會「分開編譯」)這個寫法學起來應該不會吃虧
07/28 03:29, 52F

07/28 10:04, , 53F
要在struct裡塞函式指標嗎XD
07/28 10:04, 53F

07/28 10:12, , 54F
應該只是把 struct 的真正欄位藏起來而已 xD
07/28 10:12, 54F

07/28 10:52, , 55F
對了我反對轉型純粹只是因為浮點數很多陷阱,跟 struct 沒
07/28 10:52, 55F

07/28 10:54, , 56F
有什麼直接關係,這裡只是碰巧(?)一次解決...
07/28 10:54, 56F

07/28 11:03, , 57F
堅持要用 array 可以用 union 避開轉型不過非常不推薦 orz
07/28 11:03, 57F

07/28 11:05, , 58F
還有就是你可能要想一下有些元素的名字不只一個字母~
07/28 11:05, 58F

07/28 11:06, , 59F
那就要char*了XD
07/28 11:06, 59F

07/28 11:07, , 60F
union的存在一定有其用意XD
07/28 11:07, 60F
文章代碼(AID): #1EC04ZDV (C_and_CPP)
文章代碼(AID): #1EC04ZDV (C_and_CPP)