LINUX.ORG.RU

История изменений

Исправление bormant, (текущая версия) :

Для учета числа можно было сделать в более общем виде:

type
  TGrNum = (gnSingle, gnDual, gnPlural);
  TNumStr = array [TGrNum] of UnicodeString;

function GrN(n: Word): TGrNum;
begin
  Result := gnPlural;
  if not (n mod 100 in [5..20]) then
    case n mod 10 of
      1: Result := gnSingle;
      2..4: Result := gnDual;
    end;
end;

И использование:
const
  sDay:   TNumStr = ('день', 'дня', 'дней');
  sHour:  TNumStr = ('час', 'часа', 'часов');
  sMin:   TNumStr = ('минута', 'минуты', 'минут');
  sSec:   TNumStr = ('секунда', 'секунды', 'секунд');

...

  WriteLn(
         d, ' ', sDay[GrN(d)],
    ' ', hr, ' ', sHour[GrN(hr)],
    ' ', mn, ' ', sMin[GrN(mn)],
    ' ', sc, ' ', sSec[GrN(sc)]);

Исходная версия bormant, :

Для учета числа можно было сделать в более общем виде:

type
  TGrNum = (gnSingle, gnDual, gnPlural);
  TNumStr = array [TGrNum] of UnicodeString;

function GrN(n: Int64): TGrNum;
begin
  Result := gnPlural;
  if not (n mod 100 in [5..20]) then
    case n mod 10 of
      1: Result := gnSingle;
      2..4: Result := gnDual;
    end;
end;

И использование:
const
  sDay:   TNumStr = ('день', 'дня', 'дней');
  sHour:  TNumStr = ('час', 'часа', 'часов');
  sMin:   TNumStr = ('минута', 'минуты', 'минут');
  sSec:   TNumStr = ('секунда', 'секунды', 'секунд');

...

  WriteLn(
         d, ' ', sDay[GrN(d)],
    ' ', hr, ' ', sHour[GrN(hr)],
    ' ', mn, ' ', sMin[GrN(mn)],
    ' ', sc, ' ', sSec[GrN(sc)]);