一個pascal程式除錯? |
尚未結案
|
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
這個程式當輸入3時能列出
abc
acb
bac
bca
cab
cba
但卻跑出
abc
acb
cab
cba
abc
acb
程式碼如下: program t9; var i, no: integer; a: array[1..10] of char; procedure swap(var x, y: char); var tmp: char; begin tmp:= x; x:= y; y:= tmp; end; procedure permute(p, n: integer); var i: integer; begin if(p=n)then begin for i:= 1 to n do write(a[i]); writeln; end else begin for i:= p to n do begin swap(a[p], a[i]); permute(p 1, n); end; end; end; begin readln(no); for i:= 1 to no do a[i]:= chr(ord('a') i-1); permute(1, no); end. |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
writeman 是要呼應這一題吧?
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=75464 你的 recursive 邏輯錯誤 試試這樣寫
program Project1; {$APPTYPE CONSOLE} uses SysUtils; type TTenChars = array[1..10] of char; var i, no: integer; a: TTenChars; procedure swap(var x, y: char); var tmp: char; begin tmp:= x; x:= y; y:= tmp; end; procedure permute(p, n: integer; s: TTenChars); var i,j: integer; b: TTenChars; begin for i:= 1 to n do b[i] := s[i]; for i:= p to n do begin if i=p then begin permute(p 1,n,b); end else begin b[p]:=s[i]; b[i]:=s[p]; permute(p 1,n,b); b[p]:=s[p]; b[i]:=s[i]; end; if (p=n) then begin for j:= 1 to n do write(b[j]); writeln; end; end; end; begin { TODO -oUser -cConsole Main : Insert code here } readln(no); for i:= 1 to no do a[i]:= chr(ord('a') i-1); permute(1, no, a); end. |
writeman
初階會員 發表:31 回覆:34 積分:28 註冊:2004-02-17 發送簡訊給我 |
引言: writeman 是要呼應這一題吧? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=75464 你的 recursive 邏輯錯誤 試試這樣寫感謝mallanlk兄的提醒 我發現是因為我的陣列沒傳入permute procedure中 陣列在recursive中沒有被保留 因此造成錯誤 改成下面這樣應該就行了 program t9; {$APPTYPE CONSOLE} type aoi= array[1..10] of char; var i, no: integer; a: aoi; procedure swap(var x, y: char); var tmp: char; begin tmp:= x; x:= y; y:= tmp; end; procedure permute(p, n: integer; b: aoi); var i: integer; begin if(p=n)then begin for i:= 1 to n do write(b[i]); writeln; end else begin for i:= p to n do begin swap(b[p], b[i]); permute(p 1, n, b); end; end; end; begin readln(no); for i:= 1 to no do a[i]:= chr(ord('a') i-1); permute(1, no, a); end. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |