tailieunhanh - Lập trình nâng cao trên ngôn ngữ Pascal part 10

Tham khảo tài liệu 'lập trình nâng cao trên ngôn ngữ pascal part 10', tài liệu phổ thông, tin học phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | Chương 7. Một số tỉ lí dụ 259 Yêu cáu cần chuyến N đĩa từ cọc 1 sang cọc 2 theo các quy tắc Mổi hước chỉ chuyến một đĩa sang cọc sát cạnh nó theo chiều kim dồng hổ 1 sang 2 2 sang ỉ 3 sang ỉ Trong quá trình chuyển đĩa chỉ cho phép dĩa nhỏ dặt lên trên dĩa lớn. Hình ve dưới mô tả vói V 3 3 Dư liệu Vào từ file van bản chứa sô N N 15 . Kết quả Ghi ra file van bản trong đố mỗi dòng mớ tả một bước chuyển đĩa gồm bắt dần là sô hiệu cọc xttứt phát tiếp theo là sổ hiệu cọc chuyển đến ghi cách nhun ứ nhất một dấu trắng. Thí dụ 3 1 2 2 3 1 2 3 1 2 3 1 2 2 3 1 2 3 1 1 2 3 1 2 3 1 2 3 1 1 2 Gọi a b c là các số hiệu cọc. Lời giải quy nạp chuyển N đĩa từ a sang b lấy c làm trung gian cần phải xét cả hai tình huống b cạnh a theo chiểu kim đổng hồ và ngược lại xem hình vẽ dưới . 260 Chương 7. Một sô thí dụ c b cạnh a b không cạnh a Các thao tác chỉ được thực hiện khi N 0. Nếu b cạnh a theo chiều kim đồng hồ thì thực hiện Chuyến N-l đĩa từ a sang c lấy b làm trung gian. Chuyên 1 đĩa từ a sang b. Chuyển N-1 đỉa từ c sang b ỉấy a làm trung gian. trái lại thực hiộn Chuyển N-l đĩa từ a sang b lấy c làm trung gian. Chuyển 1 đĩa từ a sang c. Chuyển N-l đĩa từ b sang a lấy c làm trung gian. Chuyển 1 đĩa từ c sang b. Chuyển N-l đĩa từ a sang b lấy c làm trung gian. Lời giải được thực hiện bởi thủ tục đệ quy procedure MoveDfN a b c integer mà các lệnh trong nó không khác gì lời giải quy nạp trong đó thao tác chuyển 1 đĩa được thực hiên bằng một lệnh ghi một dòng lên file theo quy cách yêu cầu còn thao tác chuyển N-l đĩa được thực hiện bằng lời gọi chính nó với các giá trị tham số tương ứng. Sau khi đọc giá trị N và mở file chuẩn bị ghi chương trình bất đầu thực hiện việc chuyển đĩa bằng lời gọiMoveD N 1 2 3 Dưới đáy là toàn văn chương trình giải bài toán Chuyển đĩa Program MoveDisk Var N integer số đĩa I f text procedure MoveD N a b c integer chuyển N đĩa từ a sang b lâ ỵ c làm trung gian I begin if N 0 then begin if b a mod 3 1 then bcạnhal begin MoveD .