Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.004 c
2-1323292381
popopo
2011-12-08 01:13
2012.03.25
Построение древа выражения


2-1323332433
TComponent
2011-12-08 12:20
2012.03.25
Вопрос по WinExec


2-1323635690
Bobermaner
2011-12-12 00:34
2012.03.25
Работа с COM-портом.


15-1322425802
Юрий
2011-11-28 00:30
2012.03.25
С днем рождения ! 28 ноября 2011 понедельник


3-1252904459
ruslan_as
2009-09-14 09:00
2012.03.25
dbf файл - не видно чисел





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский