Условие задачи: Дана непустая последовательность непустых слов из латинских букв; соседние слова отделены друг от друга запятой, за последним словом – точка. Необходимо определить количество слов, которые начинаются и заканчиваются одной и той же буквой.
Код:
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. Анализ кода:
В вашем коде есть несколько ключевых ошибок:
2. Исправление кода:
Давайте перепишем код, чтобы он выполнял поставленную задачу правильно. Мы будем использовать цикл для обработки каждого слова и проверять, начинается ли слово и заканчивается ли оно одной и той же буквой.
Вот исправленный код:
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.
Таким образом, вы получите правильный результат. Попробуйте использовать этот код, и он должен работать корректно.