Gerador de Números Em Delphi
Bom dia Mestre das Programação em Delphi. Eu andei pesquisando na internet um assunto referente a geração de sorteios da Mega Sena e em um site achei algo similar ao que eu tinha em mente, mais ainda não esta como eu imaginei. Vou posta o código abaixo. No código fiz uma mudança, lá no site que eu achei esse código no final ele colocava uma mensagem com o resultado, eu coloquei um Memo.
Pois bem o que estou querendo implementar nesse código é o seguinte: Eu colocar um TEdit (que receba apenas numero 1 .....), ai quando clica no botão ele gere a quantidade de sorteios que a pessoa digitou no Edit. Pois da forma que esta tem que fica clicando no botão para gerar os sorteios. Conto com a ajuda de vocês para fazer essa implementação no código. Desde já grato pela ajuda.
Pois bem o que estou querendo implementar nesse código é o seguinte: Eu colocar um TEdit (que receba apenas numero 1 .....), ai quando clica no botão ele gere a quantidade de sorteios que a pessoa digitou no Edit. Pois da forma que esta tem que fica clicando no botão para gerar os sorteios. Conto com a ajuda de vocês para fazer essa implementação no código. Desde já grato pela ajuda.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
s : array[0..5] of Integer;
i, a, b, z : Integer;
begin
b := 7;
Randomize;
while b > 6 do
begin
b:= 0;
for I := 0 to 5 do
s[i] := Random(61);
for I := 0 to 5 do
begin
a := s[i];
if a = 0 then
b := b + 1;
for z := 0 to 5 do
if a = s[z] then
if a = s[z] then
b := b + 1;
end;
end;
for z := 0 to 4 do
begin
for I := 0 to 4 do
if s[i] > s[i+1] then
begin
a := s[i+1];
s[i+1] := s[i];
s[i] := a;
end;
end;
Memo1.Lines.Add(
IntToStr(s[0]) + ' - ' +
IntToStr(s[1]) + ' - ' +
IntToStr(s[2]) + ' - ' +
IntToStr(s[3]) + ' - ' +
IntToStr(s[4]) + ' - ' +
IntToStr(s[5]));
end;
end.
Rubens Pena
Curtidas 0
Melhor post
Natanael Ferreira
25/06/2021
Inclua seu código em um Loop For.
Exemplo:
Exemplo:
procedure TForm1.Button1Click(Sender: TObject);
var
s: array [0 .. 5] of Integer;
i, a, b, z, j: Integer;
begin
Memo1.Clear;
for j := 0 to StrToIntDef(Edit1.Text, 0) - 1 do
begin
b := 7;
Randomize;
while b > 6 do
begin
b := 0;
for i := 0 to 5 do
s[i] := Random(61);
for i := 0 to 5 do
begin
a := s[i];
if a = 0 then
b := b + 1;
for z := 0 to 5 do
if a = s[z] then
if a = s[z] then
b := b + 1;
end;
end;
for z := 0 to 4 do
begin
for i := 0 to 4 do
if s[i] > s[i + 1] then
begin
a := s[i + 1];
s[i + 1] := s[i];
s[i] := a;
end;
end;
Memo1.Lines.Add(IntToStr(s[0]) + ' - ' + IntToStr(s[1]) + ' - ' + IntToStr(s[2]) + ' - ' + IntToStr(s[3]) + ' - ' +
IntToStr(s[4]) + ' - ' + IntToStr(s[5]));
end;
end;GOSTEI 1
Mais Respostas
Emerson Nascimento
25/06/2021
tente algo assim:
procedure TForm5.Button1Click(Sender: TObject);
var
Aposta: array of integer; // neste momento não sei quantos números serão sorteados
NumeroDeApostas, NumerosPorAposta: integer;
Sorteios, Sorteado: integer;
AddMemo, NumerosSorteados: integer;
strAposta: string;
function ExisteNumero(Numero: integer): boolean;
var
iBusca: integer;
begin
Result := False;
for iBusca := Low(Aposta) to High(Aposta) do
if Aposta[iBusca] = Numero then
begin
Result := True;
exit;
end;
end;
begin
Randomize;
MemoApostas.Clear; // limpa o memo
NumeroDeApostas := SpinEdit1.Value; // quantidade de apostas a serem geradas
NumerosPorAposta := SpinEdit2.Value; // quantidade de números por aposta
SetLength(Aposta, NumerosPorAposta);
for Sorteios := 1 to NumeroDeApostas do
begin
NumerosSorteados := 0;
while NumerosSorteados < NumerosPorAposta do
begin
Sorteado := Random(60)+1; // sorteia de 1 a 60
if not ExisteNumero(Sorteado) then
begin
Aposta[NumerosSorteados] := Sorteado;
Inc(NumerosSorteados);
end;
end;
strAposta := '';
for AddMemo := Low(Aposta) to High(Aposta) do
begin
if strAposta <> EmptyStr then
strAposta := strAposta + ', ';
strAposta := strAposta + IntToStr(Aposta[AddMemo]);
Aposta[AddMemo] := 0; // limpa o conteúdo da aposta
end;
MemoApostas.Lines.Add( strAposta );
end;
end;
GOSTEI 1
Rubens Pena
25/06/2021
Bom noite mestres da Programação em Delphi. Gostaria de Agradecer Natanael Ferreira e Emerson Nascimento, por terem tirado um tempo do seu tempo para me ajudar com esse código, testei ambos e salvei ambos em forms separados.
Agora o código que Emerson Nascimento passou é como se ele tivesse interpretado 100% a minha linha de pensamento, ficou show, reduziu bastante as linhas que estava no código inicial, sem falar esse componente do SpinEdit (muito bom ele), esse código servira para as demais modalidades.
Muito obrigado a ambos.
Agora o código que Emerson Nascimento passou é como se ele tivesse interpretado 100% a minha linha de pensamento, ficou show, reduziu bastante as linhas que estava no código inicial, sem falar esse componente do SpinEdit (muito bom ele), esse código servira para as demais modalidades.
Muito obrigado a ambos.
GOSTEI 0
Rubens Pena
25/06/2021
tente algo assim:
Boa tarde mestre. Com relação aos números saírem na ordem crescente, poderia fazer essa pequena alteração ai no seu código para mim?
E aproveitando o momento acrescentar uma numeração das linhas.
Exemplo:
01: 5-10-11-23-28-35
02: 11-22-24-25-58-60
03: 7-14-21-28-35-42
.
.
.
.
Obrigado pela atenção...
procedure TForm5.Button1Click(Sender: TObject);
var
Aposta: array of integer; // neste momento não sei quantos números serão sorteados
NumeroDeApostas, NumerosPorAposta: integer;
Sorteios, Sorteado: integer;
AddMemo, NumerosSorteados: integer;
strAposta: string;
function ExisteNumero(Numero: integer): boolean;
var
iBusca: integer;
begin
Result := False;
for iBusca := Low(Aposta) to High(Aposta) do
if Aposta[iBusca] = Numero then
begin
Result := True;
exit;
end;
end;
begin
Randomize;
MemoApostas.Clear; // limpa o memo
NumeroDeApostas := SpinEdit1.Value; // quantidade de apostas a serem geradas
NumerosPorAposta := SpinEdit2.Value; // quantidade de números por aposta
SetLength(Aposta, NumerosPorAposta);
for Sorteios := 1 to NumeroDeApostas do
begin
NumerosSorteados := 0;
while NumerosSorteados < NumerosPorAposta do
begin
Sorteado := Random(60)+1; // sorteia de 1 a 60
if not ExisteNumero(Sorteado) then
begin
Aposta[NumerosSorteados] := Sorteado;
Inc(NumerosSorteados);
end;
end;
strAposta := '';
for AddMemo := Low(Aposta) to High(Aposta) do
begin
if strAposta <> EmptyStr then
strAposta := strAposta + ', ';
strAposta := strAposta + IntToStr(Aposta[AddMemo]);
Aposta[AddMemo] := 0; // limpa o conteúdo da aposta
end;
MemoApostas.Lines.Add( strAposta );
end;
end;
Boa tarde mestre. Com relação aos números saírem na ordem crescente, poderia fazer essa pequena alteração ai no seu código para mim?
E aproveitando o momento acrescentar uma numeração das linhas.
Exemplo:
01: 5-10-11-23-28-35
02: 11-22-24-25-58-60
03: 7-14-21-28-35-42
.
.
.
.
Obrigado pela atenção...
GOSTEI 0
Emerson Nascimento
25/06/2021
segue...
procedure TForm5.Button1Click(Sender: TObject);
var
Aposta: TStringList;
NumeroDeApostas, NumerosPorAposta: integer;
Sorteios, AddMemo: integer;
strSorteado, strAposta: string;
begin
Randomize; // o correto é colocar no OnCreate do form, porque precisa ser chamado apenas 1 vez
MemoApostas.Clear; // limpa o memo
NumeroDeApostas := SpinEdit1.Value; // quantidade de apostas a serem geradas
NumerosPorAposta := SpinEdit2.Value; // quantidade de números por aposta
Aposta := TStringList.Create; // cria a aposta
for Sorteios := 1 to NumeroDeApostas do
begin
Aposta.Clear; // limpa a aposta
while Aposta.Count < NumerosPorAposta do
begin
strSorteado := FormatFloat('00', Random(60)+1); // sorteia de 1 a 60
if Aposta.IndexOf(strSorteado) < 0 then
Aposta.Add(strSorteado);
end;
Aposta.Sort; // ordena os números da aposta
strAposta := '';
for AddMemo := 0 to Aposta.Count-1 do
begin
if strAposta <> EmptyStr then
strAposta := strAposta + ', ';
strAposta := strAposta + Aposta[AddMemo];
end;
MemoApostas.Lines.Add( strAposta );
end;
end;GOSTEI 1
Rubens Pena
25/06/2021
segue...
Show de Bola, Obrigado mestre. Mais uma vez Obrigado Pela Ajuda.
procedure TForm5.Button1Click(Sender: TObject);
var
Aposta: TStringList;
NumeroDeApostas, NumerosPorAposta: integer;
Sorteios, AddMemo: integer;
strSorteado, strAposta: string;
begin
Randomize; // o correto é colocar no OnCreate do form, porque precisa ser chamado apenas 1 vez
MemoApostas.Clear; // limpa o memo
NumeroDeApostas := SpinEdit1.Value; // quantidade de apostas a serem geradas
NumerosPorAposta := SpinEdit2.Value; // quantidade de números por aposta
Aposta := TStringList.Create; // cria a aposta
for Sorteios := 1 to NumeroDeApostas do
begin
Aposta.Clear; // limpa a aposta
while Aposta.Count < NumerosPorAposta do
begin
strSorteado := FormatFloat('00', Random(60)+1); // sorteia de 1 a 60
if Aposta.IndexOf(strSorteado) < 0 then
Aposta.Add(strSorteado);
end;
Aposta.Sort; // ordena os números da aposta
strAposta := '';
for AddMemo := 0 to Aposta.Count-1 do
begin
if strAposta <> EmptyStr then
strAposta := strAposta + ', ';
strAposta := strAposta + Aposta[AddMemo];
end;
MemoApostas.Lines.Add( strAposta );
end;
end;Show de Bola, Obrigado mestre. Mais uma vez Obrigado Pela Ajuda.
GOSTEI 0
Rubens Pena
25/06/2021
segue...
procedure TForm5.Button1Click(Sender: TObject);
var
Aposta: TStringList;
NumeroDeApostas, NumerosPorAposta: integer;
Sorteios, AddMemo: integer;
strSorteado, strAposta: string;
begin
Randomize; // o correto é colocar no OnCreate do form, porque precisa ser chamado apenas 1 vez
MemoApostas.Clear; // limpa o memo
NumeroDeApostas := SpinEdit1.Value; // quantidade de apostas a serem geradas
NumerosPorAposta := SpinEdit2.Value; // quantidade de números por aposta
Aposta := TStringList.Create; // cria a aposta
for Sorteios := 1 to NumeroDeApostas do
begin
Aposta.Clear; // limpa a aposta
while Aposta.Count < NumerosPorAposta do
begin
strSorteado := FormatFloat('00', Random(60)+1); // sorteia de 1 a 60
if Aposta.IndexOf(strSorteado) < 0 then
Aposta.Add(strSorteado);
end;
Aposta.Sort; // ordena os números da aposta
strAposta := '';
for AddMemo := 0 to Aposta.Count-1 do
begin
if strAposta <> EmptyStr then
strAposta := strAposta + ', ';
strAposta := strAposta + Aposta[AddMemo];
end;
MemoApostas.Lines.Add( strAposta );
end;
end;Bom dia. Teria como fazer o sorteio com base nos números selecionados? Estou enviando o font do projeto pra que possa ser analisado um jeito de sortear em com base nas dezenas selecionada.
Link do font: ( https://mega.nz/file/DIpnHI4Q#q9fIvyq60Y-CVikUNcjmNa7VGOtKoYMtQkxFZ6wG1Mk )
Com relação ao código se não der pra postar aqui envia no meu email : rubens.pena7@gmail.com, vai me ajudar bastante. desde já grato pela atenção.
GOSTEI 0