{ File:  romani3.pas }

{ Scopo: uso di ciclo while e di funzioni }

program NumeriRomani;
{ Legge da tastiera una sequenza di caratteri fra 'I','V','X','L','C','D','M'
  (che rappresenta un numero romano corretto) terminata da un punto, e stampa
  il numero intero corrispondente.
  Assume che la sequenza di caratteri rappresenti un numero romano corretto.
  In particolare, ammette che via sia una sottosequenza di due "cifre" in
  ordine crescente
  (come ad esempio ls sottosequenza CM in MCMX.).
}

var
  corr,                { cifra romana corrente }
  succ     : char;     { cifra romana successiva }
  val_corr,            { valore intero della cifra corrente }
  val_succ,            { valore intero della cifra successiva }
  somma    : integer;  { somma parziale 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 { NumeriRomani }
  somma := 0;
  writeln('Inserisci un numero romano (senza spazi) terminato da un punto !');
  writeln('Il numero romano deve essere corretto');
  writeln('(cioe` una sequenza di cifre M,D,C,L,X,V,I in ordine corretto) ! ');
  read(corr);
  if corr <> '.' then
  begin
    val_corr := Romano2Intero(corr);
    read(succ);
    while succ <> '.' do
    begin
      val_succ := Romano2Intero(succ);
      if val_corr >= val_succ then
        somma := somma + val_corr
      else
        somma := somma - val_corr;
      corr := succ;
      val_corr := val_succ;
      read(succ)
    end; { while }
    somma := somma + val_corr
  end; { if }
  writeln('Numero corrispondente : ', somma)
end. { NumeriRomani }