11.12.2006, 19:21
общий
это ответ
Здравствуйте, Whitesnake!
Процедура,конечно,стандартная,но пришлось не много поломать голову.Вообще-то,мне нравится решать такие головоломки.
Так как у вас не было оговорки,какие буквы в словах вводятся,то я взял по умолчанию,что они все равны.
Другими словами говоря,алгоритм работает верно при одинаковых введённых буквах в слове!
Код получился не много запутанным,но я думаю вы разберётесь.Кое-где я дал описания.
И ещё,не забудьте добавить обработку исключений по нажатию запускающей кнопки,если в окнах
ничего ни введено!
Я ещё добавил в код процедуру упорядочивания по пробелу,чтобы между словами был только один пробел.
Одним словом смотрите приложение.
Удачи!
Приложение:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject); //для запуска операции
procedure Button1Click(Sender: TObject); //для упорядочивания по пробелу
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:=‘Введите номер‘+#13+‘ k-й позиции‘;
Label2.Caption:=‘Порядковый номер‘+#13‘ слова‘;
Label3.Caption:=‘ Количество‘+#13+‘повторяющихся‘+#13+‘ символов‘;
Label4.Caption:=‘Вывести результат‘;
Label5.Caption:=‘Ведите текст‘;
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:Integer;
s:string;
begin
s:=Edit1.Text;
s:=Trim(s);
j:=Length(s);
i:=1;
while i<=j do
begin
if s[i]=#32 then
while s[i+1]=#32 do
begin
delete(s,i+1,1);
j:=j-1;
end;
i:=i+1;
end;
Edit1.Text:=s;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,Sl,k,Sp:Integer;
s:string;
begin
s:=Edit1.Text;
s:=Trim(s);
j:=Length(s);
k:=StrToInt(Edit2.Text);
j:=(j+k)-j;
Sl:=0;
for i:=1 to j do
if s[i]=#32 then
begin
Sl:=Sl+1;
end;
if s[j]=#32 then
begin
Sl:=Sl-1;
end;
Sp:=0;
while s[j]<>#32 do //вся суть кода здесь
begin
begin
while s[j]=s[j+1] do
begin
j:=j+1;
end;
j:=j+1;
end;
end;
j:=j-1;
begin
while s[j]=s[j-1] do
begin
while s[j]<>#32 do
begin
j:=j-1;
Sp:=Sp+1;
end;
end;
Edit4.Text:=IntToStr(Sp);
end;
Edit3.Text:=IntToStr(Sl+1);
end;
end.