вводим слова через пробел. найти количество слов которые вмещают 3 буква "а"
var
s:string;
i,count_a,count_words:byte;
begin
readln(s);
i:=0;
count_a:=0;
count_words:=0;
while i<=length(s) do
begin
inc(i);
if s[i]='a' then
begin
inc(count_a);
repeat
inc(i);
if s[i]='a' then inc(count_a);
if count_a=3 then inc(count_words);
until s[i]=' ';
count_a:=0;
dec(i);
end;
end;
writeln('Koluchestvo slov s 3 bykvamu a = ',count_words);
end.
TS*, не-а...
Введи строку 'dda abbaa defaaa noneeaaaa', и посмотри что выводит программа...
(под Турбо-Паскалем вообще виснет, если не завершить строку пробелом...)
Я бы делал так:
var
s: string;
i, count_a, count_words: byte;
begin
readln(s);
{
s := 'dda abbaa defaaa noneeaaaa';
}
count_words := 0; count_a := 0;
for i := 1 to length(s) do
if s[i] = 'a' then inc(count_a)
else
if s[i] = ' ' then begin
if count_a = 3 then inc(count_words);
count_a := 0;
end;
writeln('Koluchestvo slov s 3 bykvamu "a" = ', count_words);
end.
Вот чуть-чуть подравил код TS*.
Тепер программа правильно находит число слов, но всеравно виснет, если строка
не кончается пробелом, хотя я добавил проверку на конец строки...
Почему?
if s[i]='a' then begin
inc(count_a);
repeat
inc(i);
if s[i]='a' then inc(count_a);
until (s[i]=' ') or (i=length(s)); {Добавлен оператор or и еще одно условие}
if count_a=3 then inc(count_words);{Перемещено}
count_a:=0;
dec(i); { <--- Вот именно здесь... }
end;
...
If i < length(s) then dec(i);
...