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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 17:30   #1
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
По умолчанию Генератор текста из массива TStringList-ов

Вечер добрый. Или у кого что. В общем есть массив TStringList-ов определенной "длины", то есть сколько конкретно в каждом случае TStringList известно и равно переменной rr. Нужно чтобы в отдельном Мемо или СтрингЛисте создавался текст из всех этих листов со всеми возможными вариантами. Пример:
лист1
1
2
3
Лист2
4
5
6
Лист3
7
8
9

В результате получаем: Лист4 147
148
149
157
158
159
167
168
169
247
248
249
257
и т.д.


Сделать чтоб получалось вида:
147
258
369
Я знаю, а вот как сделать чтоб все варианты получить, ну никак не могу понять, уже 2 суток пытаюсь и никак, надеюсь на вашу помощь))
Agnostik вне форума Ответить с цитированием
Старый 19.03.2013, 18:33   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Просто перебор всех вариантов. Решений в интернете много. Что-то похожее пару дней назад спрашивали.
Kix.IV вне форума Ответить с цитированием
Старый 19.03.2013, 18:57   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Сделать чтоб получалось вида:
147
258
369
Я знаю
т.е. знаю как
Код:
x:=list1[i] +list2[i] + ist3[i];
а как сделать
Код:
x:=list1[i1]+list2[i2]+list3[i3];
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.03.2013, 19:46   #4
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
По умолчанию

Честно говоря уже спать хочется, поэтому не пинайте, если глупость какую-нибудь напишу. Но сколько будет "list" всего изначально не известно и задается каждый раз отдельно, может быть, будет 2 всего или 3, а, может быть, 127. И для каждого случая так писать не выход. Пробовал через циклы, но уже штук 5, наверно, разных перепробовал и никак не получается нужный результат. Проблема лично для меня именно то, что количество листов каждый раз задается отдельно.

Последний раз редактировалось Agnostik; 19.03.2013 в 19:49.
Agnostik вне форума Ответить с цитированием
Старый 19.03.2013, 20:04   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

если объемы небольшие (N1*N2*..Nm<2^31) можно попробовать формулу вычисления одномерного индкеса (j) по имеющемуся многомерному (i1,i2,...im)

N1...Nm число записей в соответсвующем списке.

j:=(..(i1*N1+i2)*N2+...)*im-1 +im; // im-1 это i c индексом m-1
в обратную сторону (что-то вроде этого)
Код:
j:=0 to (N1*N2*...*Nm) -1 do

n1:=j div (N1*N2*..*Nm-2*Nm-1);
j1:=j mod (N1*N2*..*Nm-2*Nm-1);

n2:=j1 div (N1*N2*...Nm-2);
j2:=j1  mod (N1*N2*...*Nm-2);

.....
nm-1:=jm-2 div N1;
jm-1:=jm-2 mod N1;
....
P.S. Еще один способ из старых тем.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.03.2013 в 20:34.
evg_m вне форума Ответить с цитированием
Старый 19.03.2013, 20:05   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чуть другое, но идея та же
http://programmersforum.ru/showthread.php?t=230210
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2013, 11:14   #7
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
По умолчанию

С рекурсией честно говоря вообще не понял.
Цитата:
P.S. Еще один способ из старых тем.
если правильно понял этот пример, то я примерно так же делал, но там массив счетчиков, а у меня как бы массив из массивов строк, если можно так выразиться, поэтому каждую строку получить не могу всё равно. Вот это что-то более близкое и понятное мне, но за последний час так и не смог приладить под себя, чтоб добавляло по слову из каждого массива, а не по символу из строки. А вообще Спасибо всем, не ожидал. Думал что вообще никто откликнется.
Agnostik вне форума Ответить с цитированием
Старый 24.03.2013, 12:18   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
С рекурсией честно говоря вообще не понял
Цитата:
Вот это что-то более близкое и понятное мне
Вот то это и есть с рекурсией Чуть подправил под несколько StringList-ов
Код:
var CountList: Integer;
    ArrayList: array of TStringList;

procedure TForm1.InitText(Index: Integer; Text: String);
var s: String;
    i: Integer;
begin
  for i:=0 to ArrayList[Index].Count-1 do begin
    s:=Text+ArrayList[Index].Strings[i];
    if Index=CountList-1 then Memo1.Lines.Add(s)
                         else InitText(Index+1,s);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  CountList:=3;
  SetLength(ArrayList,CountList);
  ArrayList[0]:=TStringList.Create;
  ArrayList[0].Add('1');
  ArrayList[0].Add('2');
  ArrayList[0].Add('3');
  ArrayList[0].Add('4');
  ArrayList[1]:=TStringList.Create;
  ArrayList[1].Add('D');
  ArrayList[1].Add('L');
  ArrayList[1].Add('V');
  ArrayList[2]:=TStringList.Create;
  ArrayList[2].Add('Ж');
  ArrayList[2].Add('ЮЮ');
  ArrayList[2].Add('ЦУЪ');

  InitText(0,'');

  for i:=0 to CountList-1 do ArrayList[i].Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2013, 13:31   #9
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
Радость

Аватар, я имел ввиду, что не понял пример, который дал evg_m. Всем спасибо за помощь, воспользовался решением от Аватара. За что Вам отдельно огромное спасибо. Тему можно закрывать.
Agnostik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайно выборки из массива Palomnik1096 Microsoft Office Excel 11 27.01.2012 15:10
Генератор на основе текста kroŧ Помощь студентам 5 04.07.2010 15:45
Генератор текста(биграмм) darel Помощь студентам 0 29.03.2010 11:21
Генератор текста, Анализатор текста, График, С++ darel Помощь студентам 0 14.03.2010 20:15
Генератор случайных чисел для массива! Tetramorf Общие вопросы C/C++ 8 11.03.2010 13:51