实验五子程序设计 实验目的与要求 实验目的掌握子程序设计的原理和方法, 重点掌握子程序编写和调用的过程以及堆栈操作和参数以及局部变量的概念。 实验要求(1 )编写子程序(2 )在主程序中调用子程序(3 )实现主程序与子程序的参数传递 示例例 汉诺塔问题的解决方案 1. 分析通常, 汉诺塔问题可分两种情况来解决。如果仅有一个盘子, 那么, 单盘可以简单地从原柱移到目标柱。如果盘数 NbrDisks 大于 1, 则顶上的( NbrDisks-1 ) 个稍小的盘子从目标柱移到备用柱,最大的盘子移到目标柱,最后,( NbrDisks-1 )个稍小的盘子从备用柱移到目标柱。每次( NbrDisks-1 ) 个盘子被移之后, 除了原柱、目标柱和备用柱的角色发生了变化之外,其他步骤将被重复执行。 2. 程序流程的伪代码如下。 Procedure Move(NbrDisks, Source, Destination, Spare); Begin If NbrDisks =1 Then display “ Move Disk from ”,Source, “ to” Destination ; 如果仅有一个盘子,那么,单盘可以简单地从原柱移到目标柱 Else Move(NbrDisks-1, Source, Spare, Destination) ; 顶上的( NbrDisks-1 )个稍小的盘子从目标柱移到备用柱 Move(1,Source, Destination, Spare) ; 最大的盘子移到目标柱 Move(NbrDisks-1, Spare, Destination, Source) ; ( NbrDisks-1 )个稍小的盘子从备用柱移到目标柱 End if; End procedure Move; Begin (main program) Prompt for and input Number; 提示输入 Number Move(Number, ‘A’,‘B’,‘C’); 调用 Move 子程序 End; 3. 运行情况程序运行情况如图 。图 例 程序运行结果 源程序清单; program to print instructions for "Towers of Hanoi" puzzle ; author: R. Detmer revised: 10/97 .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD include ; header file for input/output cr equ 0dh ; carriage return character Lf equ 0ah ; line feed .STACK 4096 ; reserve 4096-byte stack .DATA ; reserve storage for data prompt BYTE cr,Lf,'How many disks? ',0 number BYTE 16 DUP (?) message BYTE cr,Lf,'Move disk from spindle ' source
实验三 来自淘豆网m.daumloan.com转载请标明出处.