Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 9
1

Найти самое короткое слово предложения

28.09.2014, 15:49. Показов 2367. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Найти самое короткое слово одного предложения, которого нет в другом предложении.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2014, 15:49
Ответы с готовыми решениями:

Найти самое короткое слово из одного предложения, которого нет во втором предложении.
Даны два предложения. Нужно найти самое короткое из слов первого предложения, которого нет во...

Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором предложении.
Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором...

Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором предложении
Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором...

Найти самое длинное и самое короткое слово в строке и поменять их местами
Дано предложение. Найти самое длинное и самое короткое слова и поменять их местами. Удалить слова...

9
Заблокирован
28.09.2014, 18:11 2

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
uses Crt;
type
   matr = array[1..100] of string;
var
   s1,s2: string;
   m1,m2: matr;
   i,j,min,k1,k2,ik: integer;
label 100;
 
procedure sch(s: string; var m: matr; var k: integer);
var
   i1,i2: integer;
begin
   s:= s +' ';
   i1:= 0;
   k:= 1;
   repeat
      i2:= pos(' ',s);
      m[k]:= copy(s,i1+1,i2-i1-1);
      inc(k);
      delete(s,i2,1);
      i1:= i2-1;
   until i2>length(s);
   dec(k)
end;
 
BEGIN
   clrscr;
   writeln('Введите первое предложение');
   readln(s1);
   writeln('Введите второе предложение');
   readln(s2);
   sch(s1,m1,k1);
   sch(s2,m2,k2);
   min:= 255;
   for i:= 1 to k1 do begin
      for j:= 1 to k2 do
         if m1[i] = m2[j] then goto 100;
      if length(m1[i]) < min then begin
         min:= length(m1[i]);
         ik:= i;
      end;
100:
   end;
   writeln(m1[ik]);
   readln
END.
0
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 9
28.09.2014, 18:28  [ТС] 3
Нам с label нельзя работать(
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.09.2014, 18:45 4
Ну а hoch, без Label не может...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7794 / 4617 / 2830
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.09.2014, 19:57 5
Замените строку 38 на
Pascal
1
if m1[i] = m2[j] then Break;
, строки 8, 43 выкинуть.
1
Заблокирован
28.09.2014, 20:20 6
Bormant
Спасибо! Но Ваш вариант работать не будет.
Тут надо не просто выйти их цикла, но и ещё
перешагнуть через следующий за ним оператор
Вот код, который работает также как предыдущий.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
uses Crt;
type
   matr = array[1..100] of string;
var
   s1,s2: string;
   m1,m2: matr;
   i,j,min,k1,k2,ik: integer;
   b: boolean;
 
procedure sch(s: string; var m: matr; var k: integer);
var
   i1,i2: integer;
begin
   s:= s +' ';
   i1:= 0;
   k:= 1;
   repeat
      i2:= pos(' ',s);
      m[k]:= copy(s,i1+1,i2-i1-1);
      inc(k);
      delete(s,i2,1);
      i1:= i2-1;
   until i2>length(s);
   dec(k)
end;
 
BEGIN
   clrscr;
   writeln('s1 = ?');
   readln(s1);
   writeln('s2 = ?');
   readln(s2);
   sch(s1,m1,k1);
   sch(s2,m2,k2);
   min:= 255;
 
   for i:= 1 to k1 do begin
      b:= true;
      for j:= 1 to k2 do
         if m1[i] = m2[j] then
            begin b:= false; break end;
      if b then
         if length(m1[i]) < min then begin
            min:= length(m1[i]);
            ik:= i;
         end;
   end;
   writeln(m1[ik]);
   readln
END.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7794 / 4617 / 2830
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.09.2014, 20:34 7
Цитата Сообщение от hoch Посмотреть сообщение
но и ещё перешагнуть через следующий за ним оператор
извиняюсь, действительно не заметил.
1
Заблокирован
28.09.2014, 20:50 8
Все нормально. Это я ломал голову.
Написать ли мне лишний оператор if
или применить goto?
Спасибо! Это ведь сложная задача
и ее в одну минуту не разберешь.
Спасибо!
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
28.09.2014, 21:18 9
не уверен в правильности
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  s,s3,s1,s2:string;
  l:integer;
 begin
   write('Предложение 1>'); readln(s1);
   write('Предложение 2>'); readln(s2);
   s2:=#32+s2+#32;
   s1:=s1+#32;
   l:=length(s1);s3:='';
   repeat
     s:=copy(s1,1,pos(#32,s1)-1);
     if (s<>'') and (pos(#32+s+#32,s2)=0) and (length(s)<l)then 
        begin 
          l:=length(s);
          s3:=s;
        end;
        delete(s1,1,pos(#32,s1));
     until s1='';
     if s3='' then writeln('Все слова из Предложения 1 присутствуют в Предложении 2');
     writeln(s3);
 end.
Добавлено через 4 минуты
не верно я решил, надо оба первое со вторым и второе с первым сравнивать.

Добавлено через 19 минут
исправил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var
  p1,p2:string;
 function compare(ss1,ss2:string):string;
 var
   s,s1,s2,s3:string;
   l:integer;
 begin
  s2:=#32+ss2+#32;
   s1:=ss1+#32;
   l:=length(s1);s3:='';
   repeat
     s:=copy(s1,1,pos(#32,s1)-1);
     if (s<>'') and (pos(#32+s+#32,s2)=0) and (length(s)<l)then 
        begin 
          l:=length(s);
          s3:=s;
        end;
        delete(s1,1,pos(#32,s1));
     until s1='';
   compare:=s3;
 end;
 begin
   write('Предложение 1>'); readln(p1);
   write('Предложение 2>'); readln(p2);
      if compare(p1,p2)='' then writeln('Все слова из Предложения 1 присутствуют в Предложении 2')
                           else writeln('Короткое слово из Предложения 1: ',compare(p1,p2));
      if compare(p2,p1)='' then writeln('Все слова из Предложения 2 присутствуют в Предложении 1')
                           else writeln('Короткое слово из Предложения 2: ',compare(p2,p1));
 end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7794 / 4617 / 2830
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.09.2014, 23:49 10
Вот такой вариант, раздробленный по функциям:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
const
  LSize=100;
  delims=[#0..'/',':'..'@','['..'`','{'..#127];
type
  TWord=String[40];
 
function GetWord(s: String; var i: Integer): String;
var j: Integer;
begin
  while (i<=Length(s)) and (s[i] in delims) do Inc(i);
  j:=i;
  while (i<=Length(s)) and not (s[i] in delims) do Inc(i);
  GetWord:=Copy(s,j,i-j);
end;
 
function IsLess(s1, s2: String): Boolean;
begin
  IsLess:=(Length(s1)<Length(s2)) or 
          (Length(s1)=Length(s2)) and (s1<s2);
end;
 
procedure SplitWords(s: String; var w: array of TWord;
  wSize: Integer; var n: Integer);
var
  i, j, k: Integer;
  tw: TWord;
begin
  n:=0; i:=1;
  while (n<wSize) do begin
    tw:=GetWord(s,i); if tw='' then Break;
    j:=0; while (j<n) and IsLess(tw,w[j]) do Inc(j);
    if (j=n) or (j<n) and (tw<>w[j]) then begin
      Inc(n); for k:=n downto j+1 do w[k]:=w[k-1];
      w[j]:=tw;
    end;
  end;
end;
 
procedure MergeUniq(w1, w2: array of TWord; n1, n2: Integer;
  var w: array of TWord; Size: Integer; var n: Integer);
var
  i, i1, i2: Integer;
begin
  n:=0; i1:=0; i2:=0;
  while (i1<n1) and (i2<n2) do begin
    if IsLess(w1[i1],w2[i2]) then begin w[n]:=w1[i1]; Inc(i1); Inc(n); end
    else if IsLess(w2[i2],w1[i1]) then begin w[n]:=w2[i2]; Inc(i2); Inc(n); end
    else begin Inc(i1); Inc(i2); end;
  end;
  while (i1<n1) do begin w[n]:=w1[i1]; Inc(i1); Inc(n); end;
  while (i2<n2) do begin w[n]:=w2[i2]; Inc(i2); Inc(n); end;
end;
 
var
  w1, w2, w3: array [1..LSize] of TWord;
  c1, c2, c3: Integer;
  s: String;
begin
  Write('Предложение 1: '); ReadLn(s); SplitWords(s,w1,LSize,c1);
  Write('Предложение 2: '); ReadLn(s); SplitWords(s,w2,LSize,c2);
  MergeUniq(w1,w2,c1,c2,w3,LSize,c3);
  Write('Искомое слово');
  if c3>0 then WriteLn(': ',w3[1])
  else WriteLn(' не найдено.');
end.
Добавлено через 1 минуту
Особенности: знаки препинания также являются разделителями и не входят в слова.

Добавлено через 13 минут
hoch,
хотел обратить внимание, что вы решили немного другую задачу:
Найти самое короткое слово первого предложения, которого нет во втором предложении.

Но исходное задание было немного другим:
Найти самое короткое слово одного предложения, которого нет в другом предложении.
1
28.09.2014, 23:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2014, 23:49
Помогаю со студенческими работами здесь

Найти самое длинное и самое короткое слово и количество символов в них
Помогите решить задачи на строки.на стандартные операции и функции для строк 1.В предложении...

Найти во введенном тексте самое короткое и самое длинное слово
задача №3 Найти во введенном тексте самое короткое и самое длинное слово. заранее благодарен за...

В заданном предложении найти самое короткое и самое длинное слово
Делаю все строго по гайду, но после ввода строки вылетает &quot;exit code = 201&quot;. Пишу в free pascal'е....

Найти самое короткое и самое длинное слово в строке и их позиции
Тема: Разработка алгоритмов и программ обработки строк. Использование множеств с целью решения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru