Показать сообщение отдельно
  #8  
Старый 10.12.2011, 22:14
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Довольно старая задача. Имеется простое решение, пишутся в массив все окончания и подставляются в соответствии последней цифры.

Предложили вставить вот такую функцию, но с ней всегда пишет раз

Код:
function EhRazEscheRazEscheMnogoMnogoRaz(N: cardinal): string;
begin
 if (N in [5..21]) or ((N mod 10) in [0, 1, 5..9]) then
   Result := 'раз';
 else
   Result := 'раза';
end;

Вот что получилось, может где ошибься.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  
private
  function RaziliRazi(N: cardinal): string;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.RaziliRazi(N: cardinal): string;
begin
 if (N in [5..21]) or ((N mod 10) in [0, 1, 5..9]) then
   Result := 'раз'
 else
   Result := 'раза';
end;


procedure TForm1.Button1Click(Sender: TObject);
const
  //buffer, inache zavisaet
 BLenMax = 100000;
  //mnozhestvo russkih bukv
  D = ['À'..'Ï', 'Ð'..'ß', '¨'];
var
  F : File;
  Buff : array of Char;
  AStat : array[Char] of Integer;
  Ch : Char;
  n, i, BLenRes : Integer;

begin
  if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath( Application.ExeName )
  ;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(Opendialog1.FileName) then begin
    MessageDlg(
      'нет файла',
      mtWarning, [mbOk], 0
    );
    Exit;
  end;

  //obnilyaem massiv
  for Ch := #0 to #255 do AStat[Ch] := 0;
  SetLength(Buff, BLenMax);
  
  //Open and read selected file
  AssignFile(F, OpenDialog1.FileName);
  Reset(F, 1);
  while not Eof(F) do begin
    BlockRead(F, Pointer(Buff)^, BLenMax, BLenRes);
    for i := 0 to BLenRes - 1 do begin
      Ch := AnsiUpperCase(Buff[i])[1];
      Inc(AStat[Ch]);
    end;
  end;
  CloseFile(F);
 
  //vivod v memo1
  Memo1.Lines.Add('Èñïîëüçîâàíû áóêâû:');
  for Ch := #0 to #255 do begin
   if not (Ch in D) then Continue;

    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch])+' '+RaziliRazi(N));

  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
form1.close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
end;

end.
Изображения
Тип файла: jpg Image 1.jpg (92.1 Кбайт, 3 просмотров)
Ответить с цитированием