Добавлено (02.05.13, 21:44)
---------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
CB: TComboBox;
ST: TStaticText;
Button1: TButton;
GroupBox1: TGroupBox;
Memo1: TMemo;
GroupBox2: TGroupBox;
LB: TListBox;
BitBtn1: TBitBtn;
procedure CBChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CBChange(Sender: TObject);
begin
if CB.Text='Задача 1' then
begin
Memo1.Lines.Clear;
LB.Items.Clear;
ST.Caption:='1.Удалить из текста символ "?", если количество символов "*" больше 4.';
Memo1.Enabled:=true;
end;
if CB.Text='Задача 2' then
begin
ST.Caption:='2.Если первая буква последнего слова и первая буква слова минимальной длины одинаковы, то поменять их местами. В противном случае удалить последнее слово.';
Memo1.Lines.Clear;
LB.Items.Clear;
Memo1.Enabled:=true;
end;
button1.Enabled:=true;
end;
Добавлено (02.05.13, 21:46)
---------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
s,s_min,s_perv,s1:string;
i,n,ns,d_min,ds,kol_min,n_min, cntzv:integer;
begin
cntzv:=0; //кол-во звёзд
if CB.ItemIndex=0 then //задача 1
begin
s:=Memo1.text;
n:=length(s);
i:=1;
While i<=n do
begin
if s='*' then
begin
cntzv:=cntzv+1;
end;
inc(i);
end;
if cntzv>=4 then
begin
s:= stringreplace(s, '?', '',[rfReplaceAll, rfIgnoreCase]);
end;
LB.Items.Add(s);
end;
if CB.ItemIndex=1 then // задача 2
// слово минимальной длины и его длину
begin
s:=Memo1.Lines[0]+Memo1.Lines[1]+Memo1.Lines[2];
n:=length(s);
i:=1;
ns:=1;
d_min:=100;
For i:=1 to n do
If ((S=' ') or (S='.') or (S=',')) then
begin
if ((s=' ') and (s[i-1]=','))
then
ns:=i+1
else
begin
ds:=i-ns;
If ds<=d_min then
begin
d_min:=ds;// длина
s_min:=Copy(s,ns,ds);
n_min:=ns;
end;
ns:=i+1;
end;
end ;
Добавлено (02.05.13, 21:47)
---------------------------------------------
LB.Items.Add('длина минимального слова='+IntToStr(d_min));
LB.Items.Add('минимальное слово='+s_min);
// количество слов минимальной длины
ds:=0;
kol_min:=0;
ns:=1;
For i:=1 to n do
If ((S=' ') or (S='.')) then
begin
ds:=i-ns;
If ds=d_min then
kol_min:=kol_min+1;
ns:=i+1;
end;
if kol_min>2 //delete слов минимальной длины
then
begin
i:=1;
ns:=1;
n:=length(s);
While i<=n do
begin
If ((S=' ') or (S='.')) then
begin
ds:=i-ns;
If ds=d_min then
begin
Delete (S,i-1,d_min);
i:=i-d_min;
n:=n-ds;
end;
ns:=i+1;
end;
i:=i+1;
end;
end;
LB.Items.Add('кол-во слов мин длины ='+IntToStr(kol_min));
LB.Items.Add(s);// полученная строка
// меняем местами первое слово и слово мин длины
ns:=1;
ds:=0;
if kol_min<=2 then
begin
for i:=1 to n do
if s=' ' then
begin
ds:=i-ns; // длина первого слова
s_perv:=copy (s,1,i-1);
delete (s,1,i-1);
break;
end;
LB.Items.Add('первое слово='+s_perv);
insert(s_min,s,1); // вставляем минимальное на место первого
delete (s,n_min-ds+d_min,d_min);//удаляем минимальное
insert (s_perv,s,n_min-ds+d_min); //вставляем первое на место минимального
LB.Items.Add(s);
end;
end;
end;
end.
Добавлено (02.05.13, 21:50)
---------------------------------------------
Вот весь код программы, вылаживал по частям т.к. из-за ограничения сразу весь нельзя выложить.