singlepost

Нужна помощь в корректировки задачи << На главную или назад  

Даны 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.

30 ответов в теме “Нужна помощь в корректировки задачи”

  1. 6
    Валерий Волков ответил:

    //Советую такой массив создать
    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;

  2. 5
    Валерий Волков ответил:

    Массив слов создается неверно… представим ситуацию, что есть повторяющиеся слова… тогда размер массива будет равен количеству одинаковых слов и потом поиск в двух массивах одинаковых займет очень много времени…

  3. 4
    Алексей Гридин ответил:

    Это ты уже отредактировал сообщение и вставил нужный код на Паскале?
    А что в задаче то надо корректировать? Под какое решение тебе надо условие подогнать?

  4. 3
    Уладзімір Цімашкоў ответил:

    Код понравился.
    Первое – проверка, я немного не понял.
    >>if (x<>y)and(ss1[x]=ss2[y]) then
    Зачем хс у сравнивать?
    Это ведь ошибка. Если два введенных текста начинаются с одинакового слова, твоя прога не найдет.

    Второе, проверка в конце на (к=0) лишняя.
    Если ты до того места дошел, значит, совпадений нет. (так как при обнаружении используешь exit)

  5. 2
    Дима Мироводин ответил:

    так она на pascal и написана ? в чем проблема то?

  6. 1
    Игнат Неадекват ответил:

    Просьба не посылать в топку, а реально помочь

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.