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

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

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.

Если не трудно подскажите код как их описать, а также замечания по алгоритму.

Заранее всем спасибо! huh.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 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

Длину ты знаешь, положение тоже нашел.
Вот и вся твоя задача smile.gif


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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;
begin
writeln('Enter string');
readln(s);
writeln('Enter word');
readln(word);
b:=true;
if s=word then
s:=''
else
repeat
if copy(s,1,length(word)+1)=word+' ' then
delete(s,1,length(word));
if copy(s,length(s)-length(word),length(word)+1)=' '+word then
delete(s,length(s)-length(word)+1,length(word));
buf:=pos(' '+word+' ',s);
if buf<>0 then
delete(s,buf+1,length(word))
else
b:=false;
until b=false;
writeln('Result :');
writeln(s);
readln;
end.


Сообщение отредактировано: volvo - 3.11.2006 18:32


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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, которая искала бы следующее слово, начинаяя с заданной позиции, и выдавала бы его начальную позицию и длину. Затем ты мог бы проверить, совпадает ли оно с заданным. Такая процедурка могла бы тебе пригодится и в дальнейшем при лексическом анализе smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 21.10.2006 13:23
Сообщение #6


Гость






Bokul программка почему-то не работает....а обзывается инвалидом...
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.10.2006 13:43
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Гость @ 21.10.2006 14:23) *

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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  +


Огромное всем спасибо, задача тщательно разобрана (с моей стороны с помощью ваших ответов) и решена good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 28.04.2024 0:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"