Конференция "Прочее" » Все комбинации
 
  • tesseract © (24.10.08 11:38) [20]

    > Конечно, тут рекурсия нужна.


    За такое в эцих.
  • viper (24.10.08 11:38) [21]
    Ега, уверен. Дело в том, что, как заметил Правильный Вася, уровень вложенности неизвестен (последовательность A до F я дал как пример).
  • Ega23 © (24.10.08 11:40) [22]

    > она нужна, когда не известен заранее уровень вложенности
    > циклов


    Ну если у него строго 6 элементов - то да, нафиг не нужна. Если произвольное - то нужна.
    А из вышеприведённого кода я бы chr выкинул и на константы заменил.
  • brother © (24.10.08 11:41) [23]
    я понимаю, пятница - день тяжелый, но чем код не оптимален? и нафиг цикл? условие перебора в строго проеделенных пределах выполняется, что еще надо?
  • viper (24.10.08 11:41) [24]
    Повторюсь, глубина вложенности неизвестна. Сейчас пытаюсь реализовать рекурсию.
  • Ega23 © (24.10.08 11:42) [25]

    > уровень вложенности неизвестен


    Собственно, я так и думал. Иначе какое это студенческое задание.
    viper, читай про рекурсию. Пробуй, пытайся. Если ты не способен самостоятельно это задание сделать - бросай эту профессию. Я серьёзно.
  • Сергей М. © (24.10.08 11:43) [26]

    > не могу взять в толк АЛГОРИТМ перебора всех таких комбинаций


    Алгоритм циклический.

    В цикле последовательно перебираются все числа в диапазоне от [0..N^N - 1], где N - основание выбранной системы счисления (в твоем случае = 6)

    Каждое из этих чисел для визуального представления кодируется поразрядно в соответствии с выбранной системой кодирования значений разряда (в твоем случае это коды символов от A до F)
  • brother © (24.10.08 11:43) [27]
    > Повторюсь, глубина вложенности неизвестна.

    а где это в задании сказано?
  • Ega23 © (24.10.08 11:44) [28]

    > но чем код не оптимален?


    Зачем мильён раз char(i) вызывать?
  • viper (24.10.08 11:47) [29]
    ега, не стоит так сразу. Я хочу ПОНЯТЬ.
  • brother © (24.10.08 11:48) [30]
    > char(i) вызывать

    ну если так ;) Мне нравится, что автону нужно не только реализовать программу, но еще и оптимально)
  • Наиль © (24.10.08 11:49) [31]
    Договоримся, что слева младший символ, справа старший.
    1. Задаём и выводим мимимальное значение комбинации
    2. Увеличиваем младший символ на 1
    3. Если он стал больше максимально доступного в разряде,
    то его сбрасываем на минимум и увеличиваем на 1 следующего по старшинству
    и применяем к ниму правило 3.
    4. Выводим результат.
    5. Если не достигнут максимум (FFFFFF), то возвращаемся 2.

    Два вложенных цикла и ни каких рекурсий.
  • viper (24.10.08 11:50) [32]
    Ега, объясните, как сделать рекурсию. Я НЕ могу разобраться.
  • Наиль © (24.10.08 11:51) [33]
    Перепутал - младший справа.
  • Сергей М. © (24.10.08 11:54) [34]
  • viper (24.10.08 11:55) [35]
    Мне не нужна информация по поводу СС.
  • Сергей М. © (24.10.08 12:02) [36]

    > Мне не нужна информация по поводу СС


    Это почему же ?
  • Ega23 © (24.10.08 12:04) [37]

    > Ега, объясните, как сделать рекурсию. Я НЕ могу разобраться.


    procedure TestRecurrence(const CurrLevel, MaxLevel : Integer);
    begin
     if CurrLevel>MaxLevel then Exit;
     ShowMessage('Current level : ' + IntToStr(CurrLevel));
     TestRecurrence(CurrLevel + 1, MaxLevel);
    end;



    Пример вызова:
    TestRecurrence(1, 6);

  • viper (24.10.08 12:04) [38]
    Да потому что я думаю о рекурсии. Не могу понять. Вот:

    const count=3;//для кобинации до С
    var
     Form1: TForm1;
     counter: integer;
    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    memo1.Lines.Clear;
    counter := 1;
    makecomb('');
    end;

    procedure TForm1.makecomb(s: string);
    var i:integer;
       res:string;
    begin
    for i := 64 to 67 do
    begin
      if i<>64 then
      begin
       res := res + chr(i);
      end;
      memo1.Lines.Add(res);
       inc(counter);
    if counter>3 then  exit;
    makecomb(res);
    end;
    end;



    это неверно. Как же сделать верно?
  • viper (24.10.08 12:05) [39]
    Ега, о общих принципах рекурсии я знаю. Только как ее применить здесь? Объясните, подтолкните мысль, будьте снисходительней.
 
Конференция "Прочее" » Все комбинации
Есть новые Нет новых   [134444   +24][b:0.001][p:0.002]