
10.12.2011, 23:06
|
Прохожий
|
|
Регистрация: 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.
|