unit maxlog; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Memo2: TMemo; ListBox1: TListBox; Memo3: TMemo; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit2Change(Sender: TObject); procedure Edit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function sb(k: char): Boolean; //проверяет, является символ буквой или цифрой begin if (ord(k)>=192) or (ord(k)=168) or (ord(k)=184) or (ord(k)=45) or ((ord(k)>=65) and (ord(k)<=90)) or ((ord(k)>=65) and (ord(k)<=122)) or ((ord(k)>=48) and (ord(k)<=57)) then sb:=true else sb:=false; end; procedure Inputtext; //Ввод текста из файла в невидимый компонент ListBox1 begin Form1.ListBox1.Items.LoadFromFile(Form1.Edit1.Text); end; Procedure ShowAll; //Вывод в Memo1 всего текста var z: integer; //количество строк во всём тексте p: integer; //номер строки begin z:=Form1.ListBox1.Count; Form1.Memo1.Clear; for p:=1 to z do Form1.Memo1.Lines.Add(Form1.ListBox1.Items[p-1]); end; procedure SelectString; //Вывод в Memo2 одной строки с номером в Edit2 var n: integer; //номер строки z: integer; //количество строк в тексте s: string; //строка, номер которой указан в Edit2 begin z:=Form1.ListBox1.Count; if Form1.Edit2.Text='' then Form1.Edit2.Text:='1'; n:=StrToInt(Form1.Edit2.Text); if (n=0) or (n>z) then begin ShowMessage('Файл содержит только'+IntToStr(z)+' строк. '); Form1.Edit2.Text:=''; Form1.Edit2.SetFocus; Exit; end; s:=Form1.ListBox1.Items[n-1]; Form1.Memo2.Clear; Form1.Memo2.Lines.Add(s); end; procedure maxlogos; //вывод в Memo3 самого длинного слова из заданной строки type w=record leng: integer; //длина слова в символах mean: string; //слово end; var n: integer; //номер строки z: integer; //количество строк в тексте s: string; //строка, номер которой указан в Edit2 m: array[1..1000] of w; //массив слов i: integer; //номер слова в строке j: integer; //номер символа в строке r: integer; max: integer; //номер самого длинного слова в строке begin z:=Form1.ListBox1.Count; if Form1.Edit2.Text='' then Form1.Edit2.Text:='1'; n:=StrToInt(Form1.Edit2.Text); if (n=0) or (n>z) then begin ShowMessage('Файл содержит только'+IntToStr(z)+' строк. '); Form1.Edit2.Text:=''; Form1.Edit2.SetFocus; Exit; end; s:=Form1.ListBox1.Items[n-1]; for i:=1 to 255 do begin m[i].leng:=0; m[i].mean:=''; end; i:=0; j:=1; while (j<=length(s)) do begin i:=i+1; while sb(s[j]) do begin m[i].mean:=m[i].mean+s[j]; m[i].leng:=m[i].leng+1; j:=j+1; end; while not sb(s[j]) do j:=j+1; end; max:=1; for r:=2 to i do if m[r].leng>m[max].leng then max:=r; Form1.Memo3.Clear; Form1.Memo3.Lines.Add(m[max].mean); Form1.Memo3.Lines.Add(''); Form1.Memo3.Lines.Add('в строке № '+ IntToStr(n)+ ' - всего слов '+IntToStr(i)); Form1.Memo3.Lines.Add('Самое длинное слово № '+ IntToStr(max)+ ' содержит символов '+IntToStr(m[max].leng)); end; procedure maxoffer; //вывод в Memo3 самого длинного предложения из строки type w=record leng: integer; //длина предложения в символах mean: string; //слово end; var n: integer; //номер строки z: integer; //количество строк в тексте s: string; //строка, номер которой указан в Edit2 m: array[1..1000] of w; //массив предложений i: integer; //номер предложения в строке j: integer; //номер символа в строке r: integer; max: integer; //номер самого длинного предложения в строке begin z:=Form1.ListBox1.Count; if Form1.Edit2.Text='' then Form1.Edit2.Text:='1'; n:=StrToInt(Form1.Edit2.Text); if (n=0) or (n>z) then begin ShowMessage('Файл содержит только '+IntToStr(z)+' строк. '); Form1.Edit2.Text:=''; Form1.Edit2.SetFocus; Exit; end; s:=Form1.ListBox1.Items[n-1]; for i:=1 to 255 do begin m[i].leng:=0; m[i].mean:=''; end; i:=0; j:=1; while (j<=length(s)) do begin i:=i+1; while (ord(s[j])<>46) and (j<=length(s)) do begin m[i].mean:=m[i].mean+s[j]; if (not sb(s[j])) and (sb(s[j+1])) then m[i].leng:=m[i].leng+1; j:=j+1; end; m[i].mean:=m[i].mean+s[j]; j:=j+1; end; for r:=1 to i do while (pos(' ',m[r].mean)=1) and (length(m[r].mean)>0) do delete(m[r].mean,1,1); //удаляет пробелы в начале предложения max:=1; for r:=2 to i do if m[r].leng>m[max].leng then max:=r; Form1.Memo3.Clear; Form1.Memo3.Lines.Add(m[max].mean); Form1.Memo3.Lines.Add(''); Form1.Memo3.Lines.Add('в строке № '+ IntToStr(n)+ ' - всего предложений '+IntToStr(i)); Form1.Memo3.Lines.Add('Самое длинное предложение № '+ IntToStr(max)+ ' содержит слов '+IntToStr(m[max].leng)); end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Inputtext; ShowAll; Memo1.Visible:=true; Memo2.Visible:=False; Memo3.Visible:=False; end; procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.Visible:=False; Memo1.Visible:=False; Memo2.Visible:=False; Memo3.Visible:=False; end; procedure TForm1.Button2Click(Sender: TObject); begin Inputtext; SelectString; Memo1.Visible:=False; Memo2.Visible:=True; Memo3.Visible:=False; end; procedure TForm1.Button3Click(Sender: TObject); begin Inputtext; maxlogos; Memo1.Visible:=False; Memo2.Visible:=False; Memo3.Visible:=True; end; procedure TForm1.Button4Click(Sender: TObject); begin Inputtext; maxoffer; Memo1.Visible:=False; Memo2.Visible:=False; Memo3.Visible:=True; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9': ; #8 : ; else Key :=Chr(0); end; end; procedure TForm1.Edit2Change(Sender: TObject); begin Form1.Memo2.Clear; Form1.Memo3.Clear; end; procedure TForm1.Edit1Change(Sender: TObject); begin Form1.Memo1.Clear; Form1.Memo2.Clear; Form1.Memo3.Clear; end; end.