Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.05.2014, 17:17
mihaSIK73 mihaSIK73 вне форума
Прохожий
 
Регистрация: 09.05.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Глупый вопрос про условие цикла

В общем, над сделать так, чтобы в коде...
Код:
begin
repeat  a1:=random(6)+1;
        a2:=random(6)+1;
        a3:=random(6)+1;
        a4:=random(6)+1;
        a5:=random(6)+1;
        a6:=random(6)+1;
until условие;
end;
...условие выглядело примерно так:
a1<>a2<>a3<>a4<>a5<>a6
Ответить с цитированием
  #2  
Старый 09.05.2014, 17:41
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А не проще сначала выбрать a[1], потом a[2] <> a[1], потом a[3] <> a[1] и a[3] <> a[2], и так далее?
Переведи алгоритм с русского на паскаль и все будет работать.
А если учесть, что чисел 6 и переменных 6, то можно каждому присвоить числа от 1 до 6 и использовать случайное перемешивание.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 09.05.2014 в 17:45.
Ответить с цитированием
  #3  
Старый 09.05.2014, 17:54
mihaSIK73 mihaSIK73 вне форума
Прохожий
 
Регистрация: 09.05.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
А не проще сначала выбрать a[1], потом a[2] <> a[1], потом a[3] <> a[1] и a[3] <> a[2], и так далее?
Точно, так легче. Спасибо.
Ответить с цитированием
  #4  
Старый 09.05.2014, 20:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от mihaSIK73
Точно, так легче...
Да не то что легче, - с приведенными условиями возможен даже вечный цикл - их выполнение может очень долго подбираться или вообще никогда не произойти
Ответить с цитированием
  #5  
Старый 09.05.2014, 21:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Alegun
Да не то что легче, - с приведенными условиями возможен даже вечный цикл - их выполнение может очень долго подбираться или вообще никогда не произойти
Совершенно верно. Даже если не случится вечный цикл, то всё равно это очень плохой способ расположить числа в случайной последовательности - зачем занимать процессор глупым подбором, даже не будучи уверенным в том подберёт ли он вообще нужную последовательность, если можно того же результата добиться с помощью очень быстрого (практически мгновенного) случайного перемешивания (как советует Bargest):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: array[1..6]of Integer;
  i, j, temp: Integer;
begin
  for i := 1 to 6 do a[i] := i;

  for i := 1 to 6 do
  begin
    j := Random(6) + 1;
    temp := a[i];
    a[i] := a[j];
    a[j] := temp;
  end;
Ответить с цитированием
  #6  
Старый 10.05.2014, 12:32
mihaSIK73 mihaSIK73 вне форума
Прохожий
 
Регистрация: 09.05.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
Хорошо

Цитата:
Сообщение от poli-smen
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: array[1..6]of Integer;
  i, j, temp: Integer;
begin
  for i := 1 to 6 do a[i] := i;

  for i := 1 to 6 do
  begin
    j := Random(6) + 1;
    temp := a[i];
    a[i] := a[j];
    a[j] := temp;
  end;
Спасибо, получилось!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter