![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
NeWT |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!!!
Вот у меня проблема: я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) и там где я сейчас учусь, необходимо в течении семестра сдать несколько лабораторных работ, несколько я уже сдал, но кое-что я не понимаю. Вот, например, задача:"Ввести строку текста. Строка может быть пустая или из одних пробелов. Разделители представляют собой множество – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями" Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. ![]() Я совершенно не понимаю алгоритм решения этой задачи :p2:, очень прошу помочь!!! :molitva: Заранее благодарен. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
NeWT
Удалить только слова или разделители тоже? Пример: строка = "stststsrtsrtsee&&!%rstrstrstrtkk%<<opopopop??" N = 2 подстрока = "st" Что будет в результате? "&&!%%<<opopopop??" или "opopopop??" Сообщение отредактировано: volvo - 2.12.2004 19:43 |
expertpro_mail.ru |
![]()
Сообщение
#3
|
Гость ![]() |
писец, условие задачи писал натурально аутипный тип
![]() пожалста, не оскорбляем никого, ОК ?. GoodWind судя по всему, условие на русском: 1.вводится "строка" 2.вводится "подстрока" 3."подстрока"="подстрока"+"подстрока"+"подстрока" 4.берем "слово" до первого встреченного разделителя (выход из цикла поиска, если больше их нет) 5.если в "слове" есть "подстрока" и счетчик удаленных "слов" не превысил N - удаляем "слово" 6.крутим дальше на пункт 4 7.удалять с разделителями - судя по всему - "слова" - это что-то типа тегов ;) Сообщение отредактировано: GoodWind - 2.12.2004 21:01 |
expertpro_mail.ru |
![]()
Сообщение
#4
|
Гость ![]() |
здесь немного упрощенно было (подстрока идет 3 раза _подряд_). пишешь вначале каркас программы, потом наворачиваешь ее...
а так - надо будет еще внутренний цикл добавить по "слову" - подсчет - сколько раз встретится "подстрока" ;) |
expertpro_mail.ru |
![]()
Сообщение
#5
|
Гость ![]() |
а как еще назвать "горе-преподавателя", который выдает такое?!
![]() "Ввести строку текста. Строка может быть пустая или из одних пробелов." и потом сразу "Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. " - неопытные люди от таких условий впадают в полный ступор. вот так плодится раздражение и тихая ненависть к предмету, что печально... |
GoodWind |
![]()
Сообщение
#6
|
![]() Автооответчик ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
expertpro_mail.ru, может Вы лучше поможете человеку кодом (с объяснением),
Цитата я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) человек ясно сказал, что он Новичок... -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
expertpro_mail.ru |
![]()
Сообщение
#7
|
Гость ![]() |
человек просил помочь с алгоритмом. он учится сам. это всегда радует! ;)
похоже, возникло небольшое недоразумение - "писец, аутипный тип" - это имелся в виду не NeWT, а тот кто ему такое условие выдал. |
Altair |
![]()
Сообщение
#8
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата аутипный тип Ну и тип! Инкапсулировать таких надо! expertpro_mail.ru, а в чем проблемма? Надо разбирать строку... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
expertpro_mail.ru |
![]()
Сообщение
#9
|
Гость ![]() |
пусть чел вначале внешний цикл напишет, а то в двух циклах сходу его переменными придавит... новичок лучше растет постепеееееено
![]() |
NeWT |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Огромное всем спасибо за ответы!!! Но у меня всё-таки так ничего толком не получается. Как мне работать с этими словами ? как мне написать цикл поиска по этим словам? и т.д Наверно вопросы покажутся Вам очень глупые, но для меня пока это очень трудно – не понятно, я очень прошу Вас мне помочь!!!
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
NeWT
А на вопрос ответить не надо? Я во 2-ом посте спрашивал ... |
NeWT |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Извини...не заметил. Разделители удалять не надо!!!
|
volvo |
![]()
Сообщение
#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 |
![]()
Сообщение
#14
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Большое спасибо!!! Это выглядит действительно не просто, но я обязательно постараюсь понять!!!!
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 15:13 |