unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
StringGrid2: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mas:array [1..1065]of byte;
mas2:array [1..1065]of integer;
massiv,massiv2:array [1..2,1..500] of byte;
massiv3,massiv4:array [1..2,1..500] of integer;
frequency:real;
k,i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
for i:=1 to 1065 do
mas2[i]:=0;
for i:=1 to 2 do
for j:=1 to 500 do
begin
massiv[i,j]:=0;
massiv2[i,j]:=0;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var kol,num:integer;
Str,s,ss:string;
x,y,n:integer; t:boolean;
begin
k:=0;
//записываем цифры из текста в массив
for i:=0 to Memo1.Lines.Count-1 do
begin
Str:=Memo1.Lines[i];
j:=1;
while (j<=Length(Str)) do
begin
if ((Str[j]<>' ')and(Str[j]<>',')and(Str[j]<>'.')and(Str[j]<>'-')and(Str[j]<>':')) then
begin
inc(k);s:=Copy(Str,j,2);mas[k]:=StrToInt(s); j:=j+2;
end
else inc(j);
end;
end;
num:=k;
//подсчитываем сколько раз каждая цифра встречается в исходном тексте
for i:= 1 to k do
begin
x:=mas[i];
kol:=0;
for j:= 1 to k do
if (x=mas[j]) then inc(kol);
massiv[1,i]:=x;
massiv[2,i]:=kol;
end;
for i:=1 to k do
begin
x:= massiv[1,i];
y:=i;
j:=1;
while j<=k do
begin
if (massiv[1,j]=x)and(j<>i) then
begin
massiv[1,j]:=0;
massiv[2,j]:=0;
end;
inc(j);
end;
end;
kol:=0;
for i:=1 to k do
if (massiv[1,i]<>0)then
begin
inc(kol);
massiv2[1,kol]:=massiv[1,i];
massiv2[2,kol]:=massiv[2,i];
end;
StringGrid1.ColCount:=kol;
for i:=1 to k do begin
StringGrid1.Cells[i-1,0]:=IntToStr(massiv2[1,i]);
StringGrid1.Cells[i-1,1]:=IntToStr(massiv2[2,i]);
frequency:=massiv2[2,i]/num;
StringGrid1.Cells[i-1,2]:=FloatToStrF(frequency,fffixed,5,4);
end;
//подсчет биграмм
for i:=0 to Memo1.Lines.Count-1 do
begin
Str:=Memo1.Lines[i];
j:=1;
while (j<=Length(Str)) do
begin
if ((Str[j]<>' ')and(Str[j]<>',')and(Str[j]<>'.')and(Str[j]<>'-')and(Str[j]<>':')and(Str[j+1]<>' ')) then
begin
s:=Copy(Str,j,5);
for n:=1 to 5 do
if ((s[n]=' ')or(s[n]=',')or(s[n]=':')or(s[n]='-'))then delete(s,n,1);
if length(s)=4
then begin inc(k); mas2[k]:=StrToInt(s);end;
j:=j+2;
end
else inc(j);
end;
end;
StringGrid2.ColCount:=k;
num:=k;
for i:= 1 to k do
begin
x:=mas2[i];
kol:=0;
for j:= 1 to k do
if (x=mas2[j]) then inc(kol);
massiv3[1,i]:=x;
massiv3[2,i]:=kol;
end;
for i:=1 to k do
begin
x:= massiv3[1,i];
y:=i;
j:=1;
while j<=k do
begin
if (massiv3[1,j]=x)and(j<>i) then
begin
massiv3[1,j]:=0;
massiv3[2,j]:=0;
end;
inc(j);
end;
end;
kol:=0;
for i:=1 to k do
if (massiv3[1,i]<>0)then
begin
inc(kol);
massiv4[1,kol]:=massiv3[1,i];
massiv4[2,kol]:=massiv3[2,i];
end;
StringGrid2.ColCount:=kol;
for i:=1 to k do begin
StringGrid2.Cells[i-1,0]:=IntToStr(massiv4[1,i]);
StringGrid2.Cells[i-1,1]:=IntToStr(massiv4[2,i]);
frequency:=massiv4[2,i]/num;
StringGrid2.Cells[i-1,2]:=FloatToStrF(frequency,fffixed,5,4);
end;
end;
end.