• 0
Авторизация  
neo

Как правильно сделать цикл?

Вопросы

Всем привет! я тут сделал пасьянс на Андройд

но обнаружил баг =( когда мешаю карты приложение иногда зависает и вырубается

я так понял проблема с этим циклом

  for pos:=1 to 20 do
  begin

    repeat
      empty:=True;
      r:=randomRange(1, 21);
      for n:=1 to pos do
      if (card[n]=r) then empty:=False;
    until empty=true;

    card[pos]:=r;

    Memo1.Lines.Add(inttostr(card[pos]));
  end;

тут генерируется числа от 1 до 20.. каждое число уникальное..

что неужели для современных гаджетов это очень мощная нагрузка на проц? сгенерировать таким образом 20 чисел?

кстати если я меняю строчку r:=randomRange(1, 21); на r:=random(19)+1; то вообще открывается только чёрный экран и ничего не видно... =(

Может быть кто нибудь знает как это ещё можно записать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 ответа на этот вопрос

  • 0

Я так понимаю, что у Вас есть "массив" из 20 элементов, который нужно сформировать (перемешать) в произвольном порядке. Так?

Я для похожих целей пользуюсь следующим:

var
  a: array [0 .. 19] of Integer;
  i, j, k: Integer;
begin
  //Заполняем начальными данными
  for i := Low(a) to High(a) do
    a[i] := i;
  //Перемешиваем
  for i := High(a) downto 1 do
    begin
      j := Random(i - 1);
      if i <> j then
        begin //Меняем местами элементы
          k := a[j];
          a[j] := a[i];
          a[i] := k;
        end; 
    end;
end;

 

Изменено пользователем sinuke

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

спасибо сейчас попробую)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу