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

Цитата:
Сообщение от angvelem
Надеюсь не напутал:
Код:
  //obnilyaem massiv
//  for Ch := #0 to #255 do AStat[Ch] := 0;
  // так проще
  FillChar(AStat, SizeOf(AStat), 0);
...
    Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]) + ' ' + RaziliRazi(AStat[Ch]));

Спасибо большое, теперь будем разбираться и дальше читать книги.

Все работает.
Код:
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 = ['А'..'П', 'Р'..'Я', 'Ё'];
  battle: array[0..2] of string=(' ðàç',' ðàç',' ðàçà');
var
  F : File;
  Buff : array of Char;
  AStat : array[Char] of Integer;
  Ch : Char;
  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;

  //obnгlyaem 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(AStat[Ch]));

 end;
  end;


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

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

end.
Ответить с цитированием