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