25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

280 Unità di Programma<br />

n dischi per spostare i suddetti dischi (ora sul piolo intermedio) sovrapponendoli al disco più<br />

grande appena disposto sul piolo finale. <strong>Il</strong> seguente programma è nulla di più che la semplice<br />

traduzione <strong>Fortran</strong> di questo procedimento:<br />

PROGRAM test_hanoi<br />

! Scopo: Risolvere il problema della torre di Hanoi con un assegnato<br />

! numero di dischi<br />

! MEMO:<br />

! + + + + + +<br />

! + + + + + +<br />

! _|+|_ + + + _|+|_ +<br />

! _|__+__|_ + + + _|__+__|_ +<br />

! _|____+____|_ + + + _|____+____|_ +<br />

! _|______+______|_+________+______ _____+_|______+______|_+______<br />

!<br />

!<br />

! + + + + + +<br />

! + + + + + +<br />

! + + + + ___+___ +<br />

! ____+____ + + + |___+___| +<br />

! _|____+____|_ + _|+|_ + ___|__+__|___ +<br />

! _|______+______|_+_____|__+__|___ _____+_|______+______|_+______<br />

!<br />

! OK ERRATO<br />

IMPLICIT NONE<br />

INTEGER :: n ! numero di dischi<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) "Con quanti dischi vuoi giocare? "<br />

READ(*,*) n<br />

PRINT*, "Soluzione:"<br />

CALL hanoi(n,1,3)<br />

CONTAINS<br />

RECURSIVE SUBROUTINE hanoi(n,starting,goal)<br />

IMPLICIT NONE<br />

INTEGER, INTENT (IN) :: n,starting,goal<br />

! la variabile "all" e’ la somma dei valori dei tre pioli 1+2+3<br />

! sicche’ il posto libero puo’ essere determinato sottraendo<br />

! i valori delle variabili "starting" e "goal" da questa somma.<br />

INTEGER :: free ! posti liberi<br />

INTEGER, PARAMETER :: all = 6<br />

IF (n > 0) THEN<br />

free = all-starting-goal

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!