000600 IDENTIFICATION DIVISION. 000700 PROGRAM-ID. HC04. 000800 AUTHOR. DANIELE GIACOMINI. 000900 DATE-WRITTEN. 1984-08-18. 001000 001100 001200 ENVIRONMENT DIVISION. 001300 001400 001500 DATA DIVISION. 001600 001700 001800 WORKING-STORAGE SECTION. 001900 002000 01 RECORD-STACKS. 002100 02 SAVEN OCCURS 100 TIMES PIC 99. 002200 02 SAVEP1 OCCURS 100 TIMES PIC 9. 002300 02 SAVEP2 OCCURS 100 TIMES PIC 9. 002400 002500 01 STACK-POINTER. 002600 02 SP PIC 99 VALUE 0. 002700 002800 01 VARIABILI-SCALARI. 002900 02 N PIC 99. 003000 02 P1 PIC 9. 003100 02 P2 PIC 9. 003200 003300 003400 PROCEDURE DIVISION. 003500 003600 MAIN. 003700 003800 DISPLAY "INSERISCI LA DIMENSIONE DELLA TORRE". 003900 DISPLAY "(DUE CARATTERI)". 004000 ACCEPT N. 004100 004200 DISPLAY "INSERISCI LA POSIZIONE INIZIALE ", 004250 "DELLA TORRE". 004300 DISPLAY "(UN CARATTERE)". 004400 ACCEPT P1. 004500 004600 DISPLAY "INSERISCI LA DESTINAZIONE DELLA TORRE". 004700 DISPLAY "(UN CARATTERE)". 004800 ACCEPT P2. 004900 005000 PERFORM HANOI. 005100 005200 STOP RUN. 005300 005400 HANOI. 005500 005600 IF N > 0 005700 THEN 005800* 005900* push per conservare le variabili di scambio 006000* 006100 COMPUTE SP = SP + 1, 006200 COMPUTE SAVEN(SP) = N, 006300 COMPUTE SAVEP2(SP) = P2, 006400* 006500* cambiamenti alle variabili di scambio prima 006600* della chiamata 006700* 006800 COMPUTE N = N - 1, 006900 COMPUTE P2 = 6 - P1 - P2, 007000* 007100* chiamata della procedura 007200* 007300 PERFORM HANOI, 007400* 007500* pop per recuperare i valori delle variabili 007550* di scambio 007600* 007700 COMPUTE P2 = SAVEP2(SP), 007800 COMPUTE N = SAVEN(SP), 007900 COMPUTE SP = SP - 1, 008000 008100 DISPLAY "MUOVI L'ANELLO ", N, 008150 " DAL PIOLO ", P1, 008200 " AL PIOLO ", P2, 008300 008400* 008500* push per conservare le variabili di scambio 008600* 008700 COMPUTE SP = SP + 1, 008800 COMPUTE SAVEN(SP) = N, 008900 COMPUTE SAVEP1(SP) = P1, 009000* 009100* modifica dei valori delle variabili di 009159* scambio 009200* 009300 COMPUTE N = N - 1, 009400 COMPUTE P1 = 6 - P1 - P2, 009500* 009600* chiamata della procedura 009700* 009800 PERFORM HANOI, 009900* 010000* pop per recuperare i valori delle variabili 010050* di scambio 010100* 010200 COMPUTE P1 = SAVEP1(SP), 010300 COMPUTE N = SAVEN(SP), 010400 COMPUTE SP = SP - 1. 010500