{ File:  romani2.pas }

{ Scopo: uso di ciclo while e di funzioni }

program NumeriRomaniDecrescenti;
{ Legge da tastiera una sequenza di caratteri fra 'I','V','X','L','C','D','M'
  (che rappresenta un numero romano) terminata da un punto, e stampa il
  numero intero corrispondente.
  Assume che le cifre romane compaiano SOLO in ordine decrescente
  (come ad esempio in MMCXXLII.)
  ma non ammette che vi sia una sottosequenza crescente
  (come ad esempio la sottosequenza CM in MCMX.).
}

var
  ch    : char;    { cifra romana corrente }
  somma : integer; { somma parziale delle cifre lette fino ad un certo punto }


  function Romano2Intero (ch : char) : integer;
  begin
    case ch of
      'I' : Romano2Intero := 1;
      'V' : Romano2Intero := 5;
      'X' : Romano2Intero := 10;
      'L' : Romano2Intero := 50;
      'C' : Romano2Intero := 100;
      'D' : Romano2Intero := 500;
      'M' : Romano2Intero := 1000;
    end { case }
  end; { Romano2Intero }


begin { NumeriRomaniDecrescenti }
  somma := 0;
  writeln('Inserisci un numero romano (senza spazi) terminato da un punto !');
  writeln('Le cifre (M,D,C,L,X,V,I) devono comparire in ordine decrescente!');
  read(ch);
  while ch <> '.' do
  begin
    somma := somma + Romano2Intero(ch);
    read(ch)
  end;
  writeln('Numero corrispondente : ', somma)
end. { NumeriRomaniDecrescenti }