Re: [問題] 請問這樣註解的河內塔程式(迴圈)有沒有 …

看板C_and_CPP作者 (Gray wolf)時間13年前 (2011/04/13 16:59), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《bbearh (就這樣了)》之銘言: : ※ 引述《shieldsky (Gray wolf)》之銘言: : : 之前我從網路上抓了一個河內塔的程式,是以迴圈+Stack方式寫成的, : : 想知道該程式碼中第 9行變數m是代表什麼意思? : 要處理幾次(幾個盤子). : 記得 while 是用 m 來處理次數. 所以m是代表"尚須處理幾次"的意思嗎? 因為手動compile, 但一直沒能寫出正確的結果... XD : :     程式碼中第32行Stack &s,我所註解的意思是否正確? : :     程式碼中第47行Stack s,是指傳入s內容嗎? : 是32 call by reference, : call by reference 在C++ 是一個好用而奇怪的用法, 它打破原來C 的規定, : 原來是說 C 的所有傳參數都是call by value, 現在卻多了個例外. : 47 是32 caller的用法 (定義及使用成對的) 請問上方這行「47行是32行 caller的用法(定義及使用成對的)」能再解釋得清楚些嗎? 47行是32行的caller? 還是顛倒過來才對? : ------------------------------------------------------------------------------ : 你那樣的理解勉強可以 (對 "使用" 定義 function 中參數的& 來說), 但意義上是錯的. : 考試就不可以, 要寫compiler 也不可以. : line 32 不是指傳遞 stack的位址, 記得 (L32) 是定義function 的地方. : 它是說"請將這個變數視為call by reference : (也就是你說的:可以直接存取該stack的內容) : 當用 s.top 時將會改到 caller 的 s.top 也就是說使用47行的s.top會同步更改到32行的s.top嗎? 這樣一來,是否Hanoi()和Push()和Pop()三函數的s.top都是共同指到同一者上? 也就是彼此在更動s.top的值時,s.top值都會被同步更新到? : : 能否幫忙解釋一下第50行~62行的意思?(因我不確定自己註解的意思對不對。) : : 程式碼網址: http://codepad.org/Xl03o83D : n 應是盤子編碼(或是這次要處理的最大的盤子代號.) : --> 記得 cout <<n ..... : Push(m,n,a,b,c,s); //呼叫Push函數,在 stack中放入一個東西 : while( s.top > 0 )//當stack 中有東西時,即柱子上有盤子時->搬的程序, 還沒搬完 : { : Pop(m,n,a,b,c,s); //呼叫Pop 函數, 從stack中取出一個東西-> : // 要處理的一個程序--> 可以對應到 recursive 版本的一個大動作 : // 拿出一個, 會 push 以下3 個 push(). 上方這三句是指當呼叫過一個Pop函數後, 會連帶驅動3個Push();嗎? : if( m <= 1 ) //若當柱子上頭的盤子個數<=1 : { : if( n == 0 ) //當柱子上已無盤子 : // (if 這行 不知有沒有機會會發生, 我手上沒有compile 可用, 你再自己試試?) 若是把這兩行拿掉,則輸入盤數(n)為1時,會出現第0號盤子,將使結果有誤. : continue; //則continue回到while(s.top>0)處再次作判斷 : else //該根柱子上的盤子只剩一個時,印出搬動情況 : cout<<"第 "<<n<<" 號盤子: 從第 "<<a<<" 根柱子 ---> 第 "<<c<<" 根柱子"<<endl<<endl; : } 另想請問17行的void Pop(int &m,int &n,char &a,char &b,char &c,Stack &s) 和 與 32行的void Push(int m,int n,char a,char b,char c,Stack &s)兩者參數的差別, 是在於Pop();皆是以call by reference方式傳遞值, 而Push();是除了&s以外,其餘參數皆以call by value方式傳遞值嗎? 謝謝兩位網友的回覆,經過思考後我將新的註解已重新上傳到: http://codepad.org/rGqMHp2T 麻煩各位再幫忙看看了,真的很感謝。 >"< p.s.我真該好好加強c++觀念了,觀念整個好薄弱... QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.7.61 ※ 編輯: shieldsky 來自: 140.128.7.61 (04/13 17:08) ※ 編輯: shieldsky 來自: 140.128.7.61 (04/13 17:08)

04/17 16:23, , 1F
謝謝bbearh網友詳細解說。 :)
04/17 16:23, 1F
文章代碼(AID): #1DfMNbAp (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DfMNbAp (C_and_CPP)