Fórum Distribuição Randômica #284695

14/06/2005

0

Olá pessoal,
Tenho alguns registros numa StringGrid assim:

CENA1
CENA2
CENA3
CENA4

E tenho uns registros para serem inseridos aleatoriamente, de forma que a StringGrid ficará assim:

CENA1
FASE10
FASE12
FASE5
FASE8
CENA2
FASE7
FASE5
FASE8
CENA3
etc...

Ou seja, os registros FASE1, FASE2, etc, deverão ser inseridos aleatoriamente, sem se repetirem dentro de uma mesma cena. Não precisa haver o mesmo número dee fases entre as cenas, mas essa distrribuição deve ser equilibrada.

Alguém tem alguma idéia? Por onde começar????


Rafaaugusto

Rafaaugusto

Responder

Posts

14/06/2005

Beppe

O básico seria assim:

const
  MaxFases = { numero maximo de fases em cada cena }
var
  F: array[1..TotalFases] of Boolean;
  I, J: Integer;
begin
  FillChar(F, SizeOf(F), 0);
  for I := 1 to TotalCenas do
  begin
    for J := 1 to MaxFases do
      F[Random(TotalFases) + 1] := True;
    { ao chegar aqui, as fases escolhidas estão como True em F }
  end;
end;


O que pode variar é a parte que dá um indeterminismo no número de fases por cena. Se fossem fixas, um novo random pracisaria ser gerada em caso de colisão. São as colisões que determinam o número de fases escolhidas neste caso.


Responder

Gostei + 0

15/06/2005

Rafaaugusto

Ok, obrigado pela resposta.
E nesses casos de colisão, como devo tratar?


Responder

Gostei + 0

16/06/2005

Rafaaugusto

E nesses casos de colisão, como devo tratar?


Responder

Gostei + 0

17/06/2005

Beppe

Mantenha um array de booleanos ou mapa de bits, uma entrada para cada ítem no universo(ex. 10 entradas para 0..9). Sempre que um número for gerado, vc o marca, caso ele já estava vc gera um outro número, repetindo quantas vezes forem necessárias.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar