Всем добрый вечер. Нужно вывети из тектса все слова с двумя бувами "а". Програмка просто зависает:
var
tt: string;
i, j, k: integer;
kol_slov, bykv_a: integer;
dve_a: boolean;
begin
tt:=' laba asdf baba dfsadf erer';
kol_slov:=0;
for i:=1 to length(tt) do begin
if (tt[i]=' ') then begin
j:=i; bykv_a:=0; dve_a:=false;
while tt[j]<>' ' do begin
j:=j+1;
if (tt[j]='a') then bykv_a:=bykv_a+1;
if (bykv_a=2) then dve_a:=true;
end;
if dve_a then begin
for k:=i to j-1 do write(tt[k]); writeln;
kol_slov:=kol_slov+1;
end;
i:=j-1;
end;
end;
end.
i:=j-1; { <--- Здесь !!! }
Спасибо, но:
var
tt: string;
i, j, k: integer;
kol_slov, bykv_a: integer;
dve_a: boolean;
begin
tt:=' laba asdf baba dfsadf erer';
kol_slov:=0;
while(i<>length(tt)) do begin
if (tt[i]=' ') then begin
j:=i; bykv_a:=0; dve_a:=false;
while tt[j]<>' ' do begin
j:=j+1;
if (tt[j]='a') then bykv_a:=bykv_a+1;
if (bykv_a=2) then dve_a:=true;
end;
if dve_a then begin
for k:=i to j-1 do write(tt[k]); writeln;
kol_slov:=kol_slov+1;
end;
i:=j-1;
end;
i:=i+1;
end;
end.
У тебе в коде несколько проблем, во-первых цикл While никогда не выполняется, поскольку есть противоречие:
for i:=1 to length(tt) do begin
if (tt[i]=' ') then begin
j:=i;
i:=j-1;
end; end;
pзацикливаеться потому что на шаге i:=j-1; ты повторишь переход на букву и все опять пойдет по циклу, по моему надо: i:=j; но так программа не работает, поэтому свое решение
[pascode]
var
i,back,n : integer;
tmp,s : string;
count,j : integer;
begin
s :=' laba asdf baba dfsadf erer';
i := 1;
n := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] = ' ') do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] = ' ') do
inc(i);
inc(n);
tmp := copy(s, back, i-back);
count:=0;
for j := 1 to length(tmp) do begin
if tmp[j]='a' then inc(count);
if count>=2 then begin writeln(tmp); break;end;
end;
end;
end;
readln;
end.
[/pascode]
Всем спасибо, все учел