esercizi von turbo pascal v.5-7

su trasformazione di numeri da formato arabico a romano e viceversa

program romani;
(* trasforma formato numero arabico in romano *)
(* vengono forniti automaticamente in serie consecutiva *)
(* i numeri da 1 a valore minore di 3999 uno alla volta *)
(* possibile uscire da programma con 0 *)


program romani;
(* trasforma formato numero arabico in romano *)
(* vengono forniti automaticamente in serie consecutiva *)
(* i numeri da 1 a valore minore di 3999 uno alla volta *)
(* possibile uscire da programma con 0 *)

uses crt;
var numero,risposta,k:integer;
    romano,M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I,sigla:string;


procedure scrivinumero;  (* assegnazione automatica numero arabico *)
begin
clrscr;
numero:=numero+k;
romano:='';
end;

procedure calcola(nume:integer;sigla:string); (* trasformazione *)
var numex:integer;
begin
numex:=nume;
if numero>=numex then
repeat
begin
romano:=romano+sigla;
numero:=numero-nume;
end;
until numero<nume;
end;

procedure stampa;  (* visualizzazione singoli numeri in sucessione *)
begin
writeln(k,'..il numero romano=',romano);
writeln('premi invio per proseguire');
end;

procedure inizio;    (* procedure per trasformazione e stampa *)
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; readln;
end;

procedure scelta;    (* opzione per proseguire o finire *)
begin
clrscr;
write('per altra prova 1..per fine..0 =');readln(risposta);
end;

begin    (* programma principale *)
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
inizio;
k:=k+1;    (* viene fornita serie consecutiva numeri arabici *)
scelta;
until risposta=0;
end.