esercizi von turbo pascal v.5-7

su trasformazione di numeri da formato arabico a romano e viceversa

program romani;
(* trasforma formato arabico in romano per serie consecutiva automatica*)
(* visualizza tabella tradotta *)
(* permette traduzione singolo valore da inserire *)

uses crt;
var numero,k,limite,arabico:integer;
    M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I,sigla: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;

procedure inizio;    (* genera tabella valori tradotti *)
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;
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<3999;
limite:=limite+1;
repeat
inizio;
k:=k+1;
until k=limite;
writeln;
(* confronta numero inserito con tabella tradotta *)
write(' scrivi numero arabico<=limite:');readln(arabico);
for k:=1 to limite do
begin
if arabico=k then writeln(romano1[k]);
end;
readln;
clrscr;
end.