
Seuvimel
6 год назад
Суть задачи такова: Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами.Подсчитать количество символов в самой длинной группе.Нашел вот такой исходник, пытался понять но так и не понял, объясните кто-нибудь код)procedure TForm1.Button1Click(Sender: TObject);vars:string;i,l,c,m:integer;z,u:boolean;beginif combobox1.Text<>'' thenbegins:=combobox1.Text;combobox1.Items.Insert(0,s);l:=length(s);z:=false;u:=false;c:=0;m:=0;for i:=1 to l dobeginif ((s[i]='0')and not z)or((s[i]='1')and not u)thenbeginif mend;if ((s[i]='0')and not z) thenbeginu:=false;z:=true;c:=0;end;if ((s[i]='1')and not u) thenbeginu:=true;z:=false;c:=0;end;if ((s[i]='0')and z)or((s[i]='1')and u)thenc:=c+1;end;if mlabel1.Caption:='Количество символов в самой длинной группе: '+inttostr(m);end;end;
ОТВЕТЫ

Арсений
Oct 24, 2020
Программа для случая, когда в строке только "0", "1" и пробелы (т.е. проверки корректности ввода нет):
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,k,max:integer;
begin
if combobox1.Text<>'' then
begin
s:=combobox1.Text;
combobox1.Items.Insert(0,s);
s:=s+' ';
while pos(' ',s)>0 do delete(s,pos(' ',s),1);
k:=0; max:=0;
for i:=1 to length(s) do
if s[i]<>' '
then k:=k+1
else begin
if k>max then max:=k;
k:=0;
end;
label1.Caption:='Количество символов в самой длинной группе: '+inttostr(max);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,k,max:integer;
begin
if combobox1.Text<>'' then
begin
s:=combobox1.Text;
combobox1.Items.Insert(0,s);
s:=s+' ';
while pos(' ',s)>0 do delete(s,pos(' ',s),1);
k:=0; max:=0;
for i:=1 to length(s) do
if s[i]<>' '
then k:=k+1
else begin
if k>max then max:=k;
k:=0;
end;
label1.Caption:='Количество символов в самой длинной группе: '+inttostr(max);
end;
end;
309
Смежные вопросы: