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

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

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

 
 Ответить  Открыть новую тему 
> Ввести строку текста и, удалить последние N слов, содержащих заданную подстроку К раз.
Fraddy
сообщение 19.11.2007 17:54
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Ввести строку текста. Может быть пустая строка или из одних пробелов.
Разделители: пробел ,/?.<;>:”!’*%. Слово- любая последовательность символов,
ограниченная с одной или двух сторон разделителями.
Удалить последние N слов, содержащих заданную подстроку К раз.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 19.11.2007 17:57
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Что именно не получается ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fraddy
сообщение 20.11.2007 15:44
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Немного не понятно само задание.. тоесть удаление слов, и сама подстрока.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.11.2007 16:22
Сообщение #4


Гость






Цитата
Немного не понятно само задание..
Пример:

abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc
подстрока = 'abc', N = 2, K = 2

Что надо удалить? Сначала посмотрим, какие слова вообще содержат заданную подстроку K раз (рассматривается случай "как минимум K раз", можно больше):

abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc

Итого, имеем 3 слова, удовлетворяющих критерию... 2 последних из них надо удалить...

Теперь более понятно, что именно требуется делать?
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.11.2007 16:37
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 20.11.2007 16:22) *

(рассматривается случай "как минимум K раз", можно больше): ...
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)

Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fraddy
сообщение 20.11.2007 18:18
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Цитата(Lapp @ 20.11.2007 16:37) *

Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)

Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.

Этот вопрос не уточнен... С ровным количеством становится посложнее.. dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.11.2007 18:32
Сообщение #7


Гость






Цитата
С ровным количеством становится посложнее
Ну, да... Если смена знака с ">=" на "=" - это усложнение, то... Нет слов.
 К началу страницы 
+ Ответить 
Fraddy
сообщение 20.11.2007 20:24
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Ну это зависит от структуры програмы.

А сама часть нахождения и удаления как выглядит? Может кто решал похожее?

Сообщение отредактировано: Fraddy - 20.11.2007 21:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fraddy
сообщение 28.11.2007 22:05
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Ну продолжим...
Вот что накалякал:
uses crt;
const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%'];
var s,c:string;
i,ns:byte;
F:boolean;
Begin
clrscr;
write('s=");
readln (s);
i:=1;
F:=true;
while i<=length(s) then
{i - начало слова}
Begin
ns:=i;
C:='';
while (i<=length(s)) and NOT (s[i] in R) do
{Проход по слову}
Begin
if pos(s[i],c)=0 then c:- c+s;
inc (i);
end;


.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2007 23:07
Сообщение #10


Гость






Поскольку тебе надо удалять слова из строки, не трогая разделители, то лучше всего воспользоваться вот этим кодом: Разбиение на слова. Все способы. (но вносить начало и длину слова в массив не сразу, а только после того, как проверишь, действительно ли в найденном слове заданная подстрока встречается нужное число раз)...

Все, что останется после этого сделать - пройти с конца массива, и удалить из исходной строки нужное количество слов. Что вызывает затруднения?
 К началу страницы 
+ Ответить 
Fraddy
сообщение 29.11.2007 2:02
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


Опа.. спасибо, завтра после универа разберусь надеюсь.. =) решенную пришлю сюды, если будут проблемы обращусь..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fraddy
сообщение 27.12.2007 18:50
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

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


в чем ошибка?

Код

uses crt;        
const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%'];        
        
var g,s,c:string;        
i,ns:byte;        
F:boolean;        
Begin        
clrscr;        
write('s=");        
readln (s);    
writeln('g=');  
readln(g);        
i:=1;        
F:=true;        
while i<=length(s) then          
{i - начало слова}        
  Begin        
    ns:=i;        
    C:='';        
    while (i<=length(s)) and NOT (s[i] in R) do        
{Проход по слову}        
    Begin        
  if pos(s[i],c)=0 then c:- c+s;        
inc (i);        
end;    
if pos(g,c)>=1 then  
  begin  
    delete(s,ns,i-ns);  
     f:=false;  
    i:=ns-1  
  end;  
  end;  
i:=i+1  
end;  
is f then  
writeln ('no');  
else  
writeln(s);  
readkey  
end.  
end.  


Сообщение отредактировано: Fraddy - 27.12.2007 18:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.12.2007 19:10
Сообщение #13


Гость






Цитата
в чем ошибка?
В синтаксисе... Сначала приведи программу к тому виду, в котором она компилируется. В частности, у тебя неправильно задается апостроф во множестве, ошибки в конструкции if/else, да и вообще end-ов больше чем begin-ов...

Да, кстати, что программа должна делать, по-твоему? Можешь объяснить просто алгоритм ее работы? Словами, не Паскалем?
 К началу страницы 
+ Ответить 

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

 



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