[問題] 三維陣列傳到函式的用法

看板C_and_CPP (C/C++)作者 (幻滅)時間13年前 (2013/05/23 22:38), 編輯推噓3(3015)
留言18則, 7人參與, 最新討論串1/1
我是使用DE演算法來做最佳化 我原本是使用二維陣列來做我的東西 可是因為最近發現我多了一個需要處理的變數 所以要改成三維陣列來完成.. 這是我原本的程式 int i,j; // 初始化 隨機產生初始個體 for(i=0; i<PopulationSize;i++){ for(j=0; j<D; j++){ population[i][j] =VarsRange[j]*PointRand()+MinLim[j]; } energy[i]=cal_fitness(population[i]);// 計算適應值 } 可是我現在要把population變成三維的也就是population[i][j][k] 然後程式碼變成 for(i=0; i<PopulationSize;i++){ for(j=0; j<machine; j++){ for(k=0; k<D; k++){ population[i][j][k] =VarsRange[k]*PointRand()+MinLim[k]; } energy[i]=cal_fitness(population[i]);// 計算適應值 } } 可是我再把陣列丟給函示那邊不太會寫 我是有找到一個網頁的教學http://ppt.cc/ruY_ 可是還是有點不懂 而且還要去計算每筆資料存在哪個地方的值有點麻煩 ========================================== 另外說一下 我現在想要做的 我現在就是想要一樣只要將population[i]丟入函式中 然後再在函式裡去改變我的j,k來做存取 例如population[i][j][k]={{1,1,2}{2,3,4}{3,5,6}{4,7,8}} 我的i只是用來做選擇要哪一個二維陣列而已 所以當我迴圈跑到i=3的時候 就會丟5,6的這個二維陣列資料給我的函式去做計算 可是我不太懂這部分要怎麼寫 ============================================ 我之前的二維陣列也是這樣 當i=2的時候 就丟了一個一維陣列進去 但是要丟三維陣列去進函式要寫population[i][不知道怎麼寫] 所以有點困惑 因為我i是在主程式才用的到了跟函式完全沒關係 不知道這樣講各位有沒有看得懂我的意思 小弟表達能力有點差 不好意思 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.236.131

05/23 22:45, , 1F
如果有人寫 3對 括號絕對不要聽他的
05/23 22:45, 1F

05/23 22:47, , 2F
如果你覺得很難理解or使用就不要堅持用啊
05/23 22:47, 2F

05/23 22:48, , 3F
用struct or map 也不是很好嗎?
05/23 22:48, 3F

05/23 23:07, , 4F
我是說 網頁那個方法對我來說有點難理解
05/23 23:07, 4F

05/23 23:08, , 5F
所以 我才想說來這裡問問有甚麼其他方法可以供我使用
05/23 23:08, 5F

05/24 19:06, , 6F
請問維度是常數嗎
05/24 19:06, 6F

05/24 21:59, , 7F
如果population是靜態的陣列,參考看看,不確定能不能用
05/24 21:59, 7F

05/24 21:59, , 8F
這裡energy[i]=cal_fitness(population[i]);// 計算適應值
05/24 21:59, 8F

05/24 22:00, , 9F
改成energy[i]=cal_fitness(population[i], machine);
05/24 22:00, 9F

05/24 22:00, , 10F
cal_fitness的宣告改成
05/24 22:00, 10F

05/24 22:01, , 11F
cal_fitness(your_type population[][D],int size){...}
05/24 22:01, 11F

05/24 22:01, , 12F
// D須為全域變數
05/24 22:01, 12F

05/24 22:01, , 13F
然後在cal_fitness裡面直接用population[i][j]
05/24 22:01, 13F

05/24 22:02, , 14F
或者說是population[j][k]應該比較不會誤會
05/24 22:02, 14F

05/26 19:26, , 15F
我以前一定會直接用global variable簡單解決
05/26 19:26, 15F

05/26 19:26, , 16F
現在覺得global variable實在是很那個
05/26 19:26, 16F

05/26 19:27, , 17F
如果是C++而不是C的話,包成object奇檬子會比較舒服
05/26 19:27, 17F

05/27 03:00, , 18F
C99, void calc(int i, int j, int k, int arr[i][j][k]);
05/27 03:00, 18F
文章代碼(AID): #1HdYd8dp (C_and_CPP)
文章代碼(AID): #1HdYd8dp (C_and_CPP)