System Delphi

//
// Asagidaki fonksiyonlari programinizda uygun yerlere ekleyiniz.
//
Function IntToRoman(Sayi : Integer) : String;
Var
Sonuc : String;
Begin
Sonuc := '';
If (Sayi>0) And (Sayi<4000) Then Begin
Sonuc:=Copy('MMM',1,Sayi Div 1000);
Sayi:=Sayi Mod 1000;
If Sayi>=900 Then Begin
Sonuc:=Sonuc+'CM';
Sayi:=Sayi-900;
End
Else Begin
If Sayi>=500 Then Begin
Sonuc:=Sonuc+'D';
Sayi:=Sayi-500;
End
Else If Sayi>=400 Then Begin
Sonuc:=Sonuc+'CD';
Sayi:=Sayi-400;
End;
Sonuc:=Sonuc+Copy('CCC',1,Sayi Div 100);
Sayi:=Sayi Mod 100;
End;
If Sayi>=90 Then Begin
Sonuc:=Sonuc+'XC';
Sayi:=Sayi-90;
End
Else Begin
If Sayi>=50 Then Begin
Sonuc:=Sonuc+'L';
Sayi:=Sayi-50;
End
Else If Sayi>=40 Then Begin
Sonuc:=Sonuc+'XL';
Sayi:=Sayi-40;
End;
Sonuc:=Sonuc+Copy('XXX',1,Sayi Div 10);
Sayi:=Sayi Mod 10;
End;
If Sayi=9 Then Sonuc:=Sonuc+'IX'
Else Begin
If Sayi>=5 Then Begin
Sonuc:=Sonuc+'V';
Sayi:=Sayi-5;
End
Else If Sayi=4 Then Begin
Sonuc:=Sonuc+'IV';
Sayi:=Sayi-4;
End;
Sonuc:=Sonuc+Copy('III',1,Sayi);
End;
End;
Result:=Sonuc;
End;
Function RomanToInt(Roman : String) : Integer;
Function HarfKac(Harf : Char) : Integer;
Begin
Case Harf Of
'I' : Result:=1;
'V' : Result:=5;
'X' : Result:=10;
'L' : Result:=50;
'C' : Result:=100;
'D' : Result:=500;
'M' : Result:=1000;
Else Result:=-1;
End;
End;
Function Besler(Harf : Char) : Boolean;
Begin
Result:=Harf In ['V','L','D'];
End;
Var
Hane : Byte;
Sayi,Deger : Integer;
Kalan : Integer;
Begin
Hane:=Length(Roman);
Sayi:=0;
Kalan:=HarfKac(Roman[Hane]);
While Hane>0 Do
Begin
Deger:=HarfKac(Roman[Hane]);
If Deger<0 Then Begin
RomantoInt := -1;
Exit;
End;
If Deger>=Kalan Then Begin
Inc(Sayi,Deger);
Kalan:=Deger;
End
Else Begin
If Besler(Roman[Hane]) Then Begin
Result:=-1;
Exit;
End;
If Kalan Div Deger>10 Then Begin
Result:=-1;
Exit;
End;
Dec(Sayi,Deger);
End;
Dec(Hane);
End;
Result:=Sayi;
End;
//
// Kolay gelsin.
//
// Hakan HAMURCU
//
// hamurcu@delphiturk.com
//