![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
kost85 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравсвуйте.
Есть такая задача. Вводится строка. Требуется в ней перебрать все слова и проверить их на что-то. Другими словами вычленить слова из строки. Сначала забивал все слова из строчки в (array [1..n] of string) - все было отлично. Теперь препод хочет что бы я забивал каждое слово в другую строку и проверял ее. Вот не пойму, как сразу в цикле перебора строки получать слово , записывать его в перем. типа string , затем проверять(ну это все под контр-ем), а затем сбрасывать и снова записывать очередное слово... Может кто сталкивался. Заранее огромное спасибо. |
Алена |
![]()
Сообщение
#2
|
Гость ![]() |
Ты бы вот тут посмотрел: Разбиение на слова. Все способы. (особенно завершающий способ)
|
T i m e |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Какая разница? Всё точно также делается, только очередное слово в тексте записывается не в массив, а в какую то переменную. После этого проверяем слово "на что-то"... И всё. Далее при повторе цикла, в нашу перемнную запишется другое полученное из текста слово и т.д. Просто мы сразу будем делать непосредственно проверку при получение каждого слова, а не работать после с массивом.
-------------------- Time have not meaning. Mind - this is main...
|
kost85 |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
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 записывает эти два слова - и соответственно проверка не идет.... |
Артемий |
![]()
Сообщение
#5
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Вот тебе цикл разбиения и записи в переменную...Надеюсь ты это имел ввиду!
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 мин. (может способ немного "насилованный" ![]() -------------------- Dum spiro spero!
|
kost85 |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
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 пишет столько слов, сколько было в предложении... |
T i m e |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот примерно так это должно выглядить (один из вариантов):
Код 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...
|
Артемий |
![]()
Сообщение
#8
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Цитата(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!
|
T i m e |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата 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 Ну тогда и это здесь уже не нужно проверять. ![]() Он никогда ведь не пойдёт в это условие с пустой строкой... Сообщение отредактировано: T i m e - -------------------- Time have not meaning. Mind - this is main...
|
Артемий |
![]()
Сообщение
#10
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Да и зачем лишнии переменные Integer...
![]() -------------------- Dum spiro spero!
|
T i m e |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Да и зачем лишнии переменные Integer... ![]() ![]() Это у меня просто от другой программы наверно скопировалось просто... Конечно никаких i и j не надо здесь! ![]() -------------------- Time have not meaning. Mind - this is main...
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Для этого и существует:
Цитата(Правила Раздела) 7. Проверяйте программы перед тем, как разместить их на форуме!!! ... Здесь Форум, а не Формула 1, чтобы "быстро печатать"... "Поспешишь - людей насмешишь" (С), что и произошло... |
T i m e |
![]()
Сообщение
#13
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата "Поспешишь - людей насмешишь" (С), что и произошло... Никто никого не смешил вроде... ![]() ![]() -------------------- Time have not meaning. Mind - this is main...
|
![]() ![]() |
![]() |
Текстовая версия | 15.04.2025 16:51 |