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

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

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

> Определить слова первого предложения, которые встречаются во втором, Нужна Ваша помощь
сообщение
Сообщение #1





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

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


Даны два предложения. Определить слова первого предложения, которые встречаются во втором, причем неважно, на каком регистре набраны эти слова (т.е. одинаковыми считаются слова ГОД и год).

Помогите кто чем может! Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


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

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

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


Цитата(TarasBer @ 25.04.2011 12:03) *
1. Привести обе строки к верхнему регистру.
2. Разбить на слова.
3. Перебором найти общие элементы разбиений. Просто я не знаю, как правильно находить пересечение множеств, поэтому предлагаю перебрать. Если бы я делал для себя, я бы с хешами замутил чего.
Можно схитрить. Разбить на слова одно, потом использовать фукцию Pos для поиска их во втором )). Хотя это только усложнит дело)). Полагаю, тут речь пока не об эффективности, а о принципиальной возможности.

Цитата(artem66rus @ 25.04.2011 12:05) *
Ну введите первое предложение, введите второе предложение. ну а вто дальше я встал... Я считаю сравниваются 2 строки, вот тока как это сделать не соображу
Ну покажи хотя бы, что есть..
И ты забыл ответить про разделители.


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





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

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


Цитата(Lapp @ 25.04.2011 14:14) *

Можно схитрить. Разбить на слова одно, потом использовать фукцию Pos для поиска их во втором )). Хотя это только усложнит дело)). Полагаю, тут речь пока не об эффективности, а о принципиальной возможности.

Ну покажи хотя бы, что есть..
И ты забыл ответить про разделители.



program predlog;
Uses Crt;
var
stroka : string;

begin
ClrScr;
WriteLn('Введите 2 предложения разделих их точкой ');
TextColor(Cyan);
ReadLn(stroka);
stroka:=stroka + '.';




Может точкой разделить? или как лучше я даж не знаю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Цитата(artem66rus @ 25.04.2011 12:22) *
Может точкой разделить? или как лучше я даж не знаю

Зачем точкой? Просто сделай два разных ввода

  write('введите первое предложение: ');
readln(s1);
write('введите второе предложение: ');
readln(s2);




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





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

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


Добавлено через
Вот вроде, дотумкал!!!



uses crt;
type str=array[1..100] of string;

Procedure Split(var s:string; var output:str; var index:integer);
var i:integer;
Begin
index:=1;
For i:=1 to length(s) do
if (s[i] = ' ') then inc(index)
else output[index]:=output[index]+s[i];

End;
//------------------------------------------------------------------------------
var s1,s2,equals:string;
i,j,size1,size2:integer;
A,B:str;
begin
Write('Enter s1: ');
ReadLn(s1);
Write('Enter s2:');
ReadLn(s2);

Split(s1,A,size1);
Split(s2,B,size2);
WriteLn;

For i:=1 to size1 do
For j:=1 to size2 do
if (A[i] = B[j]) then WriteLn(A[i]);

Readln;
end.




ПРОВЕРТЕ ПЛЗ!! Че то с регистром у меня никак не выходит

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


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

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

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


Цитата(artem66rus @ 25.04.2011 13:30) *
Че то с регистром у меня никак не выходит
А тебе надо русский текст обрабатывать? В какой кодировке?


Добавлено через 14 мин.
Вот примерно так можно сравнивать независимо от регистра. Но это только для английских букв. Для русских надо переписывать функцию UpCase.
function Eq(s,t: string): boolean;
var
i: integer;
e: boolean;
begin
e:= Length(s)=Length(t);
i:= 1;
while e and (i<=Length(s)) and (UpCase(s[i])=UpCase(t[i]) do Inc(i);
Eq:= e and (i>Length(s))
end;


Еще: я бы советовал перед главным циклом пройтись по обоим массвам, A и B, и убрать повторения.


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





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

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


Цитата(Lapp @ 25.04.2011 16:15) *

А тебе надо русский текст обрабатывать? В какой кодировке?
Добавлено через 14 мин.
Вот примерно так можно сравнивать независимо от регистра. Но это только для английских букв. Для русских надо переписывать функцию UpCase.
function Eq(s,t: string): boolean;
var
i: integer;
e: boolean;
begin
e:= Length(s)=Length(t);
i:= 1;
while e and (i<=Length(s)) and (UpCase(s[i])=UpCase(t[i]) do Inc(i);
Eq:= e and (i>Length(s))
end;


Еще: я бы советовал перед главным циклом пройтись по обоим массвам, A и B, и убрать повторения.


Кодировка русскими буквами нужна, это я уже тоже нашел...

Перевод в верхний регистр:


procedure UpCaseRus(var s:string);{приведение к верхнему регистру русских букв}
{русские в верхний регистр}
var i:integer;
begin
for i:=1 to length(s) do
if s[i] in ['а'..'п'] then s[i]:=chr(ord(s[i])-32)
else if s[i] in ['р'..'я'] then s[i]:=chr(ord(s[i])-80)
else if s[i]='ё' then s[i]:='Ё';
end;



еще


function UpCase(s:string):string;{приведение к верхнему регистру всей строки}
{UpCase}
var i,k:byte;
st:string;
begin
st:=s;
for i:=1 to length(s) do
if st[i] in ['a'..'z'] then st[i]:=UpCase(st[i])
else if st[i] in [' '..'Ї'] then st[i]:=chr(ord(st[i])-32)
else if st[i] in ['а'..'п'] then st[i]:=chr(ord(st[i])-80)
else if st[i]='с' then st[i]:='р';
while st[1]=' 'do delete(st,1,1);
while st[length(st)]=' ' do delete(st,length(st),1);
UpCase:=st;
end;



и


procedure LowCase(var s:string);{приведение к нижнему регистру}
var i:byte;
begin
for i:=1 to length(s) do
if s[i] in ['A'..'Z','А'..'П'] then s[i]:=chr(ord(s[i])+32)
else if s[i] in ['Р'..'Я'] then s[i]:=chr(ord(s[i])+80)
else if s[i]='Ё'then s[i]:='ё';
end;



Как теперь это все объеденить без ошибки???

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

Сообщений в этой теме


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

 





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