Ajuda no código de um Sorteio
Primeiramente eu tenho um ListBox e um StringGrid (em Brancos)
O código abaixo me serve para sortear TIME inteiros (ex: time1, time2, time3, ...)
Só que eu quero que sorteia times vindo do Banco de Dados
O CÓDIGO QUE EU TENHO NO MOMENTO é este
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
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
Curtidas 0
Respostas
Marco Salles
07/06/2012
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
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
GOSTEI 0
Ewerton Rodrigues
07/06/2012
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
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?
GOSTEI 0
Marco Salles
07/06/2012
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 ???
GOSTEI 0
Ewerton Rodrigues
07/06/2012
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
GOSTEI 0
Marco Salles
07/06/2012
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;
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;
GOSTEI 0
Ewerton Rodrigues
07/06/2012
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
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
GOSTEI 0
Marco Salles
07/06/2012
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
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
GOSTEI 0
Ewerton Rodrigues
07/06/2012
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
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
GOSTEI 0