![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Господа программисты! Была бы очень признательна, если бы Вы помогли с задачкой! Не предстваляю, как организовать подобное на Ассемблере...
![]() Суть задачи: Дан массив запрещенных слов и предложение, в котором могут быть(или не быть) эти самые слова. Нужно удалить слова из предложения. Можно использовать 2 строки(2ая для результата). Также можно потребовать точку, как признак конца исходного предложения. Заранее спасибо! |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 3 Всего: 16 |
Какая ОС? Компилятор? Процессор?
Для DOS, компиятор TASM, процессор Intel 8086+
Элементы данных, помеченыые ";*" изменять не рекомендуется. Программа работает так: 1)запрашивает ввод с клавиатуры строки, 2)запрещенные слова заменяет на звездочки. 3) выводит на экран результат Запрещенные слова указаны в массиве MASS, их количество в переменной MASSLE, их длины в массиве MASSL, их адреса в массиве MASSADR. В переменной DELIMITER указаны символы, которые считаются разделителями слов в предложении. Добавлено через 2 минуты и 33 секунды П. С. У этой программы есть минус: она чувствительна к регистру. Т.е. слово QWERTY будет заменено на звездочки, а Qwerty - нет. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
)) Все именно так)) Спасибо огромное. реализация...ммм...потрясная) я-то хотела кучу процедур делать, да все никак подступиться не могла...Спасибо!
один только вопрос. 0DH, 0AH это ж новая строка. а по нажатию ентера она вводится в программу, если так можно выразится. т.е. эта программа расчитана для работы с файлами? или я чего-то не понимаю? Еще раз спасибо. Просто спасли!)) |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 3 Всего: 16 |
Вы имеете ввиду что выводится 0DH, 0AH перед выводом результата и после него? Да, это перевод строки. На экране. Когда мы воводим 0DH, 0AH курсор переходит на начало следующей строки. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
)) Спасибо, не сразу поняла.
Я, как порядочная, хотела сама удаление организовать, да видно не судьба. Вот то, что у меня получилось. Тут есть ошибки, но предыдущие варианты либо циклились, либо толку от них не было...
Жду комментариев))) Спасибо. ЗЫ еще вопрос. столкнулась с проблемой: через командную строку все замечательно работает, а вот через эмулятор(emu8086 4.00b7) никакого эффекта. с чем это может быть связано? Это сообщение отредактировал(а) octopus - 9.11.2010, 21:12 |
|||
|
||||
iff |
|
||||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 3 Всего: 16 |
Значит в эмуляторе ошибка.
Вы хотите именно удалить? По-мойму горазду лучше (и не потому что проще ![]() Например, вы ввели в программу: "Несколько лет тому назад в одном из своих поместий жил старинный русской барин, Кирила Петрович Троекуров." А запрещенным словом пусть будет "жил". Если просто удалять запрещенные слова, то получится: "Несколько лет тому назад в одном из своих поместий старинный русской барин, Кирила Петрович Троекуров.", а если заменять звездочками, то получится "Несколько лет тому назад в одном из своих поместий *** старинный русской барин, Кирила Петрович Троекуров." Согласитесь, второй случай читать легче. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
||||
|
|||||
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Так-то оно так. Но если подходить к лабе с этой стороны, то пусть это будет фильтр сообщений в чате, где некоторые могут позволить себе лексические вольности(а в массиве как раз эти вольности и содержатся))) тогда удаление вполне оправданно, особенно если публика чувствительная...
По правде говоря, задание состоит в том, чтобы УДАЛИТЬ запрещенные слова. Как видите, мне не удается это сделать самостоятельно((( А именно, почему в 9 строке компилятор выдает ошибку? в предыдущем блоке была такая же по смыслу операция... |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 3 Всего: 16 |
1) ошибку выдает из-за того что CX - слово, а LEN - байт.
2) в данном случае удалить и "замазать" (заменить на символ "*") - это синонимы. Но если хотите все таки сделать так что слово имменно бесследно исчезает из текста, то вот иллюстация: ![]() Это строка длинной 7 которая начинается со смещения 0; а нужно удалить подстроку длинной 2, которая начинается со смещения 2 Мы видим, что при использовании reb movsb, мы должны: а) инициализировать SI как смещение основной строки+смещение удаляемой подстроки+длина подстроки. в данном случае 0+2+2=4. б) DI инициализировать как адрес начала удаляемой подстроки (в данном случае 2) в) в CX поместить смещение основной строки+длина основной строки-смещение удаляемой подстроки-длина удаляемой подстроки. В данном случае 0+7-2-2=3. г) незабудте переменную LEN уменьшить на длину удаляемой подстроки. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Спасибо!!
|
|||
|
||||
octopus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.9.2010 Репутация: нет Всего: нет |
Да! На всякий случай, для тех, кому вдруг понадобится именно удаление!
этот кусок кода удаляет слово вместе с пробелами после него.
Добавлено через 29 секунд может, не самая лучшая реализация, но я старалась) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |