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

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

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

 
 Ответить  Открыть новую тему 
> Строки
Eichhorn
сообщение 7.01.2011 9:49
Сообщение #1


Пионер
**

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

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


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

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


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


Гость






Вот тут есть нечто подобное:
И снова строки
еще одно:
Двумерные массивы
(а говоришь - не встретила. Запрос +слов* +отлич* +первого в строке поиска, если что)

Посмотри, как решались те задачи, и сделай для своего условия...
 К началу страницы 
+ Ответить 
Eichhorn
сообщение 7.01.2011 16:12
Сообщение #3


Пионер
**

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

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


Спасибо! Попробую разобраться.


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


Пионер
**

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

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


Люди! Хэлп! Не могу понять как сравнить слова с первым. Вот текст программы, которая есть:

var
s,s1,s2:string;
i,p,j,r,d:integer;
begin
readln(s);
for i:=1 to length(s) do
begin
r:=pos(' ',s);
d:=pos(',',s);
if r>d then
begin
s1:=copy(s,1,d-1);
p:=d;
end
else
begin
p:=r;
s1:=copy(s,1,r-1);
end;
end;
for i:=p to length(s) do
begin
r:=pos(' ',s);
d:=pos(',',s);
if r>d then p:=d else p:=r;

for j:=p to length(s) do
begin
if (s[j]<>' ') and (s[j]<>',') then
s2:=copy(s,j,pos(' ',s));
end;
if s2=s1 then delete(s,p,length(s2));
end;


writeln(s);
readln;
end.



Ну просто очень нужно. А как сделать-не понимаю....

Сообщение отредактировано: Eichhorn - 13.01.2011 9:42


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


Гость






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

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

{ Для начала задаем список символов, которые считаются разделителями }
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.
 К началу страницы 
+ Ответить 
Eichhorn
сообщение 14.01.2011 18:34
Сообщение #6


Пионер
**

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

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


Спасибо большое! Так даже понятнее) Я сдавала эту задачу, решенную страшекурсниками таким способом:

var
str,s1,outStr :string;
i, s, start:integer;
equal:boolean;
begin

readln(str);
writeln(str);
s := 0;
start:=0;
equal:=true;
for i:=1 to length(str) do
begin
if (str[i] <> ',') and (str[i] <> ' ') and (str[i] <> '*') and (s = 0) then
s1 := s1 + str[i];
if (str[i] <> ',') and (str[i] <> ' ') and (str[i] <> '*') and ((str[i-1] = ',') or (str[i-1] = ' ')) then
start := i;
if (start<>0)and(str[i] <> ',') and (str[i] <> ' ') and (str[i] <> s1[i - start + 1]) then
equal:=false;
if ((str[i] = ',') or (str[i] = ' ') or (str[i]='*')) and ((str[i - 1] <> ',') and
(str[i - 1] <> ' ')) then
begin
inc(s);
if not equal then
outStr:=outStr + copy(str,start,i - start) + ' ';
equal:=true;
end;
if str[i] = '*' then break;
end;
writeln(s);
writeln(outStr);
readln;
end.


повезло, что по ней не спрашивали, иначе этот вышеописанный код вряд ли смогла бы объяснить)


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

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

 



- Текстовая версия 20.07.2025 22:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"