Форум: "Начинающим";
Текущий архив: 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("Èñïîëüçîâà 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("Èñïîëüçîâà 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; //áóòûëîê
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;
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;
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("Èñïîëüçîâà 37;û áóêâû:");
for Ch := #0 to #255 do begin
if not (Ch in D) then Continue;
Memo1.Lines.Add("Áóêâà: "" + Ch + "", Èñïîëüçîâàëàñ&# 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=(" ðàç"," ðàç"," ðàçà");
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