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

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

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

> Задача по проверке слов в предложении., Проблема в выделении слова из текста.
kost85
сообщение 28.02.2007 19:13
Сообщение #1





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

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


Здравсвуйте.
Есть такая задача.
Вводится строка. Требуется в ней перебрать все слова и проверить их на что-то. Другими словами вычленить слова из строки.
Сначала забивал все слова из строчки в (array [1..n] of string) - все было отлично. Теперь препод хочет что бы я забивал каждое слово в другую строку и проверял ее. Вот не пойму, как сразу в цикле перебора строки получать слово , записывать его в перем. типа string , затем проверять(ну это все под контр-ем), а затем сбрасывать и снова записывать очередное слово...
Может кто сталкивался.
Заранее огромное спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
Алена
сообщение 28.02.2007 19:25
Сообщение #2


Гость






Ты бы вот тут посмотрел: Разбиение на слова. Все способы. (особенно завершающий способ)
 К началу страницы 
+ Ответить 
T i m e
сообщение 28.02.2007 19:35
Сообщение #3


Новичок
*

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

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


Какая разница? Всё точно также делается, только очередное слово в тексте записывается не в массив, а в какую то переменную. После этого проверяем слово "на что-то"... И всё. Далее при повторе цикла, в нашу перемнную запишется другое полученное из текста слово и т.д. Просто мы сразу будем делать непосредственно проверку при получение каждого слова, а не работать после с массивом.


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kost85
сообщение 28.02.2007 20:14
Сообщение #4





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

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


  
i:=1;
m:=length(s);

for j:=1 to m do
if s[j]<>' ' then begin
word[i]:=s[j];
inc(i);
end;
word[0]:=chr(i-1);
writeln(word);
if not ispalindrome(word) then
if not iseven(word) then
writeln('false')
else
writeln('true');


в результате если исх строка состоит из 2 слов - то он в word записывает эти два слова - и соответственно проверка не идет....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 28.02.2007 21:10
Сообщение #5


Помощник капитана
****

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

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


Вот тебе цикл разбиения и записи в переменную...Надеюсь ты это имел ввиду!
var
a: array [1..10] of string;
s,s1,locs: string;
i,o,p,kj: Integer;
ch: Char;
begin
writeln('Vvedite predlogenie: ');
readln(s);
kj:=0;
p:=1;
s1:=s;
for i:=1 to 10 do begin
ch := s[i];
if (ch in [' ',';','/','\',':','-','=',',','.','!','?','(',')']) or (i = 10) then
begin
if i = 10 then
a[p] := Copy(s1,kj+1,i-kj)
else
a[p] := Copy(s1,kj+1,i-kj-1);
kj := i;
p:=p+1;
end;
end;
for i:=1 to 10 do begin
locs:=a[i];
{Сдесь производи нужные действия и проверки над locs}
end;
readln


Добавлено через 1 мин.
(может способ немного "насилованный" smile.gif )


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kost85
сообщение 28.02.2007 22:50
Сообщение #6





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

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



var S,word:string;
i,j: integer;
begin
clrscr;
write('Sentence>> : ');
readln(S);
i := 1;
for j := 1 to length(S) do begin
if S[j]<>' ' then begin
word[i]:=s[j];
i:=i+1;
word[0]:=chr(i-1);
end;
if not isPalindrome(word) then
writeln('Asimmetrical word is ', word, ' - ', IsEven(word))
else
writeln('''',word,'''',' - is a palindrome');


To Time:
Не пойму в какой кусок цикла проверку делать. Вот в этом коде он в word пишет столько слов, сколько было в предложении...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
T i m e
сообщение 1.03.2007 17:46
Сообщение #7


Новичок
*

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

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


Вот примерно так это должно выглядить (один из вариантов):
Код

var S,word:string;
    i,j: integer;
begin
clrscr;
write('Sentence>> : ');
readln(S);
repeat
  repeat
   if s[1] = ' ' then delete(s,1,1);
  until s[1] <> ' ';
if s <> '' then
    if pos(' ',s) > 0 then word := copy(s,1,pos(' ',s)-1)
     else word := s;
{вот мы получили наше слово и далее здесь же можем делать
  с ним чё хочешь, любые условия ставить и т.д}  
  {При повторение цикла на этом этапе мы будем получать очередное слово в предложение}
until S = '';
end;

Ну, если у тебя предложение со знаками припинания, то этот факт тоже учитывать надо будет...


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 1.03.2007 19:59
Сообщение #8


Помощник капитана
****

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

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


Цитата(kost85)
Теперь препод хочет что бы я забивал каждое слово в другую строку и проверял ее. Вот не пойму, как сразу в цикле перебора строки получать слово , записывать его в перем. типа string , затем проверять(ну это все под контр-ем), а затем сбрасывать и снова записывать очередное слово...

Давай посмотрим что у тебя..
Ты используешь алгоритм repeat .. until. Теперь посмотри, что у тебя получилось:
var S,word:string;
i,j: integer;
begin
clrscr;
write('Sentence>> : ');
readln(S);
repeat
repeat
if s[1] = ' ' then delete(s,1,1);{<<---Зачем? Ведь ты не чистил строку!}
until s[1] <> ' ';
if s <> '' then
if pos(' ',s) > 0 then word := copy(s,1,pos(' ',s)-1) {<<---Допустим..Но получается бесконечный цикл, ведь строка не отчищается!Он берет ближайший пробел!}
else word := s; {<<---И тут тоже..Досюда в твоем и не дойдет..}
{вот мы получили наше слово и далее здесь же можем делать
с ним чё хочешь, любые условия ставить и т.д}
{При повторение цикла на этом этапе мы будем получать очередное слово в предложение} {<<---Да ну?}
until S = ''; {<<----И когда она по-твоему становится пустой?}
end;


Раз взялся драть s так и делай:
var S,word:string;
i,j: integer;
begin
write('Sentence>> : ');
readln(S);
repeat
repeat
if s[1] = ' ' then delete(s,1,1);
until s[1] <> ' ';
if s <> '' then begin
if pos(' ',s) > 0 then begin
word := copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s)-1);
end;
if pos(' ',s) = 0 then begin
word := s; s:='';
end;
end;
{вот мы получили наше слово и далее здесь же можем делать
с ним чё хочешь, любые условия ставить и т.д}
{При повторение цикла на этом этапе мы будем получать очередное слово в предложение}
until S = '';
readln


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
T i m e
сообщение 1.03.2007 20:10
Сообщение #9


Новичок
*

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

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


Цитата
if s[1] = ' ' then delete(s,1,1);{<<---Зачем? Ведь ты не чистил строку!}

Это удаление впереди стоящих пробелов.
Цитата
if pos(' ',s) > 0 then word := copy(s,1,pos(' ',s)-1) {<<---Допустим..Но получается бесконечный цикл, ведь строка не отчищается!Он берет ближайший пробел!}
else word := s; {<<---И тут тоже..Досюда в твоем и не дойдет..}

Извините, ошибся просто... конечно там ещё в этом месте надо удалять очередное слово: delete(s,1,pos(' ',s))
Просто быстро писал... не заметил...
Цитата
if s <> '' then begin

Ну тогда и это здесь уже не нужно проверять. wink.gif
Он никогда ведь не пойдёт в это условие с пустой строкой...

Сообщение отредактировано: T i m e - 1.03.2007 20:15


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 1.03.2007 20:11
Сообщение #10


Помощник капитана
****

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

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


Да и зачем лишнии переменные Integer... nea.gif


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
T i m e
сообщение 1.03.2007 20:18
Сообщение #11


Новичок
*

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

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


Цитата
Да и зачем лишнии переменные Integer...

smile.gif Ладно уж... совсем мою прогу унизил... smile.gif
Это у меня просто от другой программы наверно скопировалось просто...
Конечно никаких i и j не надо здесь! yes2.gif


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.03.2007 20:21
Сообщение #12


Гость






Для этого и существует:
Цитата(Правила Раздела)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
... Здесь Форум, а не Формула 1, чтобы "быстро печатать"... "Поспешишь - людей насмешишь" (С), что и произошло...
 К началу страницы 
+ Ответить 
T i m e
сообщение 1.03.2007 20:28
Сообщение #13


Новичок
*

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

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


Цитата
"Поспешишь - людей насмешишь" (С), что и произошло...

Никто никого не смешил вроде... smile.gif Просто ошибся немного... Чего ж сразу убивать за это? Я ведь просто помочь хочу... yes2.gif


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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