看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform):Dev C++ 原程式為 #include <stdlib.h> #include <iostream.h> #include <math.h> main(){ double err = pow(2,10); //一個限值 double a[4] = {0, 0, 0, 0}; //代表有1~4 四個變數 double tim = 0; //計數器 while (a[0] < err - sizeof a/sizeof a[0] + 1) { a[3] = a[3] + 1; if (a[3] > err){ a[2] = a[2] + 1; if (a[2] > err){ a[1] = a[1] + 1; if (a[1] > err){ a[0] = a[0] + 1; a[1] = a[0] + 1; } a[2] = a[1] + 1; } a[3] = a[2] + 1; } tim = tim + 1; } cout << tim; system("pause"); } 現在a變數只有4個 但當要計算的a變數數量增加時 if判斷式也會往中間不斷增加 最後a變數可能要增加到100個左右 即1:100 用if寫可能會寫到天荒地老 現在卡在不知道如何把if寫成for迴圈 以下是我已經寫好的 但是有一行我怎麼塞就是塞不進去(if之後的那行) 希望有人可以幫幫我 #include <stdlib.h> #include <iostream.h> #include <math.h> double test1(double x){ double err = 2^10, tim = 1, a = zeros(1,x); while (a[0] < err - sizeof a/sizeof a[0] + 1) { for (i = (length(a)-1; i<=2; i--) { if a[i] > err a[i-1] = a[i-1] + 1; a[i] = a[i] + 1; } % ???????????????????????????????????????? } tim = tim + 1; } cout << tim; } 那行不能放在if內 但我也不知道該放哪 在這先謝謝各位了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.237.166
james732:我想問你這個程式的邏輯是什麼? 07/06 21:54
一個累加器 當a[3]超過一個門檻時 a[2]會加1 但a[3]不是歸零 是從a[2]+1開始算 a[2]a[1]與a[1]a[0]之間的關係依此類推 我的目地是要推算出當a值有幾個時 另一支程式大約要執行多久
tjjh89017:用vector???不過這到底是要做甚麼的??? 07/06 22:01
stonehomelaa:標題寫遞迴 裡面卻在問迴圈? 07/06 22:03
我是覺得這有點像遞迴 好像用迴圈寫不出來 也可能是我改的方式根本是錯的 也請各位不令賜教 謝謝各位了 ※ 編輯: poiuy777 來自: 122.116.237.166 (07/06 22:27)
kinglord:1.照你說的邏輯 你第一個程式在a[1]>err那邊有錯 07/06 22:33
kinglord:2.第2個程式一堆括號標錯 然後????不知道你說哪行 07/06 22:34
kinglord:我是假設你是要問i=1時怎麼處理來回答 07/06 22:35
firejox:從原程式來看要改遞迴是還好... 07/06 22:35
kinglord:所以是要問遞迴阿 還以為是改迴圈錯誤的地方 07/06 22:38
firejox:會用return就可以解決了... 07/06 22:38
firejox:為什麼要用double 宣告a = =... 07/06 22:43
tjjh89017:如果是迴圈,是這個意思嗎??? 07/06 22:45
tjjh89017:http://codepad.org/R4HKzu2N 07/06 22:46
kinglord:tim=tim+1;照第一個程式來講 要放在for外面才對 07/06 22:48
tropical72:是以第一段code之邏輯為目標,換個較易維護的架構是嗎? 07/06 22:49
firejox:原code a[0] 與a[1]似乎沒關係 = =... 07/06 22:49
kinglord:if之前也少了a[i]=a[i]+1; 07/06 22:50
tjjh89017:@kinglord: 似乎沒差,因為都得離開for迴圈 07/06 22:51
kinglord:原CODE我猜寫錯了 照原PO說的邏輯 a[1]=a[0]+1; 07/06 22:51
不好意思 是我筆誤 因為我是從matlab轉過來的 一個起頭是1一個起頭是0 抱歉
tropical72:我覺得 tim 用 unsigned long long 會好點耶.. 07/06 22:51
kinglord:恩恩 沒差 我沒注意到 謝謝提醒 07/06 22:52
firejox:http://codepad.org/lakYJKaj 遞迴就這樣而已... 07/06 22:53
謝謝f大 我努力拜讀一下您的程式 ※ 編輯: poiuy777 來自: 122.116.237.166 (07/06 22:59)
firejox:更正:http://codepad.org/OjjGOi2q 07/06 22:57
※ 編輯: poiuy777 來自: 122.116.237.166 (07/06 22:59)
firejox:@tjjh89017:2^10是哪招.... 07/06 23:00
kinglord:我想只是照原PO寫的直接COPY而已吧 虛擬碼0.0 07/06 23:03
kinglord:@tjjh89017:之前說錯 應該是a[i-1]=a[i-1]+1要提出if外面 07/06 23:04
kinglord:成為a[i]=a[i]+1才對 抱歉= = 07/06 23:05
firejox:什麼時候C/C++變得這麼先進了... 07/06 23:05
firejox:喔不~~ 小錯誤 if裡的別+1 07/06 23:12
firejox:完整:http://codepad.org/r24yD6T4 07/06 23:31
再次謝謝f大 但是剛剛test一下 輸出似乎與原程式不同 http://codepad.org/44car4Ue 不過我會試著往這個方向去修改的 謝謝 經過一夜的折騰 遞迴真的不是像我一樣的一般人寫得出來的 也見識到了C版大家的熱情 謝謝各位的指導 ※ 編輯: poiuy777 來自: 122.116.237.166 (07/07 00:32)
firejox:大概是a[0]的問題 if(!num)return (a[0]++)+1; 07/07 00:33