Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    2

    Giải thích giúp thủ tục

    Giải thích hoạt động của thủ tục try giúp mình, mình đọc mãi mà không hiểu nó hoạt động như thế nào. Pascal thực hiện tuần tự câu lệnh từ trên xuống.Đây là chương trình in ra các hoán vị của 1 số
    Mã:
    Var S,X:string;
    i:integer;
    kt:array[1..100] of boolean;
    procedure Inp;
    Begin
    Readln(S);
    x:=S;
    fillchar(kt,sizeof(kt),true);
    End;
    Procedure print;
    Begin
    If x<>S then writeln(x);
    End;
    Procedure Try(j:integer);
    Var i:integer;
    Begin
     If j=0 then
     Begin    
      print;
      exit;
     End;
     For i:=1 to length(S) do
      If kt[i] then
       Begin
         kt[i]:=false;
         x[j]:=S[i];
         try(j-1);
         kt[i]:=true;
      End;
      End;
      Begin
     
      inp;
      try(length(S));
      Readln
      End.

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    3
    Procedure Try(j:integer);
    Var i:integer;
    Begin
    If j=0 then
    Begin
    print; {thoa man dk, in ra}
    exit; {thoat ra}
    End;
    For i:=1 to length(S) do
    If kt then
    Begin
    kt:=false; {danh dau de lan sau khong bi lap lai}
    x[j]:=S; {gan gia tri cho ket qua}
    try(j-1); {thu voi gia tri j-1}
    kt:=true; {ben tren da danh dau thi gio bo danh dau vi da xet qua truong hop nay roi}
    End;
    End;
    Trước hết ta cần hiểu try có tác dụng gì? Trong chương trình này try là thử chọn vị trí thứ j (j chạy lùi từ cuối về đầu) trong kết quả, tức là từ hàng đơn vị trở đi.
    Quá trình:
    _ j=0 -> print+exit: khi đã về tới j=0 tức là ta đã chọn được n chữ số tạo được hoán vị, lúc này sẽ thực hiện công việc in ra kết quả và thoát khỏi vòng ctc hiện thời lúc đó (tức là trở về ct đệ quy ở bước trước) và không làm những công việc bên dưới.
    _ i=1->length(s), if kt: thử các giá trị có thể nhận được của x[j], giá trị nào có thể được (if kt) thì gán cho x[j], đánh dấu giá trị đó đã được chọn để các bước lặp sau không chọn lại, và sau đó thực hiện thử chọn số tại vị trí j-1 (lùi 1 vị trí) = try(j-1)
    _ kt:=true: đây là gán lại giá trị cho mảng đánh dấu, sở dĩ có dòng này vì bước trên ta đã gán giá trị chọn nó rồi, thì sau khi đệ quy theo hướng đó, ta phải trả lại giá trị true cho vị trí đánh dấu đó.

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    - Mình thây sách LMH là dễ hỉu nhất r`. Mình k có khả năng sư phạm để giảng cho bạn hỉu hơn ebook đâu [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
    - Nếu k hỉu nữa thì bạn f7, xem các biến chạy ntn thì sẽ hỉu thôi

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •