Re: [delphi-br] Dúvida com Sorteio (Random)
Ricardo César Cardoso escreveu: Eu ia esperar pra comprovar amanhã, quando ia testar no Delphi, mas acho que usando assim como passado, o resultado sempre será o mesmo. Se não me engano, Randomize é somente um inicializador do gerador de números randômicos, por isso deve ser chamado apenas uma vez, como bem disse o João. Eu fiquei sabendo disso agora (chamar só na inicialização). Fiz um teste para embaralhar uns números, e queria que numa contagem de 0 a 500 ele embaralhasse até acabar as combinações possíveis, ex: Certo: 1 - 27 2 - 63 3 - 7 4 - 500 5 - 339 Errado: 1 - 27 2 - 500 3 - 7 4 - 500 -- repetiu 5 - 339 Queria que, quando ele tivesse esgotado todas as combinações possíveis (de 0 a 500), acionasse um LED pro cara resetar a contagem; solução: salvar em uma variável os números que já foram exibidos, e não deixar o laço soltar outro número igual. (posso estar enganado, mas pelo menos nos testes que fiz, se não fosse esse macete os números iam se repetir muitas vezes). Quem tiver uma solução mais simples, por gentileza, um CTRL+V aqui na lista e outro aqui - [http://pastebin.com/] :) Atte, Ricardo. 1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS. 2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor compreendida. 3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante! -- Silvio Clecio -- Blog estilo mural - silvioclecio.blogspot.com Twitter - twitter.com/silvioprog -- programmer ObjectPascal - silvioprog.blogspot.com -- A consciência é o melhor livro de moral que temos; e é, certamente, o que mais devemos consultar. Blaise Pascal.
Re: [delphi-br] Dúvida com Sorteio (Random)
É uma boa pergunta, mas não imagino uma resposta convincente... Quanto a se repetir em máquinas diferentes do usuário, o que posso dizer que me lembro é que a primeira execução de Random é gerada usando a data e a hora do sistema, portanto parte do mesmo valor independente do equipamento. A partir daí as coisas se randomizam mesmo. Acho que para limitar essa repetição, seria interessante (porém mais custoso) refazer o sorteio em caso de repetição do código, fazendo o paralelo com o sorteio de um bingo, onde as pedras já retiradas não voltam para o recipiente. Espero ter contribuido. Atte, Ricardo. 1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS. 2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor compreendida. 3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante! --- Em seg, 7/12/09, valdirdill vald...@infolivre.com.br escreveu: De: valdirdill vald...@infolivre.com.br Assunto: [delphi-br] Dúvida com Sorteio (Random) Para: delphi-br@yahoogrupos.com.br Data: Segunda-feira, 7 de Dezembro de 2009, 12:16 Olá, Tenho a função abaixo para gerar um código que utilizo no sistema. Pela lógica, se chamarmos a função assim: GeraCodigoAlfaNume ricoAleatorio( 10); o retorno deveria ser sempre diferente. Poderia até repetir, mas a chance disso acontecer, seria tipo uma em um bilhão? O problema: em 610 códigos gerados, o código 6HGX564TQP já se repetiu 23 vezes. Para isso ocorrer, o resutaldo do random(Length( VMatriz)) teria ser 6-18-17-34-5- 6-4-30-27- 26. Qual a chance desse sorteio ocorrer exatamente igual e nessa mesma ordem? Pois, em 610 tentativas, ocorreu 23 vezes. A execução é feita sempre em máquinas diferentes (do usuário), mas mesmo assim, isso não poderia ocorrer, poderia? Qualquer dica ajuda. Obrigado function GeraCodigoAlfaNumer icoAleatorio( VTamanho : Integer) : string; Var I : Integer; VMatriz : String; begin VMatriz := '1234567890ABCDEFGH IJKLMNOPQRSTUVWX YZ' result := ''; for I := 1 to VTamanho do result := result + Copy(VMatriz, random(Length( VMatriz)) ,1); end; Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Dúvida com Sorteio (Random)
Não tenho certeza, mas tente usar o *Randomize *antes de usar o *Random * *Diego Garcia* Twitter: http://www.twitter.com/drgarcia1986 Blog:http://www.atocadopanda.com 2009/12/7 valdirdill vald...@infolivre.com.br Olá, Tenho a função abaixo para gerar um código que utilizo no sistema. Pela lógica, se chamarmos a função assim: GeraCodigoAlfaNumericoAleatorio(10); o retorno deveria ser sempre diferente. Poderia até repetir, mas a chance disso acontecer, seria tipo uma em um bilhão? O problema: em 610 códigos gerados, o código 6HGX564TQP já se repetiu 23 vezes. Para isso ocorrer, o resutaldo do random(Length(VMatriz)) teria ser 6-18-17-34-5-6-4-30-27-26. Qual a chance desse sorteio ocorrer exatamente igual e nessa mesma ordem? Pois, em 610 tentativas, ocorreu 23 vezes. A execução é feita sempre em máquinas diferentes (do usuário), mas mesmo assim, isso não poderia ocorrer, poderia? Qualquer dica ajuda. Obrigado function GeraCodigoAlfaNumericoAleatorio(VTamanho : Integer) : string; Var I : Integer; VMatriz : String; begin VMatriz := '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ' result := ''; for I := 1 to VTamanho do result := result + Copy(VMatriz,random(Length(VMatriz)),1); end; [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Dúvida com Sorteio (Random)
procedure Gera: String; var c: Char; s: String; begin Randomize; s:=''; while true do begin c:=char(random(91)); if c in ['0'..'9'] then s:=s + c else if c in ['A'..'Z'] then s:=s + c; if length(s) = 6 then break; end; end;
Re: [delphi-br] Dúvida com Sorteio (Random)
esse nao eh um metodo bom para se gerar um randomico.. pois a função random na verdade nao eh randomica rsrs dificil de entender ne!.. faça o teste colocando: result := ''; for I := 1 to VTamanho do Begin Randomize; result := result + Copy(VMatriz,random(Length(VMatriz)),1); End; end; 2009/12/7 valdirdill vald...@infolivre.com.br Olá, Tenho a função abaixo para gerar um código que utilizo no sistema. Pela lógica, se chamarmos a função assim: GeraCodigoAlfaNumericoAleatorio(10); o retorno deveria ser sempre diferente. Poderia até repetir, mas a chance disso acontecer, seria tipo uma em um bilhão? O problema: em 610 códigos gerados, o código 6HGX564TQP já se repetiu 23 vezes. Para isso ocorrer, o resutaldo do random(Length(VMatriz)) teria ser 6-18-17-34-5-6-4-30-27-26. Qual a chance desse sorteio ocorrer exatamente igual e nessa mesma ordem? Pois, em 610 tentativas, ocorreu 23 vezes. A execução é feita sempre em máquinas diferentes (do usuário), mas mesmo assim, isso não poderia ocorrer, poderia? Qualquer dica ajuda. Obrigado function GeraCodigoAlfaNumericoAleatorio(VTamanho : Integer) : string; Var I : Integer; VMatriz : String; begin VMatriz := '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ' result := ''; for I := 1 to VTamanho do result := result + Copy(VMatriz,random(Length(VMatriz)),1); end; -- Leandro, MuTukA [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Dúvida com Sorteio (Random)
2009/12/7 Leandro mutu...@yahoo.com.br: esse nao eh um metodo bom para se gerar um randomico.. pois a função random na verdade nao eh randomica rsrs dificil de entender ne!.. faça o teste colocando: result := ''; for I := 1 to VTamanho do Begin Randomize; result := result + Copy(VMatriz,random(Length(VMatriz)),1); End; Use o randomize uma única vez, fora do laço. Melhor ainda se for executado uma única vez na inicialização do programa. Joao Morais
Re: [delphi-br] Dúvida com Sorteio (Random)
Eu ia esperar pra comprovar amanhã, quando ia testar no Delphi, mas acho que usando assim como passado, o resultado sempre será o mesmo. Se não me engano, Randomize é somente um inicializador do gerador de números randômicos, por isso deve ser chamado apenas uma vez, como bem disse o João. Atte, Ricardo. 1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS. 2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor compreendida. 3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante! --- Em seg, 7/12/09, Joao Morais jcmorai...@gmail.com escreveu: De: Joao Morais jcmorai...@gmail.com Assunto: Re: [delphi-br] Dúvida com Sorteio (Random) Para: delphi-br@yahoogrupos.com.br Data: Segunda-feira, 7 de Dezembro de 2009, 22:26 2009/12/7 Leandro mutu...@yahoo. com.br: esse nao eh um metodo bom para se gerar um randomico.. pois a função random na verdade nao eh randomica rsrs dificil de entender ne!.. faça o teste colocando: result := ''; for I := 1 to VTamanho do Begin Randomize; result := result + Copy(VMatriz, random(Length( VMatriz)) ,1); End; Use o randomize uma única vez, fora do laço. Melhor ainda se for executado uma única vez na inicialização do programa. Joao Morais Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]