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

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

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

 
 Ответить  Открыть новую тему 
> строки, Найти множество всех слов, которые встречаются в каждом из двух заданн
marwell
сообщение 3.04.2010 17:22
Сообщение #1


Бывалый
***

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

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


Найти множество всех слов, которые встречаются в каждом из двух заданных предложений. вот что получилось
 var s1,s2,str:string;
i,x:integer;
begin
write ('vvedite predlozenie 1: ');
readln (s1);
write ('vvedite predlozenie 2: ');
readln (s2);
x:=1;
for i:=1 to Length(s1) do
if s1[i]=' ' then
begin
str:=copy(s1,x,i-1);
if pos(str,s2)<>0 then writeln (str);
end;
x:=i+1;
readln;
end.
но верно работает только если нужное слово стоит в начале первого предложения. не могу понять в чем ошибка((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 3.04.2010 18:06
Сообщение #2


Бывалый
***

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

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


ааа, я забыл очищать str от предыдущего слова! и еще программа не рассматривает последнее слово, если после него нет пробела

Добавлено через 7 мин.
  var s1,s2,str:string;
i,x:integer;
begin
write ('vvedite predlozenie 1: ');
readln (s1);
write ('vvedite predlozenie 2: ');
readln (s2);
x:=0;
for i:=1 to Length(s1) do begin
if s1[i]=' ' then
begin
str:=copy(s1,x+1,i-x);
if pos(str,s2)<>0 then begin writeln (str);
x:=i;
Delete(str,1,i-x);
end;
end;
if s1[i]='.' then begin str:=copy(s1,x+1,i-x);
if pos(str,s2)<>0 then writeln (str);
end;
end;

readln;
end.
но все равно не помогло((

Сообщение отредактировано: marwell - 3.04.2010 18:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 3.04.2010 18:30
Сообщение #3


Профи
****

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

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


Цитата
забыл очищать str
Нет сысла, ты ведь все равно новое значение присваиваешь.
uses crt;

var s1,s2,str:string;
i,x:integer;
begin

write ('vvedite predlozenie 1: ');
readln (s1);
write ('vvedite predlozenie 2: ');
readln (s2);
while pos(' ',s1) > 0 do delete(s1,pos(' ',s1),1); //вдруг 2 пробела подряд
if s1[length(s1)]<>' ' then s1:=s1+' '; //добавление в конец пробела

while pos(' ',s1) > 0 do begin
str:=copy(s1,1,pos(' ',s1)-1);
if pos(str,s2) >0 then writeln(str);
delete(s1,1,pos(' ',s1))
end;

readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 3.04.2010 18:33
Сообщение #4


Бывалый
***

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

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


Цитата(Client @ 3.04.2010 18:30) *

Нет сысла, ты ведь все равно новое значение присваиваешь.
uses crt;

var s1,s2,str:string;
i,x:integer;
begin

write ('vvedite predlozenie 1: ');
readln (s1);
write ('vvedite predlozenie 2: ');
readln (s2);
while pos(' ',s1) > 0 do delete(s1,pos(' ',s1),1); //вдруг 2 пробела подряд
if s1[length(s1)]<>' ' then s1:=s1+' '; //добавление в конец пробела

while pos(' ',s1) > 0 do begin
str:=copy(s1,1,pos(' ',s1)-1);
if pos(str,s2) >0 then writeln(str);
delete(s1,1,pos(' ',s1))
end;

readln;
end.


спасибо! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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