線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1301
推到 Plurk!
推到 Facebook!

一個pascal程式除錯?

尚未結案
writeman
初階會員


發表:31
回覆:34
積分:28
註冊:2004-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-25 08:48:36 IP:61.60.xxx.xxx 未訂閱
這個程式當輸入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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-25 13:22:31 IP:203.69.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-26 08:05:55 IP:61.60.xxx.xxx 未訂閱
引言: 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.
系統時間:2024-04-26 12:53:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!