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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 12:38   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию Генерация строк

Имеется строка вида sdgsdg7832@(@, длина строки может меняться, как и символы в ней.
Нужно сгенерировать ВСЕ варианты строк размером 4 (может меняться) знака которые должны содержать данные символы. Как пример :

строка 123456
размер 7
На выходе
1111111
...........
6666666

В голову пока ни чего не приходит. Сложность в том что все может меняться, т.е нужен универсальный алгоритм. Может кто-то уже делал подобное ?
bakanaev вне форума Ответить с цитированием
Старый 14.03.2013, 13:00   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Для n=4:
Код:
for i:=1 to length(s) do
 for i2:=1 to length(s) do
  for i3:=1 to length(s) do
   for i4:=1 to length(s) do
     Add(s[i],s[i2],s[i3],s[i4]);
Теперь просто надо переделать для любого n.
Kix.IV вне форума Ответить с цитированием
Старый 14.03.2013, 13:25   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Теперь просто надо переделать для любого n.
Вот как раз это я и не могу придумать))) Но спасибо
bakanaev вне форума Ответить с цитированием
Старый 14.03.2013, 13:34   #4
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Edit1 - исходное слово
Edit2 - кол-во символов в слове
Memo1 - поле вывода
Код:
var
  n,c,g,g2: integer;
  i: array of integer;
  s,s2: string;
begin
  n := StrToInt(Edit2.Text);
  s := Edit1.Text;
  c := Length(s);
  setlength(i,n);
  for g := 0 to n-1 do i[g] := 1;

  repeat
    s2 := '';
    for g2 := 0 to n-1 do
     s2 := s2 + s[i[g2]];
    Memo1.Lines.Add(s2);

    g := 0;
    while i[g] = c do inc(g);
    if g>0 then
      for g2 := g-1 downto 0 do i[g2] := 1;
    inc(i[g]);
  until i[n-1] = c;
end;
Работоспособность не проверял. Первое, что в голову пришло, то и написал.

Последний раз редактировалось Kix.IV; 14.03.2013 в 13:47.
Kix.IV вне форума Ответить с цитированием
Старый 14.03.2013, 14:22   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Рекурсивный способ. Чем больше LenIn и особенно LenOut, тем дохлей. Впрочем как и любым другим способом
Код:
var Etalon: String;
    LenIn,LenOut: Integer;

procedure TForm1.InitText(PosOut: Integer; Text: String);
var s: String;
    i: Integer;
begin
  for i:=1 to LenIn do begin
    s:=Text+Etalon[i];
    if PosOut=LenOut then Memo1.Lines.Add(s)
                     else InitText(PosOut+1,s);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Etalon:='sdgsdg7832@(@';
  LenIn:=Length(Etalon);
  LenOut:=4;
  InitText(1,'');
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательная генерация строк(с началом из определённой точки) vlad.md Общие вопросы Delphi 3 11.12.2012 18:09
Ввести последовательность строк. Подсчитать количество совпадающих строк. на языке SHELL lj23lj Фриланс 1 30.03.2012 16:41
Как сделать автозаполнение строк, которые зависят от строк другого столбца путвфда_иил Microsoft Office Excel 19 29.08.2010 17:16
Добавление строк в таблицу с вставкой в них текста и чередованием фона строк Centurion2xx6 Microsoft Office Word 9 30.03.2010 11:00
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14