![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Drenchick |
![]()
Сообщение
#1
|
Гость ![]() |
вводим слова через пробел. найти количество слов которые вмещают 3 буква "а"
|
TS* |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 71 Пол: Мужской Реальное имя: Max Репутация: ![]() ![]() ![]() |
вводим слова через пробел. найти количество слов которые вмещают 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.
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
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.
|
Bokul |
![]()
Сообщение
#4
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Вот чуть-чуть подравил код TS*.
Тепер программа правильно находит число слов, но всеравно виснет, если строка не кончается пробелом, хотя я добавил проверку на конец строки... Почему? Код 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); until (s[i]=' ') or (i=length(s)); {Добавлен оператор or и еще одно условие} if count_a=3 then inc(count_words);{Перемещено} count_a:=0; dec(i); end; end; writeln('Koluchestvo slov s 3 bykvamu a = ',count_words); end. Сообщение отредактировано: Bokul - 26.05.2006 6:41 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Malice |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
все равно виснет, если строка не кончается пробелом, хотя я добавил проверку на конец строки... Почему? А потому, что здесь: 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;
... ты уменьшаешь i безусловно (!!!)... А если i уже достигло значения конца строки? Сделай так: ...
If i < length(s) then dec(i);
...
и все будет работать... ![]() |
Bokul |
![]()
Сообщение
#7
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата А не проще ли в начале добавить строчку "if s[length(s)]<>' ' then s:=s+' ';" ? ;) Если длина строки уже максимальная, то ничего не получится ![]() -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 7:06 |