Условие задачи: Дана непустая последовательность непустых слов из латинских букв; соседние слова отделены друг от друга запятой, за последним словом – точка. Необходимо определить количество слов, которые начинаются и заканчиваются одной и той же буквой.
Код:
Program stroka; Var s:String; i,k:Integer; c:char; Begin ReadLn(s); c:=s[1]; For i:=1 To Length(s) Do begin if (((s[i]=',') or (s[i='.'])) and (s[i-1]=c)) then begin inc(k); c:=s[i+1]; end; end; writeln(k); readln; End.
Код работает через раз. Как я понимаю, он сравнивает последнюю букву последнего слова с самой первой буквой. Помогите, пожалуйста, исправить.
Информатика 11 класс Алгоритмы и структуры данных информатика 11 класс задача на слова программирование Pascal количество слов буквы алгоритмы последовательность слов исправление кода логика программы
Давайте разберем вашу задачу и код, который вы представили. Ваша цель — определить количество слов в последовательности, которые начинаются и заканчиваются одной и той же буквой. Код, который вы написали, действительно имеет несколько недостатков, из-за которых он работает некорректно. Мы исправим его шаг за шагом.
1. Анализ кода:В вашем коде есть несколько ключевых ошибок:
Давайте перепишем код, чтобы он выполнял поставленную задачу правильно. Мы будем использовать цикл для обработки каждого слова и проверять, начинается ли слово и заканчивается ли оно одной и той же буквой.
Вот исправленный код:
Program stroka;
Var
s: String;
i, k: Integer;
word: String;
Begin
ReadLn(s);
k := 0; // Инициализируем счетчик
word := ''; // Переменная для хранения текущего слова
// Проходим по каждому символу строки
For i := 1 To Length(s) Do
begin
// Если символ не запятая и не точка, добавляем его к текущему слову
if (s[i] <> ',') and (s[i] <> '.') then
word := word + s[i]
else
begin
// Если слово не пустое, проверяем его
if word <> '' then
begin
// Проверяем, начинается и заканчивается ли слово одной и той же буквой
if word[1] = word[Length(word)] then
inc(k); // Увеличиваем счетчик
end;
// Сбрасываем текущее слово
word := '';
end;
end;
// Проверяем последнее слово (если оно есть)
if word <> '' then
begin
if word[1] = word[Length(word)] then
inc(k);
end;
writeln(k); // Выводим результат
readln;
End.
В этом коде мы обрабатываем каждое слово, добавляя символы к переменной word, пока не встретим запятую или точку. После этого мы проверяем, начинается ли и заканчивается ли слово одной и той же буквой, и, если да, увеличиваем счетчик k.
Таким образом, вы получите правильный результат. Попробуйте использовать этот код, и он должен работать корректно.