esercizi von turbo pascal v.5-7

su trasformazione di numeri da formato arabico a romano e viceversa

rogram romani;
(* genera tabella da formato arabico a romano entro limite da indicare*)
(* visualizza valore arabico corrispondente a numero romano inserito *)
uses crt;

 

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.