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

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

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

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





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

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


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


Гость






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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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

;)

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


Гость






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


Гость






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


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

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

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


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

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


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


Гость






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

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


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

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

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


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

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


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


Гость






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





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

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


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


Гость






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





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

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


Извини...не заметил. Разделители удалять не надо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

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





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

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


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

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

 





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