Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизКак организовать цикл? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c