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

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

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

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


Пионер
**

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

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


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

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


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


Гость






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

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


Пионер
**

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

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


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


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


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

 





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