Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Вниз

Как сделать выборку всех вариантов из списка из M элементов?   Найти похожие ветки 

 
BetMaster   (2003-04-08 08:09) [0]

Как сделать выборку всех вариантов из N элементов из списка состоящего из М элементов?
Например
Есть список чисел 1,2,3,4
Надо выбрать из него по 2 элемента
то есть 12,13,14,23,24,34.
Подскажите пожалуйста.


 
MBo   (2003-04-08 08:11) [1]

два вложенных цикла.


 
BetMaster   (2003-04-08 08:19) [2]

Я так делал
но почему-то не получилось на больших значениях
например из 20 по 7


 
MBo   (2003-04-08 08:22) [3]

это просто очень долго - много вариантов.
два вложенных цикла - это для выборки по 2 элемента, в общем случае - рекурсия.


 
BetMaster   (2003-04-08 08:28) [4]

пожалуйста, если не трудно
набрасай примерно код
а то когда я через рекурсию пробовал у меня всё время какая-то ошибка вылетает


 
MBo   (2003-04-08 08:30) [5]

Я считаю, что такие вещи надо делать самостоятельно.


 
Johnmen   (2003-04-08 09:43) [6]

>MBo © (08.04.03 08:30)

Верно подмечено !

Еще скажу, что можно без рекурсии...


 
BetMaster   (2003-04-08 10:08) [7]

Johnmen
Как,если не секрет?

Вот пример выбора по 3

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
res:string;
begin
for i:=0 to memo1.Lines.Count-1 do
for j:=i+1 to memo1.Lines.Count-1 do
for k:=j+1 to memo1.Lines.Count-1 do
begin
res:=(memo1.Lines.Strings[i]+" "+memo1.Lines.Strings[j]+" "+memo1.Lines.Strings[k]);
memo2.Lines.add(res);
end;
end;

Может мне всё таки кто-нить скажет как сделать для любого количечтва через рекурсию
ну или без ней


 
MBo   (2003-04-08 10:16) [8]

только hint - ни к чему постоянно обращаться к свойствам Memo.
Держи все в переменных.


 
BetMaster   (2003-04-08 10:44) [9]

но мне надо вводить различные слова в качестве членов списка а потом куда-то выводить варианты выборки

и кстати то что я пытался сделать вчера вообще не рекурсия а хз.
щас нашёл что такое рекурсия, и как сделать это с её помощью не догоняю


 
Cobalt   (2003-04-09 00:52) [10]

Подсказка - попробуй рассказать последовтельность действий так, как будто это ты сам проходишь по списку, и выбираешь. Очень помогает понять, как строить алгоритм. Например:
берем 1-ый элемент,
прибавляем к нему 2-й
готово - 2 элемента.
прибавляем к 1-му 3-ий - готова вторая комбинация
прибавляем к 1-му 4-ий - готова третья комбинация
....
(в общем случае - прибавляем к нему очередной, +очередной +... до тех пор, пока не наберется нужное количество символов)


 
Спрашивающий   (2003-04-09 03:28) [11]

Согласен с MBo © решение таких простых
задач нужно искать самому
Просто было время набрасал за 2 минуты, думаю багов нет
(не проверял.)
procedure TForm1.Button1Click(Sender: TObject);
var
S:String;
J:Integer;
begin
S:=Edit1.Text;
repeat
For J:=2 To Length(S)Do
Memo1.Lines.Add(S[1]+S[J]);
Delete(S,1,1);

until Length(S)=1;

end;


 
BetMaster   (2003-04-09 07:38) [12]

Cobalt
да я это понял и написал код для этого выше
проблема в том что при таком варианте по сколько выбирать задаётся в design-time
а мне нужно чтобы я мог в режиме run-time указать по сколько выбирать(например введя число выборки в поле Edit)

Спрашивающий
то что ты написал работает только для выборки по 2
как и в том коде что я привёл выше(тока там по 3)
проблема в том что для изменения степени выборки приходиться в код добавлять новую переменную и цикл.

All
Ну скажите кто-нибудь как это через рекурсию сделать.


 
Cobalt   (2003-04-09 10:21) [13]

2 BetMaster
Так в том-то и заключается вся суть работы программиста - самому найти решение(тем более, алгоритмическое), хотя бы по аналогии...

(в общем случае - прибавляем к нему очередной, +очередной +... до тех пор, пока не наберется нужное количество символов) - это и есть рекурсия (очередной ты получаешь вызывая ту же функцию, но с несколько другими параметрами. А еще вероятнее, лучше будет хранить в глобальной переменной, или передавать в параметрах новой функции "предыдущую строку" - это проще, легче и удобней.)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
1-67331
Che
2003-04-09 12:30
2003.04.21
TMemo


1-67278
Serj
2003-04-11 15:27
2003.04.21
ComboBox


3-67141
Михаил Баринов
2003-04-03 11:16
2003.04.21
Получение значение параметра процедуры (Delphi 5, BDE + Oracle 8)


1-67363
evvcom
2003-04-09 02:07
2003.04.21
Проблемы с debuginfo в dll


8-67405
Jacobs
2003-01-20 20:30
2003.04.21
Помогите пож. с имейджами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский