Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.25;
Скачать: CL | DM;

Вниз

Статистика использования символов в файле   Найти похожие ветки 

 
xrumas ©   (2011-12-10 13:02) [0]

Файл, содержащая произвольный русский текст, состоит не более чем из 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("Èñïîëüçîâà&#2 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.


В вывод нужно добавить что то вроде такого, но как вставить это вывод не знаю:
if mod 2,3,4 then raza
if mod 5,6,7,8,9 then raz
if 4uslo mod 10=1 then raz


 
Dimka Maslov ©   (2011-12-10 15:14) [1]

Двойственное число, которое выродилось в большинстве славянских языков, тем не менее существует в форме использования различных падежей множественного числа, и имеет строго формализуемые правила:
Если числительное оканчивается на 2, 3 или 4 - используется форма именительного падежа множественного числа. Если числительное оканчивается на 1 - именительный падеж единственного числа. Но, если числительное оканчивается на 11, 12, 13 или 14 - используется родительный падеж множественного числа, как и во всех остальных случаях

Например:

1 раз
2 раза
3 раза
4 раза
5 раз
6 раз
..
10 раз
11 раз
12 раз
13 раз
14 раз
15 раз
....
20 раз
21 раз
22 раза
23 раза
24 раза


 
Юрий Зотов ©   (2011-12-10 16:11) [2]


> xrumas ©   (10.12.11 13:02)  

Что-то вроде этого:

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;


 
xrumas ©   (2011-12-10 16:51) [3]


> Юрий Зотов ©   (10.12.11 16:11) [2]
>
> > xrumas ©   (10.12.11 13:02)  
>
> Что-то вроде этого:
>
> 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;


Что то не получаеться вашу функцию встроить правильно в программу, или 0 выводит или просто пробелы.


 
Юрий Зотов ©   (2011-12-10 17:03) [4]


> xrumas ©   (10.12.11 16:51) [3]

Наверное, надо показать, как Вы ее встраиваете? Тем более, что ноль она выводить не может в принципе.


 
xrumas ©   (2011-12-10 17:35) [5]

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("Èñïîëüçîâà&#2 37;û áóêâû:");
 for Ch := #0 to #255 do begin
  if not (Ch in D) then Continue;

   Memo1.Lines.Add("Áóêâà: "" + Ch + "", Èñïîëüçîâàëàñ&# 252; = " + IntToStr(AStat[Ch])+" "+Inttostr(RaziliRazi(N));

 end;
end;

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

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

end;
end.


 
xrumas ©   (2011-12-10 18:03) [6]

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


 
Inovet ©   (2011-12-10 19:48) [7]

> [6] xrumas ©   (10.12.11 18:03)
> Букыв

Грамматически правильно в современном языке - букаф. Многа букаф. Низнаю букаф.


 
xrumas ©   (2011-12-10 19:55) [8]


> Грамматически правильно в современном языке - букаф. Многа
> букаф. Низнаю букаф.


Не суть, исправленно после копипаста.


 
Sha ©   (2011-12-10 20:09) [9]

function RussianGrammarEnding(n: integer): integer;
begin;
 Result:=0;                                //бутылок
 n:=abs(n) mod 100;
 if (n>=11) and (n<=14) then exit;
 n:=n mod 10;
 if n=1 then Result:=1                     //бутылка
 else if (n>=2) and (n<=4) then Result:=2; //бутылки
 end;


 
xrumas ©   (2011-12-10 21:58) [10]


> 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;
>
>

Не получаеться так, всегда выводит раз.


 
Sha ©   (2011-12-10 22:18) [11]

это потому, что надо выводить бутылки
procedure TForm1.Button4Click(Sender: TObject);
const
 battle: array[0..2] of string=(" бутылок"," бутылка"," бутылки");
var
 i: integer;
begin;
 for i:=0 to 100 do Memo1.Lines.Add(IntToStr(i)+battle[RussianGrammarEnding(i)]);
 end;


 
Sha ©   (2011-12-10 22:20) [12]

battle - это все WarCraft, блин


 
xrumas ©   (2011-12-10 22:26) [13]


> это потому, что надо выводить бутылки
> procedure TForm1.Button4Click(Sender: TObject);
> const
>  battle: array[0..2] of string=(" бутылок"," бутылка","
> бутылки");
> var
>  i: integer;
> begin;
>  for i:=0 to 100 do Memo1.Lines.Add(IntToStr(i)+battle[RussianGrammarEnding(i)]);
>
>  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 Raz(n: integer): integer;
//    function RaziliRazi(N: cardinal): string;

   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.Raz(n: integer): integer;
begin;
Result:=0;                                //&#225;&#243;&#242;&#251;&#235;&#238;&#234;
n:=abs(n) mod 100;
if (n>=11) and (n<=14) then exit;
n:=n mod 10;
if n=1 then Result:=1                     //&#225;&#243;&#242;&#251;&#235;&#234;&#224;
else if (n>=2) and (n<=4) then Result:=2; //&#225;&#243;&#242;&#251;&#235;&#234;&#232;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
 //buffer, inache zavisaet
BLenMax = 100000;
 //mnozhestvo russkih bukv
 D = ["&#192;".."&#207;", "&#208;".."&#223;", "&#168;"];
 battle: array[0..2] of string=(" &#240;&#224;&#231;"," &#240;&#224;&#231;"," &#240;&#224;&#231;&#224;");
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(
     "&#244;&#224;&#233;&#235; &#241; &#242;&#224;&#234;&#232;&#236; &#232;&#236;&#229;&#237;&#229;&#236; &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;",
     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("&#200;&#241;&#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#2 37;&#251; &#225;&#243;&#234;&#226;&#251;:");
 for Ch := #0 to #255 do begin
  if not (Ch in D) then Continue;

   Memo1.Lines.Add("&#193;&#243;&#234;&#226;&#224;: "" + Ch + "", &#200;&#241;&#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#235;&#224;&#241;&# 252; = " + IntToStr(AStat[Ch])+" "+battle[raz(i)]);

end;
 end;

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

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

end.


 
Sha ©   (2011-12-10 22:27) [14]

пример [11] для кого?


 
Jeer ©   (2011-12-10 22:45) [15]


> Файл, содержащая
..
> найденым сдесь написал


Спасибо :
Cегодня я буду спать тоже спокойно, т.к. есс-ный отбор продолжает работать и это правильно.


> Ответ должен приводиться в грамматически правильной форме


Вопрос - тем более.


 
xrumas ©   (2011-12-10 22:55) [16]


> > Файл, содержащая
> ..
> > найденым сдесь написал
>
>
> Спасибо :
> Cегодня я буду спать тоже спокойно, т.к. есс-ный отбор продолжает
> работать и это правильно.
>
>
> > Ответ должен приводиться в грамматически правильной форме
>
>
> Вопрос - тем более.
>
>


Ок, грамарнази, ваше мнение очень интересно.


 
Плохиш ©   (2011-12-10 23:00) [17]

Ты выпендривайся, выпендривайся. Проблема-то у тебя.


 
xrumas ©   (2011-12-10 23:10) [18]


> пример [11] для кого?


Блин, ларчик то просто открывался, по вашему примеру сделал первоначальную функцию, которая была у меня.

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=(" &#240;&#224;&#231;"," &#240;&#224;&#231;"," &#240;&#224;&#231;&#224;");
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.



Страницы: 1 вся ветка

Текущий архив: 2012.03.25;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.007 c
11-1242542465
hroot
2009-05-17 10:41
2012.03.25
Anchors &amp; wsMaximized


2-1323120597
mnj
2011-12-06 01:29
2012.03.25
Использование TFileStream для текста и бинарного файла


15-1322644551
И. Павел
2011-11-30 13:15
2012.03.25
Как праильно задать права на таблицу (MS SQL SERVER 2005)?


6-1254316524
Абрамов Игорь
2009-09-30 17:15
2012.03.25
Отправка почты Exchange Server


2-1323115734
Германн
2011-12-06 00:08
2012.03.25
БД Firebird &amp; Delphi