Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1147093923
atruhin
2006-05-08 17:12
2006.06.04
Подсчет остатков товара в складских программах


3-1144923811
Dust
2006-04-13 14:23
2006.06.04
Кол-во уникальных записей в таблице MS Access


2-1148113941
varfolomey
2006-05-20 12:32
2006.06.04
Непонятное Access Violation


4-1142384579
GRAVIX
2006-03-15 04:02
2006.06.04
Работа с реестром на чистом WINAPI


15-1146756580
n_n_n
2006-05-04 19:29
2006.06.04
25 порт, Outlook





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский