unit laba05;
interface
{#4.5 Ввести в двух строках ввода (Edit) две строки из слов, разделенных пробелами.
После нажатия на кнопку (Button) в многострочный редактор (Memo) вывести три
числа: первое - сколько слов в двух строках совпадает, второе - сколько слов из
первой строки отсутствует во второй, третье - сколько слов во второй
отсутствуют в первой. Отдельно имеется CheckBox - если он выбран, анализируются
слова с учетом заглавных и строчных букв.}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
M = 100;
type
TArr = array[1..M] of String;
TForm1 = class(TForm)
edt1: TEdit;
edt2: TEdit;
btn1: TButton;
mmo1: TMemo;
mmo2: TMemo;
chk1: TCheckBox;
procedure GetWords(const aStr : String; var aArr : TArr; var aCnt : Integer);
procedure edt1change(Sender: TObject);
procedure edt2change(Sender: TObject);
procedure btn1click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s1,s2,s :string;
//Arr1, Arr2 : TArr;
// i, j, Cnt1, Cnt2, CntE : Integer;
implementation
{$R *.dfm}
procedure GetWords(const aStr : String; var aArr : TArr; var aCnt : Integer);
const
D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
Sw : String;
i, j, Len, LenW : Integer;
begin
Len := Length(aStr);
Sw := '';
LenW := 0;
aCnt := 0;
for i := 1 to Len do
if not (aStr[i] in D) then begin
Inc(LenW);
if (i = Len) or (aStr[i + 1] in D) then begin
Sw := Copy(aStr, i - LenW + 1, LenW);
j := 1;
while (j <= aCnt) and (aArr[j] <> Sw) do Inc(j);
if j > aCnt then begin
Inc(aCnt);
aArr[aCnt] := Sw;
end;
LenW := 0;
end;
end;
end;
procedure TForm1.edt1Change(Sender: TObject);
begin
s1:=edt1.text;
s1:=mmo1.Text;
end;
procedure TForm1.edt2Change(Sender: TObject);
begin
s2:=edt2.text;
s2:=mmo2.Text;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
Arr1, Arr2 : TArr;
i, j, Cnt1, Cnt2, CntE : Integer;
begin
GetWords(s1, Arr1, Cnt1);
GetWords(s2, Arr2, Cnt2);
CntE := 0;
for i:=1 to Cnt1 do begin
j := 1;
while (j <= Cnt2) and (Arr1[i] <> Arr2[j]) do Inc(j);
if j <= Cnt2 then Inc(CntE);
end;
ShowMessage(
'Количество совпадающих слов: ' + IntToStr(CntE)
+ #13#10'Количество слов первого текста, которых нет во втором тексте: ' + IntToStr(Cnt1 - CntE)
+ #13#10'Количество слов второго текста, которых нет в первом тексте: ' + IntToStr(Cnt2 - CntE)
);
end;
var
Arr1, Arr2 : TArr;
i, j, Cnt1, Cnt2, CntE : Integer;
begin
if chk1.Checked then begin
GetWords(s1, Arr1, Cnt1);
GetWords(s2, Arr2, Cnt2);
end else begin
GetWords(AnsiUpperCase(s1), Arr1, Cnt1);
GetWords(AnsiUpperCase(s2), Arr2, Cnt2);
end;
CntE := 0;
for i := 1 to Cnt1 do begin
j := 1;
while (j <= Cnt2) and (Arr1[i] <> Arr2[j]) do Inc(j);
if j <= Cnt2 then Inc(CntE);
end;
ShowMessage(
'Количество совпадающих слов: ' + IntToStr(CntE)
+ #13#10'Количество слов первого текста, которых нет во втором тексте: ' + IntToStr(Cnt1 - CntE)
+ #13#10'Количество слов второго текста, которых нет в первом тексте: ' + IntToStr(Cnt2 - CntE)
);
end.