/* File:  romani3.c */
/* Time-stamp: "2001-03-21 18:43:38 calvanes" */
/* Scopo: semplice esempio uso di funzioni */

/* Legge da tastiera una sequenza di caratteri fra 'I','V','X','L','C','D','M'
   (che rappresenta un numero romano corretto) terminata da \n, e stampa il
   numero intero corrispondente.
   Assume che la sequenza di caratteri rappresenti un numero romano corretto.
   In particolare, ammette che vi sia una sottosequenza di due "cifre" in
   ordine crescente (come ad esempio la sottosequenza CM in MCMX).
*/

#include <stdio.h>


int Romano2Intero(char ch)
{
  int ris;

  switch (ch) {
  case 'I': ris = 1;    break;
  case 'V': ris = 5;    break;
  case 'X': ris = 10;   break;
  case 'L': ris = 50;   break;
  case 'C': ris = 100;  break;
  case 'D': ris = 500;  break;
  case 'M': ris = 1000; break;
  default: ris = -1;
  }

  return ris;
}


int main(void)
{
  char corr, succ;
  int val_corr, val_succ;
  int somma = 0;

  printf("Inserisci un numero romano (senza spazi) terminato da '\\n'\n");
  printf("Il numero romano deve essere corretto!\n");
  printf("(cioe' una sequenza di cifre M,D,C,L,X,V,I in ordine corretto)\n");
  scanf("%c", &corr);
  if (corr != '\n') {
    val_corr = Romano2Intero(corr);
    scanf("%c", &succ);
    while (succ != '\n') {
      val_succ = Romano2Intero(succ);
      if (val_corr >= val_succ)
        somma = somma + val_corr;
      else somma = somma - val_corr;
      corr = succ;
      val_corr = val_succ;
      scanf("%c", &succ);
    }
    somma = somma + val_corr;
  }
  printf("Numero corrispondente: %d\n", somma);

  return 0;
}