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

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

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите решить задачку на строки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

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


Условие: Дана строка символов. Дано слово (например "окно"). Удалить из заданной изначально строки слово "окно"

Алгоритм решения, который я придумал:

1. Определяем как константу слово "окно" (slovo_okno)
2. Вводим произвольную строку (st1)
3. Курабасим в цикле строку (st1) и выявляем в ней слово "окно"
4. Удаляем выявленно слово "окно"
5. Выводим на экран то что осталось от строки (st1)

Поскольку я новичок в паскале, немного трудновато с описание п.3 и п.4.

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

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


Гость






Цитата
Длину ты знаешь, положение тоже нашел.
Не забыть проверять только, что найденный кусок текста действительно является словом, а не его частью, ибо на этом ОЧЕНЬ просто погореть:

"Я стоял перед окном"
Pos найдет, Delete удалит без сомнения... Что получим?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


Bokul, у меня под рукой нет компилятора, чтоб проверить, но в целом работать должно.
Замечания же такие:

1. Слова могут быть отделены не только пробелами, но и знаки препинания (,.!? ...), и в этом случае твоя прога потребует значительных изменений..

2. Зачем тебе переменная b? Не проще ли просто заканчивать так:
until buf=0;
?

3. Если уж у тебя есть булева переменная, то зачем устраивать ее сравнение? Иначе говоря, вместо
until b=false;
лучше писать так:
until not b;

Ну и последнее.. Тут явно напрашивается процедура вроде GetNextWord, которая искала бы следующее слово, начинаяя с заданной позиции, и выдавала бы его начальную позицию и длину. Затем ты мог бы проверить, совпадает ли оно с заданным. Такая процедурка могла бы тебе пригодится и в дальнейшем при лексическом анализе smile.gif.


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


Гость






Bokul программка почему-то не работает....а обзывается инвалидом...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата(lapp @ 21.10.2006 12:43)
Я прогнал, вроде работает..
Аналогично - в Turbo Pascal 7.0 и Virtual Pascal 2.1 ...

Гость, какой у тебя компилятор?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

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


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

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

 





- Текстовая версия 4.08.2020 1:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name