Даны 2 текста, найти одно из общих слов, встречающихся в текстах.
Надо эту задачу переделать на язык Borland Pascal.
Поскольку формат текста не оговорен, будем считать, что это обычный текст, где слова разделены одним пробелом, если есть знаки препинания(разделители), то после них тоже стоит пробел, если это не последний знак в тексте ( типа Поле лес, снег: дома. ). Поэтому сначала удалим из текста все разделители, кроме пробелов. Затем текст преобразуем в массив слов. Потом сравнивая два массива, ищем одинаковые слова. Как только находим первое совпадение, выходим из программы. Если совпадений нет, выводим сообщение.
Чтобы два раза не преобразовывать текст, оформил это процедурой.
Код:
uses crt;
const rzd=['.',',','?',';',':','!']; {разделители}
type Tmas=array[1..100]of string;
var s1,s2:string;
ss1,ss2:Tmas;
n1,n2,x,y,k:integer;
procedure Mass(s:string; var m:Tmas; var j:integer);
{входной параметр строка, выходные – массив и его размер}
var i:integer;
begin
{udalim razdeliteli}
for i:=length(s) downto 1 do
if s[i] in rzd then delete(s,i,1);
{sozdaem massiv slov}
j:=1;
for i:=1 to length(s) do
begin
if s[i]=' ' then j:=j+1
else m[j]:=m[j]+s[i];
end;
end;
begin
clrscr;
write('Vvedite 1 text: ');readln(s1);
write('Vvedite 2 text: ');readln(s2);
Mass(s1,ss1,n1);
Mass(s2,ss2,n2);
k:=0;
for x:=1 to n1 do
for y:=1 to n2 do
if (x<>y)and(ss1[x]=ss2[y]) then
begin
k:=k+1;
writeln('Eto slovo ',ss1[x],'!');
readln;
exit;
end;
if k=0 then writeln('Takih slov net!');
readln
end.
12 августа 2008 в 0:05
//Советую такой массив создать
type
R= record
st:string;
typ:integer; //1, 2, 3
end;
var
pr: array [0..1000] of R;
i:integer;
procedure str_add(s:string; t:integer);//t=1 or t=2 (слово из первой или второй строки)
var
f,j:integer;
begin
f:=0;
for j:=0 to i-1 do
if pr[j].st=s then
begin
f:=1;
pr[j].typ:=pr[j].typ or t;
end;
if f=0 then
begin
i:=i+1;
pr[i].typ:=t;
pr[i].st:=s;
end;
end;
11 августа 2008 в 23:03
Массив слов создается неверно… представим ситуацию, что есть повторяющиеся слова… тогда размер массива будет равен количеству одинаковых слов и потом поиск в двух массивах одинаковых займет очень много времени…
11 августа 2008 в 14:01
Это ты уже отредактировал сообщение и вставил нужный код на Паскале?
А что в задаче то надо корректировать? Под какое решение тебе надо условие подогнать?
11 августа 2008 в 13:05
Код понравился.
Первое – проверка, я немного не понял.
>>if (x<>y)and(ss1[x]=ss2[y]) then
Зачем хс у сравнивать?
Это ведь ошибка. Если два введенных текста начинаются с одинакового слова, твоя прога не найдет.
Второе, проверка в конце на (к=0) лишняя.
Если ты до того места дошел, значит, совпадений нет. (так как при обнаружении используешь exit)
11 августа 2008 в 13:02
так она на pascal и написана ? в чем проблема то?
11 августа 2008 в 13:00
Просьба не посылать в топку, а реально помочь