Программирование в среде Delphi. Практикум к лабораторным работам по курсу «Информатика», страница 8

{$R *.dfm}

Type

massiv = array [1..30] of string;

var

A : massiv;   //  массив строк

N  : integer;  // Размер массива

// функция подсчета количества символов "!?"

Function KolS(stroka:string): integer;

var i : integer;

begin

Result:=0;

for i:=1 to Length(stroka)-1 do

if (stroka[i]='!')and(stroka[i+1]='?') then

Result:=Result+1;

end;

// процедура удаления из строки символов "/"

Procedure Udal(var stroka:string);

var i : integer;

begin

i:=1;

while i<=Length(stroka) do

if  stroka[i] = '/' then

begin

delete(stroka,i,1);

end

else

i:=i+1;

end;

// процедура формирования заголовков таблиц

procedure TForm1.FormCreate(Sender: TObject);

var  i : integer;

begin

// устанавливаем ширину столбцов таблиц

StringGrid1.ColWidths[0]:=30;

StringGrid2.ColWidths[0]:=30;

StringGrid1.ColWidths[1]:=120;

StringGrid2.ColWidths[1]:=120;

for i:=1 to 10 do

begin

StringGrid1.Cells[0,i-1]:= IntToStr(i);

StringGrid2.Cells[0,i-1]:= IntToStr(i);

end;

end;

// процедура закрытие приложения

procedure TForm1.Button4Click(Sender: TObject);

begin

Close

end;

// процедура обработки кнопки "О программе"

procedure TForm1.Button3Click(Sender: TObject);

begin

Application.MessageBox('Программу выполнил студент '+

'группы С-12 Суриков Н.Е.','О программе')

end;

// процедура обработки кнопки "Решение"

procedure TForm1.Button1Click(Sender: TObject);

var i : integer;

Kol : integer;   // количество

begin

for i:=1 to N do

A[i]:=StringGrid1.Cells[1,i-1];

Kol:=0;

for i:=1 to N do

begin

Kol:=Kol+KolS(A[i]);

Udal(A[i]);

StringGrid2.Cells[1,i-1]:=A[i];

end;

Edit2.Text:=IntToStr(Kol);

end;

// процедура установки размера массива строк

procedure TForm1.Button2Click(Sender: TObject);

begin

n:=StrToInt(Edit1.Text);

StringGrid1.RowCount:=n;

StringGrid2.RowCount:=n;

end;

end.

Рис. 2.10. Простейшие приемы работы со строками

2.12. Простейшие приемы работы с многострочным текстом

Разработать приложение, позволяющее выделять слова, имеющих размер пять букв, в многострочном тексте. В главной форме должны находиться многострочный редактор Memo, кнопка «Решение», кнопка «О программе», кнопка «Выход».

При нажатии кнопки «Решение» программа должна обработать набранный текст, найти необходимые слова и поместить результат в аналогичный многострочный редактор.

Вставляем в пустую форму компонент Memo1 для ввода текста, три кнопки Button1-Button3 для запуска соответствующих процедур, компонент Memo2 для вывода результирующего текста.

Форма приложения с исходными данными и результатами расчета показана на рис. 2.11.

Рис. 2.11. Простейшие приемы работы с           многострочным текстом

Формируем процедуры обработки нажатия кнопок и компилируем программу. Текст модуля приводим ниже:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms, Dialogs, Grids, StdCtrls, ExtCtrls, TeeProcs, TeEngine;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label2: TLabel;

Label3: TLabel;

Memo1: TMemo;

Memo2: TMemo;

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

var N  : integer;

// процедура закрытие приложения

procedure TForm1.Button3Click(Sender: TObject);

begin

Close

end;

// процедура обработки кнопки "О программе"

procedure TForm1.Button2Click(Sender: TObject);

begin

Application.MessageBox('Программу выполнил студент '+

'группы Д-11 Ульянов Н.С.','О программе')

end;

// процедура обработки кнопки "Решение"

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k,kk : integer;

Stroka1, Stroka2  : string;

begin

N:=Memo1.Lines.Count; // число строк в исходном тексте

for i:=1 to N do

begin

Stroka1:=Memo1.Lines[i-1]+' ';  // считываем текущую строку

k:=0;

Stroka2:='';  // очищаем строку переноса слов

kk:=Length(Stroka1);

for j:=1 to kk do

if Stroka1[j]<>' ' then k:=k+1

else

begin

if (k=5) and (Stroka1[j]=' ') then

Stroka2:=Stroka2+Stroka1[j-5]+Stroka1[j-4]+

Stroka1[j-3]+Stroka1[j-2]+Stroka1[j-1]+' ';

k:=0;

end;