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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2014, 16:14   #1
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Восклицание Массивы. дружественные слова

Помогите, пожалуйста! Сама вообще не могу решить.
Два слова назовем дружественными, если из букв одного можно составить другое и из букв второго составить первое. Даны два слова. Будут ли они дружественными?
ksesh вне форума Ответить с цитированием
Старый 28.05.2014, 19:56   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код не мой, не проверял.
Код:
function IsFrendly(d, r: string): boolean;
var
  i: integer;
  b: set of char;
begin
  b := [];
  for i := 1 to length(d) do
    b := b + [d[i]];
  for i := length(r) downto 1 do
    if r[i] in b then
      delete(r, i, 1);
  if length(r) = 0 then
    isfrendly := true
  else
    isfrendly := false;
end;

var
  s, t: string;
begin
  write('Введите первое слово:  ');
  readln(s);
  write('Введите второе слово:  ');
  readln(t);
  if isfrendly(s, t) then
    writeln('Слова дружественные.')
  else
    writeln('Слова недружественные.');
  readln;
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 30.05.2014, 01:38   #3
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
По умолчанию

большое спасибо. работает. только глюк в том, что по идее таракан и таран являются недружественными, т.к. из таракан можно составить таран, а из тарана обратно уже никак. а прога пишет дружественные.
ksesh вне форума Ответить с цитированием
Старый 30.05.2014, 09:28   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

А если так попробовать:
Код:
If (isfrendly(s,t)) and (isfrendly(t,s)) then
...
???
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 30.05.2014, 10:31   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ksesh, а слова ТАРА и АРАРАТ являются дружественными?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2014, 16:29   #6
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
По умолчанию

порога считает дружественными. а по идее, же из слова ТАРА АРАРАТ не составишь, не хватает букаф.
ksesh вне форума Ответить с цитированием
Старый 02.06.2014, 00:37   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ksesh Посмотреть сообщение
порога считает дружественными. а по идее, же из слова ТАРА АРАРАТ не составишь, не хватает букаф.
Вот теперь понятно, что каждую букву из слова можно использовать строго один раз.

проверяйте:
Код:
{функция проверку двух строк на "дружественность"}
function IsFriendly(const s, r: string): boolean;
var
  i: integer;
  s2 : string;
begin
  IsFriendly := false;
  s2 := r;
  for i := 1 to length(s) do
    if Pos(s[i], s2) = 0 then Exit  {нет буквы - сразу выход, слова недружественные}
    else Delete(s2, Pos(s[i], s2), 1);  

  isFriendly := length(s2) = 0
end;


begin
  WriteLn( IsFriendly('ЛАТ','ТАЛ'));
  WriteLn( IsFriendly('ТАРА','АРАРАТ'));
  WriteLn( IsFriendly('АРАРАТ','ТАРА'));
  Readln
end.

Последний раз редактировалось Serge_Bliznykov; 02.06.2014 в 00:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2014, 05:16   #8
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
По умолчанию

вообще никак. не работает.
ksesh вне форума Ответить с цитированием
Старый 02.06.2014, 09:51   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ksesh Посмотреть сообщение
вообще никак. не работает.
не понял! Что значит "вообще никак не работает"?!
Не запускается? Запускается, но не выдаёт результата? Запускается, но выдаёт ошибку?

я же приложил к функции небольшие тестовые примеры, чтобы убедится, что функция работает. У меня отработало нормально.

Рассказывайте, что Вы делаете и что у Вас не работает!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2014, 11:31   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Рассказывайте, что Вы делаете и что у Вас не работает!
Ставлю на "ТС не смог прочитать две строки"..

Как вариант
Код:
type
   TArr = array ['A'..'Z'] of Integer;

procedure Init(var s : Tarr);
var
   ch : Char;
begin
   for ch := Low(s) to High(s) do
      s[ch] := 0;
end;

procedure P(var s : Tarr; f : string; value : Integer);
var
   ch : Char;
begin
   for ch in f do
      Inc(s[ch], value)
end;

function Check(s : TArr) : Boolean;
var
   ch : Char;
begin
   Check := FALSE;
   for ch := Low(s) to High(s) do
      if s[ch] <> 0 then Exit;

   Check := TRUE
end;

var
   a, b : string;
   s : TArr;

begin 
   ReadLn(a);
   ReadLn(b);
   Init(s);P(s, a, 1); P(s, b, -1);
   WriteLn(Check(s))
end.
Poma][a вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дружественные классы zla9_kolu4ka Общие вопросы C/C++ 15 28.02.2014 16:53
Дружественные объекты 220Volt Общие вопросы C/C++ 4 31.03.2013 00:32
Вывести слова предложения в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего слова ( java ) huhu Помощь студентам 0 06.04.2012 19:42
символьные массивы, удалить слова. Tiva Помощь студентам 0 05.12.2011 18:50
строка (занести в массивы - буквы и слова) Lodyr Помощь студентам 21 21.12.2009 20:09