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

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

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

 
 Ответить  Открыть новую тему 
> Обработка символьной информации
NeWT
сообщение 2.12.2004 19:17
Сообщение #1





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

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


Здравствуйте!!!
Вот у меня проблема: я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) и там где я сейчас учусь, необходимо в течении семестра сдать несколько лабораторных работ, несколько я уже сдал, но кое-что я не понимаю. Вот, например, задача:"Ввести строку текста. Строка может быть пустая или из одних пробелов.
Разделители представляют собой множество – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями" Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. blink.gif
Я совершенно не понимаю алгоритм решения этой задачи :p2:, очень прошу помочь!!! :molitva:
Заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.12.2004 19:23
Сообщение #2


Гость






NeWT
Удалить только слова или разделители тоже?
Пример:
строка = "stststsrtsrtsee&&!%rstrstrstrtkk%<<opopopop??"
N = 2
подстрока = "st"
Что будет в результате?
"&&!%%<<opopopop??"
или
"opopopop??"

Сообщение отредактировано: volvo - 2.12.2004 19:43
 К началу страницы 
+ Ответить 
expertpro_mail.ru
сообщение 2.12.2004 20:56
Сообщение #3


Гость






писец, условие задачи писал натурально аутипный тип smile.gif

пожалста, не оскорбляем никого, ОК ?. GoodWind
судя по всему, условие на русском:
1.вводится "строка"
2.вводится "подстрока"
3."подстрока"="подстрока"+"подстрока"+"подстрока"
4.берем "слово" до первого встреченного разделителя (выход из цикла поиска, если больше их нет)
5.если в "слове" есть "подстрока" и счетчик удаленных "слов" не превысил N - удаляем "слово"
6.крутим дальше на пункт 4
7.удалять с разделителями - судя по всему - "слова" - это что-то типа тегов

;)

Сообщение отредактировано: GoodWind - 2.12.2004 21:01
 К началу страницы 
+ Ответить 
expertpro_mail.ru
сообщение 2.12.2004 21:03
Сообщение #4


Гость






здесь немного упрощенно было (подстрока идет 3 раза _подряд_). пишешь вначале каркас программы, потом наворачиваешь ее...
а так - надо будет еще внутренний цикл добавить по "слову" - подсчет - сколько раз встретится "подстрока"
;)
 К началу страницы 
+ Ответить 
expertpro_mail.ru
сообщение 2.12.2004 21:08
Сообщение #5


Гость






а как еще назвать "горе-преподавателя", который выдает такое?! smile.gif
"Ввести строку текста. Строка может быть пустая или из одних пробелов."
и потом сразу "Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. " - неопытные люди от таких условий впадают в полный ступор. вот так плодится раздражение и тихая ненависть к предмету, что печально...
 К началу страницы 
+ Ответить 
GoodWind
сообщение 2.12.2004 21:09
Сообщение #6


Автооответчик
*****

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

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


expertpro_mail.ru, может Вы лучше поможете человеку кодом (с объяснением),
Цитата
я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом)

человек ясно сказал, что он Новичок...


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
expertpro_mail.ru
сообщение 2.12.2004 21:17
Сообщение #7


Гость






человек просил помочь с алгоритмом. он учится сам. это всегда радует! ;)

похоже, возникло небольшое недоразумение - "писец, аутипный тип" - это имелся в виду не NeWT, а тот кто ему такое условие выдал.
 К началу страницы 
+ Ответить 
Altair
сообщение 2.12.2004 21:40
Сообщение #8


Ищущий истину
******

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

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


Цитата
аутипный тип

Ну и тип! Инкапсулировать таких надо!
expertpro_mail.ru, а в чем проблемма? Надо разбирать строку...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
expertpro_mail.ru
сообщение 2.12.2004 22:00
Сообщение #9


Гость






пусть чел вначале внешний цикл напишет, а то в двух циклах сходу его переменными придавит... новичок лучше растет постепеееееено smile.gif
 К началу страницы 
+ Ответить 
NeWT
сообщение 2.12.2004 22:59
Сообщение #10





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

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


Огромное всем спасибо за ответы!!! Но у меня всё-таки так ничего толком не получается. Как мне работать с этими словами ? как мне написать цикл поиска по этим словам? и т.д Наверно вопросы покажутся Вам очень глупые, но для меня пока это очень трудно – не понятно, я очень прошу Вас мне помочь!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.12.2004 23:03
Сообщение #11


Гость






NeWT
А на вопрос ответить не надо? Я во 2-ом посте спрашивал ...
 К началу страницы 
+ Ответить 
NeWT
сообщение 2.12.2004 23:19
Сообщение #12





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

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


Извини...не заметил. Разделители удалять не надо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2004 0:07
Сообщение #13


Гость






NeWT
Что-то типа этого...
Код

Const
 Delimiters =
   ['/', '?', '.', ',', '<', ';', '>',
    ':', '"', '!', '''', '*', '%'];


Const
 s: String = 'stststsrtsrtsee>>!%rstrstrstrtkk%<<opopopop??';
 n = 2;
 substr: String = 'st';


Function GetFirstWord(s: String;
        Var Start, Finish: Byte): String;
 Begin
   Start := 1;
   While s[Start] In Delimiters Do
     Inc(Start);
   Finish := Start;
   While not (s[Finish] In Delimiters) Do
     Inc(Finish);

   GetFirstWord := Copy(s, Start, Finish - Start)
 End;

Function CountSubs(s, subs: String): Byte;
 Var
   p, count: Byte;
 Begin
   Count := 0;
   Repeat
     p := Pos(subs, s);
     If p <> 0 Then
       Begin
         Delete(s, p, Length(subs));
         Inc(count)
       End
   Until p = 0;
   CountSubs := count
 End;

Var
 iPos, wStart, wFinish: Byte;
 WordsDeleted: Byte;
 FirstWord: String;
begin
 iPos := 1; WordsDeleted := 0;
 Repeat
   FirstWord := GetFirstWord(Copy(s, iPos, Length(s)), wStart, wFinish);

   If FirstWord <> '' Then
     Begin
       If CountSubs(FirstWord, substr) = 3 Then
         Begin
           Delete(s, wStart, wFinish - wStart);
           Inc(WordsDeleted)
         End
       Else Inc(iPos, Pred(wFinish));

       If WordsDeleted = n Then Break
     End

 Until FirstWord = '';

 Writeln('Result string: ', s)
End.

Это выглядит непросто, я знаю. Но постарайся понять, что делает этот код...
 К началу страницы 
+ Ответить 
NeWT
сообщение 3.12.2004 0:50
Сообщение #14





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

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


Большое спасибо!!! Это выглядит действительно не просто, но я обязательно постараюсь понять!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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