Re: [問題] 請問這樣註解的河內塔程式(迴圈)有沒有 …
※ 引述《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
04/17 16:23, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):