IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Строки
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

Репутация: -  1  +


Ну, теперь у меня проблемы с задачей на строки.
Задача:
Дана непустая последовательность слов. Слова разделяются пробелами, запятыми. Текст заканчивается символом "*". Написать программу для подсчета количества слов и вывести все слова, отличные от первого слова.

Программу я написать не смогла, тк даже не знаю что там можно использовать. Считать слова-это, можно просто поставить счётчик и когда после последовательности символов встречается пробел, запятая или *-увеличивать его на еденицу. У меня также получилось выделить первое слово. Но я не знаю как можно сравнивать другие слова с ним. Можно поставить оператор if и если слова одинаковые, то удалять с помощью delete. Но как выполнить само сравнение слов? Кто-нибудь может подсказать? Я по форуму попыталась найти, но похожего не встретила...


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Алена, зачем же так сложно?

Задача, описанная в первом посте. решается вот так (я добавил комментарии, так что разобраться будет просто) :

{ Для начала задаем список символов, которые считаются разделителями }
const
Ds = [' ', ',', '*'];

var
i, start, count : integer;
s : string;
first_word, curr_word : string;

begin
s := 'first, second, one, two, three, first, next, first*';

{ Начали... Естественно, счетчик слов = 0, еще ничего не нашли }
count := 0;

i := 1;
while i <= length (s) do { Пока не доберемся до конца строки... }
begin

{ Пропускаем все разделители, идущие перед словом }
while (i <= length (s)) and (s[ i ] in Ds) do inc (i);

{ Если предыдущий цикл не вылетел за границы строки - то продолжаем }
if i <= length (s) then
begin
{ Запоминаем позицию, где встретилась первая буква слова }
start := i;

{ И идем, пока НЕ встретим разделитель }
while (i <= length(s)) and not (s[ i ] in Ds) do inc (i);

{
Теперь у нас есть start - индекс начала слова, i - индекс конца слова
Пользуясь этой информацией вытягиваем само слово в переменную curr_word
и увеличиваем счетчик слов.
}
curr_word := copy (s, start, i - start);
inc (count);

{
Если найденное слово - первое, то запоминаем его,
иначе - сравниваем текущее с первым, при неравенстве- выводим
}
if count = 1 then
first_word := curr_word
else
if curr_word <> first_word then write (curr_word, ' ');
end;
end;

{ Все, концерт окончен, печатаем общее количество слов }
writeln;
writeln (count, ' word(s)');
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 6:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name