ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[RESOLVIDO] Ajuda com chances de conseguir

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Qua Jun 05, 2013 9:52 pm    Assunto: [RESOLVIDO] Ajuda com chances de conseguir Responder com Citação

Eu fiz um código aqui que ta funcionando perfeitamente, mas eu preciso diminuir as chances do usuário ganhar algo para simular uma loteria por exemplo.
O programa gera números aleatórios de até 3000, e se o número gerado estiver entre 1 e 5 por exemplo, o usuário ganha o prêmio máximo, se tiver entre 6 e 30 o usuário ganha outro prêmio de menor valor pq as chances de conseguir são maiores.

Aqui o código:

Contar: Integer = 0;

...

procedure TForm1.Button1Click(Sender: TObject);
Var
R: Integer;
begin
Contar:= Contar+1;
Randomize;
Case Random(3000) of
1..5: Memo1.Lines.Add('Você ganhou 50.000 reais na tentativa: '+IntToStr(Contar));
6..30: Memo1.Lines.Add('Você ganhou 5.000 reais na tentativa: '+IntToStr(Contar));
31..100: Memo1.Lines.Add('Você ganhou 100 reais na tentativa: '+IntToStr(Contar));
101..500: Memo1.Lines.Add('Você ganhou 5 reais na tentativa: '+IntToStr(Contar));
end;
end;



Eu preciso aumentar esse 3000 para um número bem maior, pq é para simular uma loteria da vida real e também serve pra outras coisas, só que com números grandes demais, o programa vai demorar muito até gerar o número certo do prêmio máximo, e eu quero o resultado no mesmo momento que o usuário apertar o botão. Vlw.


Editado pela última vez por flabed10 em Sáb Jun 08, 2013 7:10 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Qui Jun 06, 2013 12:48 am    Assunto: Responder com Citação

ajuda pf
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Jun 06, 2013 8:35 am    Assunto: Responder com Citação

nao entendi como isso deve funcionar:

se o usuario digitar 4, ele ganha o premio maximo?
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Qui Jun 06, 2013 5:21 pm    Assunto: Responder com Citação

é assim que funciona:

quando o cara clica no botão, o programa add 1 a variavel que conta as tentativas e depois ele gera 1 número aleatório de 1 a 3000
se o número gerado, estiver entre 1 e 5, vai mostrar no memo que vc ganhou o premio máximo(50.000) junto com o número de tentativas. se estiver entre 6 e 30, vai mostrar no memo que vc ganhou o segundo premio (5.000) junto com o número de tentativas, é a mesma coisa pros outros do case. se o número gerado não for nenhum desses, não vai acontecer nada, só vai ter adcionado 1 a variavel de tentativas mesmo.

mas ai eu preciso aumentar esse 3000 para 3000000 por exemplo
e o cara vai ter que ficar clicando no botão o dia inteiro pra mostrar algo no memo pq agora é muito mais dificil de gerar os números dos premios. já tentei colocar num timer e repetir até ganhar algo, mas mesmo assim demora muito, e eu queria um jeito de ficar repetindo até que vc ganhe algo e essa repetição tem que durar no máximo 1 segundo. Vlw
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Sex Jun 07, 2013 4:47 am    Assunto: Responder com Citação

ajuda pf
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sex Jun 07, 2013 1:06 pm    Assunto: Responder com Citação

Bom, se eu entendi bem, não seria o caso de colocar esse código:
Código:
Var
  R: Integer;
begin
  Contar:= Contar+1;
  Randomize;
  Case Random(3000000) of
    1..5: Memo1.Lines.Add('Você ganhou 50.000 reais na tentativa: '+IntToStr(Contar));
    6..30: Memo1.Lines.Add('Você ganhou 5.000 reais na tentativa: '+IntToStr(Contar));
    31..100: Memo1.Lines.Add('Você ganhou 100 reais na tentativa: '+IntToStr(Contar));
    101..500: Memo1.Lines.Add('Você ganhou 5 reais na tentativa: '+IntToStr(Contar));
  end;
end;

No evento OnTimer do Timer?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Sex Jun 07, 2013 3:20 pm    Assunto: Responder com Citação

Eu já coloquei em um timer e modifiquei o código para ficar repetindo até ganhar algo, só que demora muito, mesmo com timer em 1 Milissegundo.
Eu queria um código parecido com esse, mas que mostre o resultado no mesmo momento que o cara apertar o botão. To quase achando que não da pra fazer algo parecido com isso de outro jeito, pq ele precisa ficar repetindo para contar as tentativas...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Sex Jun 07, 2013 4:31 pm    Assunto: Responder com Citação

ajuda pf
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sex Jun 07, 2013 4:34 pm    Assunto: Responder com Citação

Mas você quer que ele faça vários Randoms entre 1 e 3000000 e quer que mostre a mensagem na hora?
Cara, considere que são 3 milhões de possibilidades... eventualmente vai demorar um pouco mesmo. É natural.


Editado pela última vez por Batera em Sex Jun 07, 2013 5:00 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Sex Jun 07, 2013 4:50 pm    Assunto: Responder com Citação

mas nao tem algum outro codigo parecido que possa substituir esse e que mostre na hora?????
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sex Jun 07, 2013 5:01 pm    Assunto: Responder com Citação

De forma randômica, eu desconheço.
Ao menos que você use Threads, mas nesse caso acho que não vai conseguir contar o número de tentativas.
Bom, vamos ver se outro membro aqui do fórum tem uma ideia melhor.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
GustavoToyota
Profissional
Profissional


Registrado: Domingo, 9 de Outubro de 2011
Mensagens: 605
Localização: Sorocaba - SP

MensagemEnviada: Sex Jun 07, 2013 6:49 pm    Assunto: Responder com Citação

Tente com o Application.OnIdle
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Sáb Jun 08, 2013 10:01 am    Assunto: Responder com Citação

Citação:
e eu quero o resultado no mesmo momento que o usuário apertar o botão. Vlw


coloque um Loop e deixe o por conta do processo interno

tipo isto

Código:
Var
contar:integer;
ganhou:Boolean;
Valor:String;
begin
ganhou:=False;
contar:=0;
while not ganhou do
begin
Contar:= Contar+1;
Randomize;
Case Random(3000) of
1..5:begin
     ganhou:=true;
     valor:='50.000';
     end;

6..30:begin
     ganhou:=true;
     valor:='5.000';
     end;
31..100: begin
     ganhou:=true;
     valor:='100';
     end;
101..500:begin
     ganhou:=true;
     valor:='5';
     end;
end;
end;
if ganhou then
 Memo1.Lines.Add('Você ganhou '+Valor+' reais na tentativa: '+IntToStr(Contar));
end;



[]sdç
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
flabed10
Novato
Novato


Registrado: Segunda-Feira, 22 de Abril de 2013
Mensagens: 63

MensagemEnviada: Sáb Jun 08, 2013 4:25 pm    Assunto: Responder com Citação

funcionou perfeitamente vlw
ta mostrando na hora agora, eu tava quase achando que não dava pra fazer algo assim
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Sáb Jun 08, 2013 7:04 pm    Assunto: Responder com Citação

certo

Favor alterar o Título e colocar como Resolvido

obg e sdç
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB