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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Строка из одинаковых слов
сообщение
Сообщение #1


Профи
****

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

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


Даны две строки, состоящие из слов. Получить 3-ю строку, состоящую из слов, которые содержаться в обеих строках.

Правильно ли я понимаю : сначала мне нужно разбить обе строки на слова, а потом их сравнивать? А вот каким способом?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Достаточно разбить на слова одну строку, а потом просто проверять через Pos (ну, или BMSearch есть уже реализованный, если тебе нельзя пользоваться встроенными функциями Паскаля), присутствует или нет каждое слово во второй строке... Если присутствует - добавить в строку-результат...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Можно и так, это один из способов.
Цитата
А вот каким способом?

Как разбивать? Выбирай любой наиболее удобный для тебя.


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


Профи
****

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

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


Цитата(volvo @ 5.01.2007 18:50) *

а потом просто проверять через Pos (ну, или BMSearch есть уже реализованный, если тебе нельзя пользоваться встроенными функциями Паскаля), присутствует или нет каждое слово во второй строке...

А если мне нельзя этого использовать, только length, тогда как мне проверить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Т.е. тебе нельзя написать свой аналог pos? Если нет, то делай как ты описала.


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


Perl. Just code it!
******

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

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


Цитата
Достаточно разбить на слова одну строку, а потом просто проверять через Pos (ну, или BMSearch есть уже реализованный, если тебе нельзя пользоваться встроенными функциями Паскаля), присутствует или нет каждое слово во второй строке... Если присутствует - добавить в строку-результат...


Pos в чистом виде не пойдет smile.gif
Ведь слово из первой строки во второй может не присутсвовать отдельно, но являться частью дугого слова ... Хотя все это можно и с Pos обыграть при желании smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Я уже 5 раз показывал, КАК именно это делается - в 3 строках кода... Еще раз привести? Поиск что, уже можно отменять? dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


Цитата(Bokul @ 5.01.2007 19:35) *

Т.е. тебе нельзя написать свой аналог pos? Если нет, то делай как ты описала.

Не, свой аналог я могу написать (пока не знаю, как..), но там нельзя использовать стандартные процедуры Паскаль, кроме length.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

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

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


Цитата
Я уже 5 раз показывал, КАК именно это делается - в 3 строках кода... Еще раз привести? Поиск что, уже можно отменять? dry.gif


Так я же не сказал что нельзя сделать через Pos ...

Кстати что-то я не могу в поиске Pos рукодельный найти пока, так что могу предложить такой вариант

function _Pos(const subS, s: String): Integer;
var
i, j, LenS, LenSb: Integer;
find: Boolean;
begin

i := 1;

find := false;

LenS := Length(s);
LenSb := Length(subS);

while (i <= LenS) and not(find) do begin

while (i <= LenS) and (s[i] <> subS[1]) do
inc(i);

if (i <= LenS) and ( i + LenSb - 1 <= LenS) then begin

j := 0;

while (j < LenSb) and (s[i + j] = subS[j + 1]) do
inc(j);

find := (j > LenSb - 1);

end;

if not(find) then inc(i);

end;

if find then _Pos := i else _Pos := 0;

end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


у меня получилось разбить на слова первую строку, больше ничего не могу сделать...
не пойму, как сравнить со второй...( даже с использованием функции function _Pos(const subS, s: String): Integer)


Function slovo ( const s : string; var i : byte) : string;
var
w : string;
begin
w := '';
while ( i <= length (s) ) and ( s[i] <> ' ' ) do
begin
w := w + s[i];
i := i+1;
end;
slovo := w;
end;




Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

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

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


Предложение :
Возьми и засунь слова в массив, дальше сделай тоже самое для второй строки а дальше просто пробегись по всему первому массиву проверяя есть ли такой же элемент во втором массиве


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

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

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


Предлагаю поменять твою функцию "Slovo" так, чтобы она возвращала i-тое слово из строки s, тогда все твои подобные задачи гораздо упростятся. В этой можно будет сдела перебор, типа:

for i:=1 to n1 do 
for j:=1 to n2 do
if Slovo (s1,i)=slovo(s2,j) then ..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

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

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


Цитата(Malice @ 6.01.2007 17:26) *

Предлагаю поменять твою функцию "Slovo" так, чтобы она возвращала i-тое слово из строки s, тогда все твои подобные задачи гораздо упростятся. В этой можно будет сдела перебор, типа:

for i:=1 to n1 do 
for j:=1 to n2 do
if Slovo (s1,i)=slovo(s2,j) then ..


что- то вроде этого?


function exsl (var str : string; var pos : byte ) : string;
var
sl : string;
begin
sl := '';
while sl[pos] <> ' ' do
begin
sl := sl + str[pos];
inc (pos);
end;
inc (pos);
exsl := sl;
end;



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

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

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


Нет, типа этого:

function Slovo(s:string;n:integer):string;
const lim =[' ',',','!'];
var ss:string;
k,c,i:integer;
begin
ss:=''; c:=1; k:=1;
while k<=length(s) do begin
while not(s[k] in lim) and (k<=length(s)) do begin
if c=n then ss:=ss+s[k];
inc (k); end;
inc ( c );
while (s[k] in lim) and (k<=length(s)) do inc (k);
end;
Slovo:=ss;
end;


Еще понадобится подсчет кол-ва слов:
n:=1; while slovo(s,n)<>'' do inc (n);


Сообщение отредактировано: Malice -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

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

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


что здесь не так (программа не работает... )


uses crt;
function Slovo(s:string;n:integer):string;
const lim =[' ',',','!'];
var ss:string;
k,c,i:integer;
begin
ss:=''; c:=1; k:=1;
while k<=length(s) do begin
while not(s[k] in lim) and (k<=length(s)) do begin
if c=n then ss:=ss+s[k];
inc (k); end;
inc ( c );
while (s[k] in lim) and (k<=length(s)) do inc (k);
end;
Slovo:=ss;
end;

var
s1, s2, srez : string;
n1, n2 : integer;
i, j : integer;

begin
clrscr;
writeln (' vvedite 1-u stroky' ); readln (s1);
writeln (' vvedite 2-u stroky' ); readln (s2);
n1 := 1;
n2 := 1;
srez := ' ';
while slovo (s1, n1) <> ' ' do inc (n1);
while slovo (s2, n2) <> ' ' do inc (n2);
for i := 1 to n1 do
for j := 1 to n2 do
if slovo (s1, i) = slovo (s2, j) then srez := srez + slovo (s1, i) +' ';
writeln (' stroka - rezyltat : ' );
writeln (srez);
readkey;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

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

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


Цитата(18192123 @ 6.01.2007 20:09) *

что здесь не так (программа не работает... )

while slovo (s1, n1) <> ' ' do inc (n1);
while slovo (s2, n2) <> ' ' do inc (n2);



В этих циклах в кавычках не должно быть пробела.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

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

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


Цитата(Malice @ 6.01.2007 20:14) *

В этих циклах в кавычках не должно быть пробела.

Спасибо! Теперь всё хорошо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


lehf
**

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

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


а может кто-нибудь сказать,что такое c и почему не должно быть в кавычках пробела....просто у меня очень похожая задача...но я не могу понять....что такое c? unsure.gif Помогите,пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

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

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


Цитата(Ellsa @ 10.01.2007 16:25) *

а может кто-нибудь сказать,что такое c и почему не должно быть в кавычках пробела....просто у меня очень похожая задача...но я не могу понять....что такое c? unsure.gif Помогите,пожалуйста!

с- номер текущего (обрабатываемого) слова в строке
Функция slovo возвращает пустую строку если запрашивается слово, которого нет (всего 5 слов, просится 4-тое)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


lehf
**

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

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


то есть наоборот....всего 4 слова и просится 5-ое?
а n-количество слов в строке получается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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