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

Цитата:
Файл, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза и т.д.
По примерам, найденым сдесь написал программу, считает все правельно, НО, как сделать что бы был вывод правильный Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, к — 3 раза ?
Код:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

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;
 i, BLenRes : Integer;
 razi : string;
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('Èñïîëüçîâà 37;û áóêâû:');
 for Ch := #0 to #255 do begin
   if not (Ch in D) then Continue;
   Memo1.Lines.Add('Буква: "' + Ch + '", использована = ' + IntToStr(AStat[Ch]));
 end;
end;

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