![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
NeWT |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!!!
Вот у меня проблема: я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) и там где я сейчас учусь, необходимо в течении семестра сдать несколько лабораторных работ, несколько я уже сдал, но кое-что я не понимаю. Вот, например, задача:"Ввести строку текста. Строка может быть пустая или из одних пробелов. Разделители представляют собой множество – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями" Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. ![]() Я совершенно не понимаю алгоритм решения этой задачи :p2:, очень прошу помочь!!! :molitva: Заранее благодарен. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
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. Это выглядит непросто, я знаю. Но постарайся понять, что делает этот код... |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:55 |