Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406

Найти в тексте все пары слов, каждое из которых можно получить перестановкой букв второго слова

13.12.2009, 13:10. Показов 3686. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дан русский текст.Найти в тексте все пары слов ,каждое из которых можно получить перестановкой букв второго слова.
Например,слова "слово", "волос" образуют такую пару.

Прошу помощи
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2009, 13:10
Ответы с готовыми решениями:

Вывести в выходной файл такие пары слов, чтобы одно из них можно было получить перестановкой букв другого слова
Во входном файле дан текст, в котором есть слова. Вывести в выходной файл такие пары слов, чтобы одно из них можно было получить...

Удалить слова, из которых перестановкой букв можно получить палиндром, и продублировать остальные слова
Задание такое: удалить слова, из которых перестановкой букв можно получить палиндром, и продублировать остальные слова. Заранее...

Найти количество слов, которые можно получить перестановкой букв данного слова
Найти количество слов, которые можно получить перестановкой букв данного слова "Население" при условии, что одинаковые буквы не...

23
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
13.12.2009, 13:39
Цитата Сообщение от Gabberr
Прошу помощи
Gabberr, ну алгоритм такой:
1. выделяете слова из строки и запоминаете их в массиве
2. пробегаете массив двойным циклом и проверяете каждое слово следующим образом: если количество соответствующих букв равно, то из букв первого слова можно составить второе, а значит его нужно вывести на печать...
Вот в принципе и всё... Писать многовато, но думаю это Вам нужна Ваша задача, поэтому не поленитесь и напишите...
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
13.12.2009, 21:06  [ТС]
но если в массив записать все слова,а они разной длны, и в массиве ничем разделяться не будут, как тогда в массиве отличить одно слово от другого?
може быть лучше каждое слово записать в отдельную строку и уже потом если длины строк совпадают проверять буквы?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
13.12.2009, 23:43
Gabberr, Вы написали нелепицу. Если Вы чего то не знаете лучше не говорить об этом. В массиве они становятся элементами массива, и к каждому слову можно будет обратиться по индексу...
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 14:52  [ТС]
я прекрасно понимаю,что они становятся элементами массива!но как в массиве отличить одно слово от другого?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.12.2009, 14:59
Пишем функцию для определения нужных пар слов.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
function Sovp(s1,s2:string):boolean;
var m1,m2:set of char;
    i:byte;
begin
m1:=[];
m2:=[];
for i:=1 to length(s1) do
m1:=m1+[s1[i]];
for i:=1 to length(s2) do
m2:=m2+[s2[i]];
if m1-m2=[] then Sovp:=true
else Sovp:=false;
end;
Далее как написал Inadequate, делаем массив и в двойном цикле сравниваем слова, типа так
Pascal
1
2
3
4
for i:=1 to n-1 do
for j:=i+1 to n do
if Sovp(mas[i],mas[j]) then 
writeln(mas[i],'  ',mas[j]);
1
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 16:00  [ТС]
спасибо!щас проверю
со можеством хорошо придумано!

Добавлено через 55 минут
написал вот так,ничего не работает
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
program lab7;
uses crt;
type
    vector=array [1..50] of char;
 
 
 
function Sovp(s1,s2:string):boolean;
var m1,m2:set of char;
    i:byte;
begin
  m1:=[];
  m2:=[];
   for i:=1 to length(s1) do
     m1:=m1+[s1[i]];
   for i:=1 to length(s2) do
     m2:=m2+[s2[i]];
   if m1-m2=[] then
     Sovp:=true
   else
     Sovp:=false;
end;
 
var
   s,s1:string;
   i,j,n:integer;
   mas:vector;
 
begin
 clrscr;
 writeln('введите строку');
 readln(s);
 
 for i:=1 to length(s) do
 mas[i]:=s[i];
 
  for i:=1 to n-1 do
  for j:=i+1 to n do
    if Sovp(mas[i],mas[j])=true then
      writeln(mas[i],'  ',mas[j])
    else
      write('*нет таких пар');
end.
с кавиатуры же вводится много слов ,разделённых пробелами
как тогда дпустимо вот это
if Sovp(mas[i],mas[j])=true then
writeln(mas[i],' ',mas[j])
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
14.12.2009, 16:03
Gabberr, да уж... А Вы что "воздух" с "воздухом" сравниваете?
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 16:05  [ТС]
дак вот я и подумал))
тоесть нужно каждое слово записать в отдельнй массив?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
14.12.2009, 16:05
Обратите внимание на вот эту цитату (особенно на выделенные слова)
Цитата Сообщение от Inadequate Посмотреть сообщение
выделяете слова из строки и запоминаете их в массиве
Цитата Сообщение от Gabberr Посмотреть сообщение
тоесть нужно каждое слово записать в отдельнй массив?
а теперь вот на эту (особенно на число)
Цитата Сообщение от Inadequate Посмотреть сообщение
выделяете слова из строки и запоминаете их в массиве
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 16:07  [ТС]
ой
значит нужно все таки все слова записать в один массив?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
14.12.2009, 16:08
Цитата Сообщение от Gabberr Посмотреть сообщение
значит нужно все таки все слова записать в один массив?
Вы весьма догадливы...
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 16:09  [ТС]

ну сейчас попробую исправлю

тоесть если задать строку со словами ничем не разделёнными,задача должна работать!
ведь в задаче же и так все содержимое строки записывается в один массив!
а она не работает!
0
 Аватар для yanyk1n
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
14.12.2009, 16:11
Мой вариант решения:
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
uses crt;
var count,i,j:integer;
    st,buf:string;
    slova:array[1..100]of string;
 
function shifr(str:string):string;
var ind:boolean;
    buf:char;
    i:integer;
begin
 repeat
 ind:=true;
 for i:=1 to length(str)-1 do
  if str[i]>str[i+1] then
  begin
   buf:=str[i];
   str[i]:=str[i+1];
   str[i+1]:=buf;
   ind:=false;
  end;
 until ind;
 shifr:=str;
end;
 
begin
 clrscr;
 write('Cтрока -> ');
 readln(st);
 count:=1;
 repeat
  if (st[1]=' ') or (length(st)=0) then while st[1]=' ' do delete(st,1,1)
  else
  begin
   while (st[1]<>' ') and (length(st)>0) do
   begin
    buf:=buf+st[1];
    delete(st,1,1);
   end;
  slova[count]:=buf;
  buf:='';
  inc(count);
  end;
 until (length(st)=0) and (length(buf)=0);
 
 for i:=1 to count-1 do
 for j:=i+1 to count-1 do if shifr(slova[i])=shifr(slova[j]) then writeln(slova[i],' <==> ',slova[j]);
 readln;
end.
1
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
14.12.2009, 18:19  [ТС]
как в вашей задаче вводить слова?

попробовал ввести "слово" "волос" вводил и через зпятую и через пробел,в результате на экран ничего не вывелось

Добавлено через 29 минут
разобрался!прекрасная задача!

Добавлено через 1 час 12 минут
не могли бы объяснить что значит этот перебор?
Цитата Сообщение от k1ry4 Посмотреть сообщение
for i:=1 to count-1 do
for j:=i+1 to count-1 do
Добавлено через 15 минут
И ещё не могли бы подробно объяснить действия в функции?пожаааааалуйста!!!
0
 Аватар для RAINGM
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 18
06.03.2020, 18:11
Цитата: "разобрался!прекрасная задача!"
Не могли бы вы рассказать, что именно было не так в последнем коде, тоже не работает.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
06.03.2020, 18:19
RAINGM, поменять условия местами в строке, где у вас возникло
Цитата Сообщение от RAINGM Посмотреть сообщение
тоже не работает
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
06.03.2020, 19:32  [ТС]
Пришло уведомление на почту, тема ожила спустя 10 лет.

Перечитываю стыдно за себя становится, несмышленый совсем был

Сейчас работаю на позицию senior android developer с 6 годами опыта на плечах. Хорошо, что не забросил программирование тогда!
Всем спасибо!
0
 Аватар для RAINGM
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 18
11.03.2020, 12:08
Цитата: "RAINGM, поменять условия местами в строке, где у вас возникло"
Не совсем понимаю.
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
11.03.2020, 17:29
RAINGM, тебе нужен код?

тогда попробуй такое решение:

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
{$CODEPAGE CP866}
function SortChars(const S:string):string;
var
  res : string;
  i,j : integer;
  ch : char;
begin
  res := S;
  for i:=1 to Length(res)-1 do
    for j:=i+1 to Length(res) do
      if res[i]>res[j] then begin
        ch := res[i]; res[i] := res[j]; res[j] := ch
      end;
  SortChars := res    
end;
 
var
  s : string; 
  i,j,iPrev,n: integer;
  arrWords : array[1..250] of string;
begin
  s := 'мама  взяла волос и лозу пропела папе слово про перо золу и улоз'; {тестовый набор}
  {  readln(s); }
  
  s := s + ' '; 
  iPrev := 1;
  n := 0;
  for i := 2 to length(s) do
    if s[i] = ' ' then begin
         if s[i-1]<>' ' then begin
            inc(n);
            arrWords[n] := Copy(s,iPrev, i-iPrev);
         end; 
         iPrev := i+1; 
      end;
 
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if (Length(arrWords[i])=Length(arrWords[j])) and 
           (SortChars(arrWords[i]) = SortChars(arrWords[j])) 
        then WriteLn('Пара слов: ',arrWords[i],':',arrWords[j]);
 
end.
p.s. вместо неэффективного и громоздкого статического массива слов на 250 строк намного лучше взять динамический массив. просто я писал максимально универсально, почти под любой Паскаль.

Добавлено через 2 часа 17 минут
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
{$CODEPAGE CP866}
эта строчка у меня затесалась из Free Pascal, эту строчку можно (и нужно) безболезненно удалить, она в общем случае не нужна!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2020, 17:29
Помогаю со студенческими работами здесь

Найти количество слов, которые можно получить перестановкой букв данного слова
Сколько различных слов можно получить перестановкой букв слова &quot;ПРЕЦЕНДЕНТ&quot; - буквы Е не стоят рядом. (в слове намеренно допущена...

Сколько различных слов можно получить перестановкой букв слова?
Сколько различных слов можно получить перестановкой букв слова &quot;приватизация&quot; - чередуются пары гласных и согласных букв?

Сколько различных слов можно получить перестановкой букв слова?
2)сколько различных слов можно получить перестановкой букв слова «сарабанда» если буква «а» идёт непосредственно после «с» Помогите...

Сколько различных слов можно получить перестановкой букв слова?
1) Сколько различных слов можно получить перестановкой букв слова &quot;диктатура&quot;, как гласные, так и согласные идут в алфавитном порядке ...

Сколько различных слов можно получить перестановкой букв слова?
Сколько различных слов можно получить перестановкой букв слова &quot;взбрыкнул&quot;, при условии, что между двумя гласными находятся 3...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru