[問題] Debug,無法顯示結果在畫面上

看板C_and_CPP (C/C++)作者 (與程式最後的決戰)時間16年前 (2009/09/14 20:31), 編輯推噓5(5010)
留言15則, 5人參與, 最新討論串1/1
主要是綠色那一段,照理來講,for(i=1;i<300;i++)應該執行300次 然後printf 300次,如果說是程式碼寫錯,至少也應該會印一次才對 可是執行結果,一次也沒顯示..... 是哪裡有問題呢?? 有板友願意幫看程式其他錯誤,我順道把公式寫上來好了,感謝=v=" ┌X[i,1] ┐ ┌ b*X[i-1,k]┐ │X[i,2] │ │X[i-1,1] + b*X[i-1,k]│ │X[i,3] │ │X[i-1,2] + b*X[i-1,k]│ │.... │=│ .................. │ │X[i,k-1]│ │X[i-1,k-2] + b*X[i-1,k]│ │X[i,k] │ │X[i-1,k-1] + b*X[i-1,k]│ └ ┘ └ ┘ 第一組[i-1]共97個數 第二組[i]的97個數要產生時,需利用第一組的數 X[前一組的數,前一組第幾個數] 這樣的公式需從後面往前算(因為計算第j個數,需利用第j-1個數來計算) 程式計算結果,從第303個之後的數180個0,但這是不可能發生的 只有當97個數全是0時,才會出現後面全0的狀態,但也就只有全0才會產出全0的狀況 這組公式中絕不可能出現這種狀況 不知道程式的錯誤在哪~.~ =========================================================== typedef unsigned long long b64; #define DMOD(n,p)((n)%(p)) int main(void) { int i,mci; int p=2147482621; int b=1048148; int k=97; b64 tseed,seed[97]; seed[1] = 135792468; for(i=2;i<=k;i++){ seed[i] = DMOD(1073741816 * seed[i-1],p); } for(i=1;i<300;i++){ if(++mci==k+1){ tseed=DMOD(b*seed[k],p); for(j=k;j>1;j--){ seed[j]=DMOD(seed[j-1]+tseed,p); } seed[1]=tseed; mci=1; printf("第%d個隨機數的值為%lld\n",j,seed[mci]); } } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.137.179

09/14 20:37, , 1F
是不是 mci 沒給初始值導致 mci 的值大過98呢
09/14 20:37, 1F

09/14 21:07, , 2F
喔喔!!忘了給起始值...感謝
09/14 21:07, 2F

09/15 00:24, , 3F
宣告seed[97] 不能用到第 97 個 index, 第一個迴圈就爆了
09/15 00:24, 3F

09/15 09:48, , 4F
喔喔!!難怪跑出來的值超怪!!感謝
09/15 09:48, 4F

09/15 09:50, , 5F
剛試了一下,結果一樣...Q.Q
09/15 09:50, 5F

09/15 10:35, , 6F
seed[1] = tseed; <--- 是否應該是 seed[i] = tseed;
09/15 10:35, 6F

09/15 11:28, , 7F
o.o結果應該一樣吧? i-- → i=1不符合i>1 → 跳出, 感謝
09/15 11:28, 7F
※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 11:50)

09/15 11:35, , 8F
ah.. 是我沒看清楚 ._. 還有新版 code 嗎? XD
09/15 11:35, 8F

09/15 12:04, , 9F
小弟我看不懂 "從第303個之的數180個0" 這句話@_@"
09/15 12:04, 9F

09/15 12:09, , 10F
另外, 綠色那段迴圈看起來沒有機會中止啊??
09/15 12:09, 10F
第303之後的數,計算出來全是0,代表有問題....~.~(少一個"後"字) 修好了,原始程式碼改過,這裡的程式碼忘了改:p ※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:25) ※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:26)

09/15 12:26, , 11F
我是呆子....突然看到有些地方沒修到....Orz
09/15 12:26, 11F

09/15 12:28, , 12F
printf("...seed[j]")→printf("...seed[mci]")
09/15 12:28, 12F

09/15 12:42, , 13F
如果一開始mci是init成1, 那麼for 300的那迴圈....
09/15 12:42, 13F

09/15 12:43, , 14F
看起來也只會印個3次就跑完了, 哪來300多個結果?_?
09/15 12:43, 14F

09/15 16:34, , 15F
直接把b64 seed[97]改成seed[98]試看看
09/15 16:34, 15F
文章代碼(AID): #1AhZUer0 (C_and_CPP)
文章代碼(AID): #1AhZUer0 (C_and_CPP)