program romani; (* genera tabella da formato arabico a romano entro limite da indicare*) (* visualizza valore arabico corrispondente a numero romano inserito *) uses crt; var numero,k,limite,arabico,a:integer; M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I,sigla,romax:string; romano1:array[1..3999] of string[10]; procedure scrivinumero; begin numero:=k;romano1[k]:='';end; procedure calcola(nume:integer;sigla:string); var numex:integer; begin numex:=nume; if numero>=numex then repeat begin romano1[k]:=romano1[k]+sigla; numero:=numero-nume; end; until numero<nume; end; (* procedure stampa; begin write(k,'=',romano1[k],'.. '); end; *) (* possibile visualizzare tabella generata *) procedure inizio; begin scrivinumero; calcola(1000,M);calcola(900,CM);calcola(500,D);calcola(400,CD); calcola(100,C);calcola(90,XC);calcola(50,L);calcola(40,XL); calcola(10,X);calcola(9,IX);calcola(5,V);calcola(4,IV);calcola(1,I); (*stampa;*)(* possibile visualizzare tabella generata *) end; begin M:='M';CM:='CM';D:='D';CD:='CD';C:='C';XC:='XC';L:='L'; XL:='XL';X:='X';IX:='IX';V:='V';IV:='IV';I:='I'; clrscr; repeat writeln('scrivi limite per trasformazione 10..100..400 <3999:');readln(limite); until limite< 4000; limite:=limite+1; (* generazione tabella da arabico a romano *) repeat inizio; k:=k+1; until k=limite; writeln; (* visualizzazione tabella da romano ad arabico *) repeat writeln('scrivi numero romano o 0 per finire:');readln(romax); for a:=1 to limite do begin if romax=romano1[a] then write(romano1[a],'=',a,'...'); end; until romax='0'; clrscr; end.
listato per trasformare numero romano in arabico scrivi limite per trasformazione 10..100..400 <3999: 100 scrivi numero romano o 0 per finire: C C=100...scrivi numero romano o 0 per finire: X X=10...scrivi numero romano o 0 per finire: L L=50...scrivi numero romano o 0 per finire: LX LX=60...scrivi numero romano o 0 per finire: XC XC=90...scrivi numero romano o 0 per finire: