Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 01:15   #1
denis_stell
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 21
Лампочка найти общее слово

Доброй ночи!Помогите пожалуйста вот с такой задачей:
Даны 2 предложения(вводятся с клавиатуры через пробел),найти для них самое длинное общее слово.

например
1-ое предложение- университет расположен возле дома
2-ое предложение- университет был в другом городе
должно вывести университет

как то так наверно ищется самое длинное в тексте
а как сделать чтобы искало в предложениях и находило общее я не знаю,очень нужно помогите пожалуйста!!!
Uses
Crt;
Var
St, pretender, longword: String;
i: Byte;
begin
ClrScr;
Write('введите предложение: ');
Readln(St);
St := St + ' ';
longword := '';
for i:=1 to Length(St) do begin
if St[i] <> ' ' then begin
pretender := pretender + St[i];
Continue;
end;
if St[i] = ' ' then begin
if Length(longword) < Length(pretender) then begin
longword := pretender;
end;
pretender := '';
end;
end;
Write('Found long word: ', longword);
readkey;
end.
denis_stell вне форума Ответить с цитированием
Старый 11.04.2010, 02:24   #2
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Код:
var
  a,b:string;
  e,f:string;
begin
  write('Введите первое предложение: ');
  readln(a);
  write('Введите второе предложение: ');
  readln(b);
  a:=a + ' ';
  b:=b + ' ';
  while pos('  ',a)>0 do
    delete(a,pos('  ',a),1);
  while pos('  ',b)>0 do
    delete(a,pos('  ',b),1);
  begin
      e:='';
      repeat
        f:=copy(a,1,pos(' ',a));
        if (pos(f,b)>0)and(length(f)>length(e)) then e:=f;
        delete(a,1,pos(' ',a))
      until length(a)=0;
    end;
  writeln('Самое длинное общее слово => : ',e);
  readln;
  end.
Ну вот как то так.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 11.04.2010, 19:40   #3
denis_stell
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от ROMA2PVT Посмотреть сообщение
Код:
var
  a,b:string;
  e,f:string;
begin
  write('Введите первое предложение: ');
  readln(a);
  write('Введите второе предложение: ');
  readln(b);
  a:=a + ' ';
  b:=b + ' ';
  while pos('  ',a)>0 do
    delete(a,pos('  ',a),1);
  while pos('  ',b)>0 do
    delete(a,pos('  ',b),1);
  begin
      e:='';
      repeat
        f:=copy(a,1,pos(' ',a));
        if (pos(f,b)>0)and(length(f)>length(e)) then e:=f;
        delete(a,1,pos(' ',a))
      until length(a)=0;
    end;
  writeln('Самое длинное общее слово => : ',e);
  readln;
  end.
Ну вот как то так.

спасибо!
а подскажите пожалуйста,вот если ввести в первую строку- университет
а во вторую ауниверситет,то выдает что общее слово университет,как сделать чтобы убрать эту ошибку?
denis_stell вне форума Ответить с цитированием
Старый 11.04.2010, 22:49   #4
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Код:
uses crt;
type k = array [1..100] of string[40];
var
p1,p2 : k;
i,j: integer;
n,m:byte;
a,b,w : string;
procedure Words(s:string; var mas:k; var c:byte);
var
i: byte;
s1 : string;
j: byte;
begin
s := s+' ';
j:=0;
for i := 1 to length(s) do
begin
if s[ i]=' ' then
begin inc(j);
mas[j ]:=s1;
s1:='';
end
else s1:=s1+s[i ];
end;
c := j;
end;
begin
ClrScr;
write('Введите первое предложение: ');
Readln(a);
words(a,p1,n);
write('Введите второе предложение: ');
Readln(b);
words(b,p2,m);
begin
w:='';
for i := 1 to n do
for j := 1 to m do
If (p1[ i] = p2[ j])
then
begin
w := p1[ i];
if (length(p1[ i])>length(w)) then w := p1[ i];
end;
Writeln('Самое длинное общее слово =>: ',w);
readln;
end;
end.
Вроди правильно щас.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 12.04.2010, 19:37   #5
denis_stell
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 21
Печаль

Цитата:
Сообщение от ROMA2PVT Посмотреть сообщение
Код:
uses crt;
type k = array [1..100] of string[40];
var
p1,p2 : k;
i,j: integer;
n,m:byte;
a,b,w : string;
procedure Words(s:string; var mas:k; var c:byte);
var
i: byte;
s1 : string;
j: byte;
begin
s := s+' ';
j:=0;
for i := 1 to length(s) do
begin
if s[ i]=' ' then
begin inc(j);
mas[j ]:=s1;
s1:='';
end
else s1:=s1+s[i ];
end;
c := j;
end;
begin
ClrScr;
write('Введите первое предложение: ');
Readln(a);
words(a,p1,n);
write('Введите второе предложение: ');
Readln(b);
words(b,p2,m);
begin
w:='';
for i := 1 to n do
for j := 1 to m do
If (p1[ i] = p2[ j])
then
begin
w := p1[ i];
if (length(p1[ i])>length(w)) then w := p1[ i];
end;
Writeln('Самое длинное общее слово =>: ',w);
readln;
end;
end.
Вроди правильно щас.
Большое вам спасибо!Я дико извиняюсь,помогите,вот если ввожу
1: универ возле дома
2: универ возле трассы
программа мне выдает,что самое длиное слово -возле,хотя должно быть -универ
Я ещё раз извиняюсь ,что отнимаю ваше драгоценное время!!!!
denis_stell вне форума Ответить с цитированием
Старый 13.04.2010, 17:58   #6
Филантроп
Форумчанин
 
Аватар для Филантроп
 
Регистрация: 12.04.2010
Сообщений: 134
По умолчанию

вариант 1
Код:
Uses
	Crt;
Const
	MaxIndex = 100;
	TestSt1: String = 'Argenti na manit negra';
	TestSt2: String = 'A roza upala na lapu Azora';
Type
	TAr = Array[1..MaxIndex] of String;
Var
	StAr1, StAr2: TAr;
	result, St1, St2: String;

procedure clear(var Ar: TAr);
var
	i: Byte;
begin
	for i:=1 to MaxIndex do
		Ar[i]:='';
end;
	
procedure split(st: String; var Ar: TAr);
var
	i, start, finish: Byte;
	tmpst: String;
begin
	tmpst := st + ' ';
	start := 1;
	finish := 1;
	i := 1;
	While (finish <= Length(tmpst)) do begin
		if tmpst[finish] = ' ' then begin
			Ar[i] := Copy(tmpst, start, finish-start);
			Inc(i);
			start := finish + 1;
			finish := start;
		end else begin
			Inc(finish);
		end;
	end;
end;

procedure sort(var Ar: TAr);
var
	tmp: String;
	i, j, maxi: Byte;
begin
	maxi := 1;
	While Ar[maxi] <> '' do begin
		Inc(maxi);
	end;
	for i := 1 to maxi - 1 do begin
		for j := i + 1 to maxi do begin
			if Length(Ar[i]) < Length(Ar[j]) then begin
				tmp := Ar[i];
				Ar[i] := Ar[j];
				Ar[j] := tmp;
				Continue;
			end;
			if (Length(Ar[i]) = Length(Ar[j])) and (Ar[i] < Ar[j]) then begin
				tmp := Ar[i];
				Ar[i] := Ar[j];
				Ar[j] := tmp;
			end;
		end;
	end;
end;

function find(var Ar1, Ar2: TAr): String;
var
	i1, i2: Byte;
begin
	i1 := 1;
	i2 := 1;
	find := '';
	repeat
		if (Length(Ar1[i1]) > Length(Ar2[i2])) or 
			((Length(Ar1[i1]) = Length(Ar2[i2])) and (Ar1[i1] > Ar2[i2])) then begin
			Inc(i1);
			Continue;
		end;
		if (Length(Ar1[i1]) < Length(Ar2[i2])) or
			((Length(Ar1[i1]) = Length(Ar2[i2])) and (Ar1[i1] < Ar2[i2]))then begin
			Inc(i2);
			Continue;
		end;
		if Ar1[i1] = Ar2[i2] then begin
			find := Ar1[i1];
			Break;
		end;
	until (Ar1[i1] = '') or (Ar2[i2] = '');
end;
	
begin
	ClrScr;
	Write('1-st: '); readln(St1);
	Write('2-nd: '); readln(St2);

	clear(StAr1);
	clear(StAr2);
	split(St1, StAr1);
	split(St2, StAr2);
	sort(StAr1);
	sort(StAr2);
	result := find(StAr1, StAr2);
	if result = '' then
		Writeln('Equals words not found.')
	else
		Writeln('Found: ' + result);
	Writeln;
	Write('Done. Press any key...');
	readkey;
end.
вариант 2
Код:
var
  a,b:string;
  {функция занимающаяся поиском максимального слова}
  function CheckString(c,d:string):string;
    var
      e,f:string;
    begin
      e:='';{пока пустая строка есть максимальное слово}
      repeat
        f:=copy(c,1,pos(' ',c));{копиреум проверяемое слово}
        if (pos(f,d)>0)and(length(f)>length(e)) then e:=f;{новое максимальное слово}
        delete(c,1,pos(' ',c)){удаляем проверенное слово}
      until length(c)=0;{продолжаем пока не переберм всю строку}
      CheckString:=e;
    end;
begin
  {вводим строку А}
  write('Enter string:');
  readln(a);
  {вводим строку В}
  write('Enter string:');
  readln(b);
  {в конец строки дописываем пробелы}
  a:=a + ' ';
  b:=b + ' ';
  {удаляем двойные пробелы}
  while pos('  ',a)>0 do
    delete(a,pos('  ',a),1);
  while pos('  ',b)>0 do
    delete(a,pos('  ',b),1);
  {вывод результата}
  writeln('Result: ',CheckString(a,b));
{контрольная проверка - поиск наоборот  writeln(CheckString(b,a));}
  readln;
  end.
кому нужна помощь! жду в аське и скайпе!

Последний раз редактировалось Филантроп; 13.04.2010 в 18:01.
Филантроп вне форума Ответить с цитированием
Старый 13.04.2010, 18:14   #7
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Гдето я уже это видел.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 13.04.2010, 18:15   #8
Филантроп
Форумчанин
 
Аватар для Филантроп
 
Регистрация: 12.04.2010
Сообщений: 134
По умолчанию

http://rfpro.ru/ - вот тут!
кому нужна помощь! жду в аське и скайпе!
Филантроп вне форума Ответить с цитированием
Старый 13.04.2010, 18:23   #9
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Цитата:
Uses
Crt;
Const
MaxIndex = 100;
TestSt1: String = 'Argenti na manit negra';
TestSt2: String = 'A roza upala na lapu Azora';
Возможно.Очень запомнился этот фрагмент в памяти. Второй вариант с косяком.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 13.04.2010, 19:15   #10
Филантроп
Форумчанин
 
Аватар для Филантроп
 
Регистрация: 12.04.2010
Сообщений: 134
По умолчанию

Цитата:
Второй вариант с косяком.
самое простое - не всегда самое правильное
кому нужна помощь! жду в аське и скайпе!
Филантроп вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти слово из текста serres SQL, базы данных 2 09.04.2010 09:41
Найти слово,встречающееся в каждом предложении 555shiro Общие вопросы C/C++ 1 06.01.2010 20:11
Найти слово с любым регистром Shouldercannon Общие вопросы Delphi 3 28.06.2009 17:01
найти самое длинное симметричное слово Си++ xVeteRx Помощь студентам 3 10.04.2009 21:25
Как найти слово в тексте ? geniy Паскаль, Turbo Pascal, PascalABC.NET 2 03.02.2008 21:37