Fórum Ajuda no código de um Sorteio #418161

07/06/2012

0

Primeiramente eu tenho um ListBox e um StringGrid (em Brancos)

O código abaixo me serve para sortear TIME inteiros (ex: time1, time2, time3, ...)

{
  qt := 0;
  i := 0;
  for i := low(times) to high(times) do
    times[i] := -1;
    ShowMessage(IntToStr(times[i]));

    while qt <= high(times) do
    begin
    n := random(high(times)+1) + 1;
    ShowMessage(IntToStr(n));
    achou := false;
    for i:=low(times) to high(times) do
      if times[i] = n then
        achou := true;
      if not achou then
        begin
          times[qt] := n;
          ShowMessage(IntToStr(times[qt]));
          qt := qt + 1;
        end;
    end;

  total := trunc((high(times)-1)/2);

  //ShowMessage(IntToStr(total));

  for i := 0 to total do
  begin
    StringGridJogos.Cells[0,i+1] := Time  + inttostr(times[i]);
    StringGridJogos.Cells[1,i+1] :=        x;
    StringGridJogos.Cells[2,i+1] := Time  + inttostr(times[total+i+1]);
  end;
  }


Só que eu quero que sorteia times vindo do Banco de Dados
O CÓDIGO QUE EU TENHO NO MOMENTO é este

var
  Times: array of string;
  PegaTimes: array of String;
  i, qt, n, total: integer;
  UltIndex: Integer;
  achou: boolean;
begin
  Randomize;
  //SetLength(times, QuantTime);
  SetLength(PegaTimes, QuantTime);
  SetLength(Times, QuantTime);

  i := 0;
  UltIndex := ListBoxTimes.Items.Count;
  ShowMessage(IntToStr(UltIndex));

  for i := 0 to UltIndex - 1 do
  begin
    ListBoxTimes.ItemIndex := Random(UltIndex);
    PegaTimes[i] :=  ListBoxTimes.Items.Strings[ListBoxTimes.ItemIndex];
    //ShowMessage(pegatimes[i]);
    times[i] := PegaTimes[i];
    //StringGridJogos.Cells[1,i+1] :=        x;
  end;

  // Agora PREENCHE As células do GRID
  for i := 0 to UltIndex - 1 do
  begin
    ShowMessage(PegaTimes[i] +    + PegaTimes[n]);
    for n := 0 to UltIndex do
      if ((PegaTimes[i] = PegaTimes[n]) or (n < 1)) then
      begin
        achou := true;
      end;
      achou := true;
      if not achou then
      begin
        StringGridJogos.Cells[2,i+1] := PegaTimes[i];
        StringGridJogos.Cells[0,i+1] := PegaTimes[i];
        StringGridJogos.Cells[1,i+1] :=        x;
      end;
  end;


Eu até consegui sortear só que ficava um time de um lado contra time em branco assim:

São Paulo x
x Internacional
Vasco x
x Atlético Mineiro

e assim vai


O segundo código não está dando certo se alguém puder me ajudar fico grato

Ewerton Rodrigues

Ewerton Rodrigues

Responder

Posts

07/06/2012

Marco Salles

olhando rapidamente , deve ser por causa do

StringGridJogos.Cells[2,i+1] := PegaTimes[i];
StringGridJogos.Cells[0,i+1] := PegaTimes[i];
StringGridJogos.Cells[1,i+1] := x;

o valor do i deve ser ... O , 1 , 2 , 3

quando for numero para alimenta o lado direito


São Paulo x
Vasco x

quando for numero impar alimenta o lado esquerdo

x Internacional
x Atlético Mineiro
Responder

Gostei + 0

07/06/2012

Ewerton Rodrigues

olhando rapidamente , deve ser por causa do

StringGridJogos.Cells[2,i+1] := PegaTimes[i];
StringGridJogos.Cells[0,i+1] := PegaTimes[i];
StringGridJogos.Cells[1,i+1] := x;

o valor do i deve ser ... O , 1 , 2 , 3

quando for numero para alimenta o lado direito


São Paulo x
Vasco x

quando for numero impar alimenta o lado esquerdo

x Internacional
x Atlético Mineiro


MAS você não saberia como fazer para sortear nomes vindo do Banco

O que você disse é o que eu coloquei lá em cima, ou seja, eu já sabia disto
MAS como fazer para não acontecer o que está acontecendo?

Responder

Gostei + 0

07/06/2012

Marco Salles


MAS você não saberia como fazer para sortear nomes vindo do Banco


e qual seria os campos do seu banco ???

Estou achando sua lógica um pouco confusa..

Se vc tiver 20 Times , acho que vc precisa é embaralhar esses times

de modo diferente a cada forma que vc prossessar a solicitação do sorteio

Seria isto ???
Responder

Gostei + 0

07/06/2012

Ewerton Rodrigues


MAS você não saberia como fazer para sortear nomes vindo do Banco


e qual seria os campos do seu banco ???

Estou achando sua lógica um pouco confusa..

Se vc tiver 20 Times , acho que vc precisa é embaralhar esses times

de modo diferente a cada forma que vc prossessar a solicitação do sorteio

Seria isto ???


Isto mesmo uma sorteio sempre diferente
A quantidade de times varia

Ahhh e os times são selecionados e vão para um listboxtime

E na verdade é isto um sorteio SEMPRE diferente e que aceite sempre qualquer quantidade de times(valores) [e é claro sempre para] ?

Vê se dá uma ajudinha valeu e abrigado por responder
Responder

Gostei + 0

08/06/2012

Marco Salles

então , primeiro vamos a um embalharador

coloque dois listBox .. No Primeiro será o seu Banco de Dados <Futuramente será trocado>
o segundo servira apenas para efeito de Visualizção <Sera trocado pelo seu stringGrid>

então teremos..
procedure TForm14.FormShow(Sender: TObject);
begin
randomize; //uma unica ves para a aplicaççao é necessário
end;

codigo simples para embaralhar

procedure TForm14.Button1Click(Sender: TObject);
var
pegatime:Array of String;
Aux:String;
i,sorteio,total:integer;
begin

total:=ListBoxTimes.Items.Count;
setlength(pegatime,total);
//carregando
for i := 0 to pred(ListBoxTimes.Items.Count) do
pegatime[i]:=ListBoxTimes.Items.Strings[i];

//embaralhando
for I := low(pegatime) to high(pegatime) do
begin
sorteio:= random(total);
Aux:=pegatime[sorteio];
pegatime[sorteio]:=pegatime[i];
pegatime[i]:=Aux;
end;

ListBox1.Items.Clear;

//apresebtar <Substirui pelo StringGrid>
for i := Low(pegatime) to (High(pegatime) div 2) do
ListBox1.Items.Add(pegatime[2*i]+ X +pegatime[2*i+1]);
end;
Responder

Gostei + 0

08/06/2012

Ewerton Rodrigues

Muito obrigado MARCO ANTONIO SALLES

Valeu

Fiz umas alterações aqui e se encaixou no que eu queria

só um erro que tinha no código que me passou é o X que tava sem aspas MAS isto foi o de menos VALEU mesmo
Responder

Gostei + 0

08/06/2012

Marco Salles

Muito obrigado MARCO ANTONIO SALLES

Valeu

Fiz umas alterações aqui e se encaixou no que eu queria

só um erro que tinha no código que me passou é o X que tava sem aspas MAS isto foi o de menos VALEU mesmo


Ok .. Mas o erro do X estas sem aspas não é meu . Dê a cezar o que é de Cezar .

Trata-se do editor do Forum que some com estas aspas

Muito obrigado
Responder

Gostei + 0

08/06/2012

Ewerton Rodrigues

Muito obrigado MARCO ANTONIO SALLES

Valeu

Fiz umas alterações aqui e se encaixou no que eu queria

só um erro que tinha no código que me passou é o X que tava sem aspas MAS isto foi o de menos VALEU mesmo


Ok .. Mas o erro do X estas sem aspas não é meu . Dê a cezar o que é de Cezar .

Trata-se do editor do Forum que some com estas aspas

Muito obrigado


Então tá certo, Valeu e até mais
Responder

Gostei + 0

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

Aceitar