RosettaCodeData/Task/Middle-three-digits/Pascal/middle-three-digits.pascal

38 lines
890 B
Plaintext

program Midl3dig;
{$IFDEF FPC}
{$MODE Delphi} //result /integer => Int32 aka longInt etc..
{$ELSE}
{$APPTYPE console} // Delphi
{$ENDIF}
uses
sysutils; //IntToStr
function GetMid3dig(i:NativeInt):Ansistring;
var
n,l: NativeInt;
Begin
setlength(result,0);
//n = |i| jumpless abs
n := i-((ORD(i>0)-1)AND (2*i));
//calculate digitcount
IF n > 0 then
l := trunc(ln(n)/ln(10))+1
else
l := 1;
if l<3 then Begin write('got too few digits'); EXIT; end;
If Not(ODD(l)) then Begin write('got even number of digits'); EXIT; end;
result:= copy(IntToStr(n),l DIV 2,3);
end;
const
Test : array [0..16] of NativeInt =
( 123,12345,1234567,987654321,10001,-10001,
-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0);
var
i,n : NativeInt;
Begin
For i := low(Test) to High(Test) do
Begin
n := Test[i];
writeln(n:9,': ',GetMid3dig(Test[i]));
end;
end.