************************************************************************
* File: romani2.for
************************************************************************
* Scopo: uso di ciclo while e di funzioni
************************************************************************

      INTEGER FUNCTION Romano2Intero (ch)
* Converte una cifra di un numero romano in un intero
      IMPLICIT NONE

* Dichiarazioni tipo parametri formali
*   parametri di input
      CHARACTER ch

      IF (ch .EQ. 'I') THEN
        Romano2Intero = 1
      ELSE IF (ch .EQ. 'V') THEN
        Romano2Intero = 5
      ELSE IF (ch .EQ. 'X') THEN
        Romano2Intero = 10
      ELSE IF (ch .EQ. 'L') THEN
        Romano2Intero = 50
      ELSE IF (ch .EQ. 'C') THEN
        Romano2Intero = 100
      ELSE IF (ch .EQ. 'D') THEN
        Romano2Intero = 500
      ELSE IF (ch .EQ. 'M') THEN
        Romano2Intero = 1000
      ELSE
        Romano2Intero = 0
      ENDIF

      END
*     Romano2Intero


      PROGRAM NumeriRomaniNonCrescenti
* Legge da tastiera una sequenza di caratteri fra 'I','V','X','L','C','D','M'
* (che rappresentano un numero romano) terminata da un punto, e stampa il
* numero intero corrispondente.
* Assume che le cifre romane compaiano SOLO in ordine non crescente.

      IMPLICIT NONE

* Dichiarazioni variabili
      CHARACTER car
      INTEGER somma

* Dichiarazioni funzioni esterne
      INTEGER Romano2Intero
*       parametri: (CHARACTER)

* Inizializzazione variabili
      DATA somma/0/

* Istruzioni esecutive
      WRITE (*,*) 'Inserisci le cifre di un numero romano, una per riga,
     $ terminando con un punto !'
      WRITE (*,*) 'Le cifre (M,D,C,L,X,V,I) devono comparire in ordine n
     $on crescente!'
      READ (*,100) car
      DO WHILE (car .NE. '.')
        somma = somma + Romano2Intero(car)
	READ (*,100) car
      ENDDO
      WRITE (*,*) 'Numero corrispondente : ', somma
      STOP

* Istruzioni FORMAT
100   FORMAT(A1)

      END