Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Как организовать цикл?   Найти похожие ветки 

 
MVP   (2006-05-15 21:52) [0]

Цикл такой
 for i := 1 to 24 do
  for j := 2 to 23 do
   for k := 3 to 22 do


Надо чтоб он перебирал все не повторяющиеся значения. К примеру (4 4 3) и (4 3 4 ) - повтор, надо исключить повторы, которые могут получится путем переставления цифр


 
palva ©   (2006-05-15 23:45) [1]

for i := 1 to 24 do
 for j := max(2,i) to 23 do
  for k := max(3,j) to 22 do


 
Leonid Troyanovsky ©   (2006-05-15 23:50) [2]


> MVP   (15.05.06 21:52)  


 for i := 1 to 24 do
   for j := 1 to i-1 do
     for k := j+1 to i-1 do

--
Regards, LVT.


 
MVP   (2006-05-16 01:09) [3]

Вот мой вариант, вроде работает.

function Pro (i, j, k : integer):real;
 begin
  Result := sin(i)*sin(j)*sin(k);
 end;

var
 i, j , k : integer;
 count, nus, schet: integer;
 A : array of real;
 s : string;
begin
 count :=  0;

 schet := -1;

 for i := 1 to 24 do begin
  for j := 2 to 23 do begin
   for k := 3 to 22 do begin
    if (i=j) or (i=k) or (j=k) then continue;
  SetLength(A, count + 1);

       for nus := 0 to High(A) do
       if (A[nus] <> Pro (i, j, k)) then Inc(schet);

       if Schet = High(A) then
       begin
         A[count] := Pro (i, j, k);
         s := IntToStr(i) + " " + IntToStr(j) + " " +
              IntToStr(k) + " " + FloatToStr(A[count]);
         Memo1.Lines.Add(s);
         Inc(Count);
         schet := -1;

       end;
         schet := -1;

                       end;
                      end;
                     end;
end;


Может его как-то оптимизировать можно?


 
Desdechado ©   (2006-05-16 11:33) [4]

может, стоит прислушаться к советам?


 
tesseract ©   (2006-05-16 11:40) [5]


> Может его как-то оптимизировать можно?



>   SetLength(A, count + 1);

Убери это. Выделение памяти процесс небыстрый. Лучше хапни срзау побольше.


 
MVP   (2006-05-16 13:10) [6]

Я извиняюсь, я немного неправильно поставил вопрос: вообще не должно быть одинаковых чисел в одной комбинации, тоесть (3 2 3) - не подходит (4 4 4) - не подходит, (3 2 4) и (2 4 3) - из таких перестановок должна быть только одна комбинация, все остальные откидываться.
вот что должно быть для такого цикла

for i := 1 to 6 do
 for j := 2 to 5 do
   for k := 3 to 4 do


Должны браться только такие комбинации
(123), (124), (134), (153), (154), (234), (253), (254), (354), (623), (624), (634), (653), (654)


 
MVP   (2006-05-16 20:34) [7]

сорри, но может кто-то помочь? )


 
Loginov Dmitry ©   (2006-05-16 20:50) [8]

MVP   (16.05.06 13:10) [6]
А если так:
procedure TForm1.Button1Click(Sender: TObject);
var
 i,j,k: integer;
begin
for i := 1 to 6 do
for j := i + 1 to 6 do
  for k := j + 1 to 6 do
    Memo1.Lines.Add(Format("%d %d %d", [i, j, k]));
end;


 
Leonid Troyanovsky ©   (2006-05-16 21:04) [9]


> MVP   (16.05.06 20:34) [7]
> сорри, но может кто-то помочь? )


Объясни, почему отвергнуты

1,2,5
1,2,6
1,3,6
1,4,6
1,5,6
2,5,6

и, возможно, что тебя поймут.

--
Regards, LVT.


 
palva ©   (2006-05-16 21:25) [10]

> Объясни, почему отвергнуты
Третье число по новому условию в диапазоне 3..4


 
Leonid Troyanovsky ©   (2006-05-16 21:39) [11]


> palva ©   (16.05.06 21:25) [10]

Третье число по новому условию в диапазоне 3..4


Скорее, это не новое условие, а интерполяция из [0],
т.е., не совсем удачная попытка исключить повторения
за счет сужения границ. IMHO.

--
Regards, LVT.


 
MVP   (2006-05-16 23:57) [12]

Должны быть такие комбинации
123
124
134
153
154
234
253
254
354
623
624
634
653
654

Для того варианта который я написал, это номера ячеек массивов, в которых лежат числа, которые подставляются в такую формулу

Over[Ind]:=ArcTan2((Ts[i]-Ts[k])*(Xs[j]-Xs[i])-(Ts[i]-Ts[j])*(Xs[k]-Xs[i]),
(Ts[i]-Ts[j])*(Ys[k]-Ys[i])-(Ts[i]-Ts[k])*(Ys[j]-Ys[i]));


 
MVP   (2006-05-18 13:44) [13]

Может кто поможет ))


 
Сергей М. ©   (2006-05-18 13:48) [14]

Насколько критично время выполнения алгоритма формирования этих "троек" ?


 
MBo ©   (2006-05-18 13:49) [15]

>Может кто поможет ))
Вот я, к примеру, до сих пор не понял принципа, по которому формируются комбинации, так что помочь не  в силах...


 
Сергей М. ©   (2006-05-18 15:12) [16]


> MBo ©   (18.05.06 13:49) [15]


У Автора синдром Тузика: "Все понимаю, а сказать не могу")


 
MVP   (2006-05-19 09:12) [17]

Вот такой цикл
for i := 1 to 6 do
 for j := 2 to 5 do
  for k := 3 to 4 do


Для него должны быть комбинации
123
124
134
153
154
234
253
254
354
623
624
634
653
654

То есть, нельзя чтоб i=j, j=k, i=k и не допускаются во второй раз комбинации, которые можно образовать перестановкой чисел 334 и 343 не подходят, из них должна быть только одна комбинация не важно какая, лишь бы не было повтора...


 
Сергей М. ©   (2006-05-19 10:06) [18]

procedure TTestForm.Button3Click(Sender: TObject);
var
 i,j,k: Integer;
 sl, sl1: TStringList;
begin
sl := TStringList.Create;
sl.Sorted := True;
sl.Delimiter := " ";
sl1 := TStringList.Create;
sl1.Sorted := True;
sl1.Duplicates := dupError;
for i := 1 to 6 do
for j := 2 to 5 do
 for k := 3 to 4 do
   if (i = j) or (j = k) or (i = k) then
     Continue
   else begin
     sl.Clear;
     sl.add(format("%d", [i]));
     sl.add(format("%d", [j]));
     sl.add(format("%d", [k]));
     try
       sl1.Add(sl.DelimitedText);
       Memo1.Lines.Add(Format("%d %d %d", [i,j,k]));
     except
     end;
   end;
sl.Free;
sl1.Free;
end;


 
MBo ©   (2006-05-19 10:14) [19]

for i := 1 to 6 do
for j := i + 1 to 5 do
 for k := j + 1 to 4 do



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

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.04 c
2-1148008142
not ZX
2006-05-19 07:09
2006.06.04
как получить картинку окна если оно невидно?


15-1146990913
Gast
2006-05-07 12:35
2006.06.04
День радио


2-1148016114
Близнец
2006-05-19 09:21
2006.06.04
ShellExecuteEx и WaitForSingleObject


15-1147350795
carmen
2006-05-11 16:33
2006.06.04
tpu


2-1147937981
Megabyte
2006-05-18 11:39
2006.06.04
Взаимодействие с БД по интернету