Помогите решить задачку на строки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите решить задачку на строки |
wary |
19.10.2006 21:34
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
Условие: Дана строка символов. Дано слово (например "окно"). Удалить из заданной изначально строки слово "окно"
Алгоритм решения, который я придумал: 1. Определяем как константу слово "окно" (slovo_okno) 2. Вводим произвольную строку (st1) 3. Курабасим в цикле строку (st1) и выявляем в ней слово "окно" 4. Удаляем выявленно слово "окно" 5. Выводим на экран то что осталось от строки (st1) Поскольку я новичок в паскале, немного трудновато с описание п.3 и п.4. Если не трудно подскажите код как их описать, а также замечания по алгоритму. Заранее всем спасибо! |
мисс_граффити |
19.10.2006 23:07
Сообщение
#2
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
ну... при очень большом желании можно и так...
а вообще есть ф-ция Цитата Pos(SubS, s : string) : byte - Ищет вхождение подстроки SubS в s и возвращает номер первого символа SubS в s, или 0, если s не содержит SubS потом - процедура Цитата Delete(VAR s : String; start, len : Integer) - Удалает подстроку длиной len начиная с позиции start строки s Длину ты знаешь, положение тоже нашел. Вот и вся твоя задача -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
19.10.2006 23:18
Сообщение
#3
|
Гость |
Цитата Длину ты знаешь, положение тоже нашел. Не забыть проверять только, что найденный кусок текста действительно является словом, а не его частью, ибо на этом ОЧЕНЬ просто погореть:"Я стоял перед окном" Pos найдет, Delete удалит без сомнения... Что получим? |
Bokul |
20.10.2006 1:20
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
var s,word:string; b:boolean; buf:byte; Сообщение отредактировано: volvo - 3.11.2006 18:32 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
20.10.2006 5:34
Сообщение
#5
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Bokul, у меня под рукой нет компилятора, чтоб проверить, но в целом работать должно.
Замечания же такие: 1. Слова могут быть отделены не только пробелами, но и знаки препинания (,.!? ...), и в этом случае твоя прога потребует значительных изменений.. 2. Зачем тебе переменная b? Не проще ли просто заканчивать так: until buf=0; ? 3. Если уж у тебя есть булева переменная, то зачем устраивать ее сравнение? Иначе говоря, вместо until b=false; лучше писать так: until not b; Ну и последнее.. Тут явно напрашивается процедура вроде GetNextWord, которая искала бы следующее слово, начинаяя с заданной позиции, и выдавала бы его начальную позицию и длину. Затем ты мог бы проверить, совпадает ли оно с заданным. Такая процедурка могла бы тебе пригодится и в дальнейшем при лексическом анализе . -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
21.10.2006 13:23
Сообщение
#6
|
Гость |
Bokul программка почему-то не работает....а обзывается инвалидом...
|
Lapp |
21.10.2006 13:43
Сообщение
#7
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Bokul программка почему-то не работает....а обзывается инвалидом... Нельзя ли чуть подробнее? На каком этапе ошибка? и само сообщение поточнее. Я прогнал, вроде работает.. Смотри сам: ■ Free Pascal IDE Version 1.0.6 [2005/11/26] ■ Compiler Version 2.0.2 ■ GBD Version GDB 6.2.1 ■ Cygwin "C:\FPC\2.0.2\bin\i386-win32\cygwin1.dll" version 1005.12.0.0 Running "c:\home\home\ak\pas\th\th011\th011.exe " Enter string asdf ghjk zxcvb qwer tyui asdf wert Enter word asdf Result : ghjk zxcvb qwer tyui wert -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
21.10.2006 13:46
Сообщение
#8
|
Гость |
Цитата(lapp @ 21.10.2006 12:43) Я прогнал, вроде работает.. Аналогично - в Turbo Pascal 7.0 и Virtual Pascal 2.1 ...Гость, какой у тебя компилятор? |
wary |
22.10.2006 11:10
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
Огромное всем спасибо, задача тщательно разобрана (с моей стороны с помощью ваших ответов) и решена
|
Текстовая версия | 28.04.2024 0:57 |