FioX Posted June 17, 2012 at 02:05 PM Report Share #463423 Posted June 17, 2012 at 02:05 PM Ola, Um amigo pediu-me ontem para fazer-lhe um programinha em shell que eu concordei contentemente sendo que preciso de praticar, contudo numa parte será necessário utilizar um função que me de um numero aleatório entre 1 e 20. Eu sei que existe um função para isto contudo não sei qual é nem como usa-la, ja tentamos usar uma vez o Randomiz(), na aula de Programação na minha escola contudo estava a dar problemas(aparentemente estava a dar valores enormes e completamente errados). Não encontrei nada disto nos manuais la em cima nos topicos em destaque, se alguem pude-se ajudar com esta situação agradecia. Obrigado, Fábio Alexandre Link to comment Share on other sites More sharing options...
bsccara Posted June 17, 2012 at 02:22 PM Report Share #463428 Posted June 17, 2012 at 02:22 PM Sistema Operativo ? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 17, 2012 at 02:31 PM Report Share #463432 Posted June 17, 2012 at 02:31 PM (edited) ja tentamos usar uma vez o Randomiz() achei o raio da função demasiado estranha para perguntar ao google ... a única coisa parecida que deu foi para VisualBasic !!!! e é Randomize(), faltando o "e" final Edited June 17, 2012 at 02:32 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
FioX Posted June 17, 2012 at 03:23 PM Author Report Share #463451 Posted June 17, 2012 at 03:23 PM (edited) Sistema Operativo ? Estou usando Linux para programação,mas tenho dual boot por isso se o metodo so dar no windows tambem não é problema achei o raio da função demasiado estranha para perguntar ao google ... a única coisa parecida que deu foi para VisualBasic !!!! e é Randomize(), faltando o "e" final Sim, foi randomize() que exprimentamos, enganei-me. Edited June 17, 2012 at 03:33 PM by FioX Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 17, 2012 at 03:27 PM Report Share #463453 Posted June 17, 2012 at 03:27 PM (edited) #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); /* iniciar o gerador de numero aleatórios */ printf("numero aleatório : %d\n", (rand() % 20) + 1); /* numero aleatório de 1 a 20 */ return 0; } não é complicado pois não ? Edited June 17, 2012 at 03:27 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
FioX Posted June 17, 2012 at 03:36 PM Author Report Share #463455 Posted June 17, 2012 at 03:36 PM (edited) #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); /* iniciar o gerador de numero aleatórios */ printf("numero aleatório : %d\n", (rand() % 20) + 1); /* numero aleatório de 1 a 20 */ return 0; } não é complicado pois não ? Wow,obrigado, Agora até me sinto mal por nao ter consguido algo tão simples. Muito Obrigado, irei tentar agora mesmo ^^. EDIT: Esta a funcionar lindamente, obrigado ^^ Edited June 17, 2012 at 03:41 PM by FioX Link to comment Share on other sites More sharing options...
pikax Posted June 17, 2012 at 03:49 PM Report Share #463457 Posted June 17, 2012 at 03:49 PM Ola, Um amigo pediu-me ontem para fazer-lhe um programinha em shell que eu concordei contentemente sendo que preciso de praticar, contudo numa parte será necessário utilizar um função que me de um numero aleatório entre 1 e 20. #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); /* iniciar o gerador de numero aleatórios */ printf("numero aleatório : %d\n", (rand() % 20) + 1); /* numero aleatório de 1 a 20 */ return 0; } não é complicado pois não ? Nao e' bem aleatorio, e' pseudo-aleatorio, se fizeres um ciclo a gerar numeros, iras reparar que muitos dos numeros sao iguais. Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 17, 2012 at 03:50 PM Report Share #463459 Posted June 17, 2012 at 03:50 PM para o caso pedido é mais do que suficiente ... e se são iguais é porque de 1 a 20 não existe muitas soluções ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pikax Posted June 17, 2012 at 03:56 PM Report Share #463463 Posted June 17, 2012 at 03:56 PM mesmo se metermos 1000 tambem e' igual, mas tens razao, para o caso pedido e' mais que suficiente 🙂 Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
Volans Posted June 17, 2012 at 04:03 PM Report Share #463466 Posted June 17, 2012 at 04:03 PM Lembro-me de um professor meu me ter falado de uma maneira que não gerava números iguais, sem a utilização de condições, mas não me recordo qual era. De qualquer modo a utilização de condições para que não repita os números é bastante fácil e simples... Link to comment Share on other sites More sharing options...
pikax Posted June 17, 2012 at 04:11 PM Report Share #463469 Posted June 17, 2012 at 04:11 PM Lembro-me de um professor meu me ter falado de uma maneira que não gerava números iguais, sem a utilização de condições, mas não me recordo qual era. De qualquer modo a utilização de condições para que não repita os números é bastante fácil e simples... Mas mesmo com condicoes, nao ha garantias que seja aleatorio, porque para ser aleatorio tambem tem que haver colicoes 😄 um algoritmo que ouvi falar bem foi o Mother-of-all e Xorshift Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
pmg Posted June 17, 2012 at 04:39 PM Report Share #463474 Posted June 17, 2012 at 04:39 PM Em bash podes usar a funcao $RANDOM http://tldp.org/LDP/abs/html/randomvar.html Por exemplo: $ echo $RANDOM 26208 $ echo $RANDOM 21692 $ echo $RANDOM 11847 $ echo $RANDOM 23956 $ What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
brunoais Posted June 17, 2012 at 06:37 PM Report Share #463508 Posted June 17, 2012 at 06:37 PM (edited) Nao e' bem aleatorio, e' pseudo-aleatorio, se fizeres um ciclo a gerar numeros, iras reparar que muitos dos numeros sao iguais. Isso é pq de 1 a 20 n há muitas possibilidades, n é? De qq modo, é sempre imprevisível. A hora ao milisegundo nunca é igual e o algoritmo, dado o seed faz com que seja impossível de saber o resultado com antecedência. Edited June 17, 2012 at 06:38 PM by brunoais "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
Dr_Lion Posted June 18, 2012 at 02:48 PM Report Share #463665 Posted June 18, 2012 at 02:48 PM Isso é pq de 1 a 20 n há muitas possibilidades, n é? De qq modo, é sempre imprevisível. A hora ao milisegundo nunca é igual e o algoritmo, dado o seed faz com que seja impossível de saber o resultado com antecedência. Não tenho a certeza, mas creio que esse time NULL só vai até ao segundo em precisão. E se assim for os diferentes números obtidos no mesmo segundo, baseiam-se apenas no algoritmo e não na aleatoriedade da hora, o que com o conhecimento prévio do mesmo é possível gerar esses números antecipadamente. Normalmente essa coíncidência não é notada porque não se anda a mecher nas horas do relógio. Experimenta meter uma hora estática, entenda-se (sempre a mesma) e correr o programa várias vezes, a ver qual o resultado que obtens. Há outras formas de obteres numeros random, fazes um programa que se põe a escutar os pacotes recebidos da interface de rede, por exemplo (podes ir buscar quaisquer dados que saibas que costumam variar num curto estpaço de tempo, limitas o teu interesse aos x bits menos significativos e aí tens um gerador pseudo aleatório sem algoritmo. Link to comment Share on other sites More sharing options...
pikax Posted June 18, 2012 at 03:31 PM Report Share #463680 Posted June 18, 2012 at 03:31 PM (edited) Isso é pq de 1 a 20 n há muitas possibilidades, n é? Tambem, mas nao so'. como o @Dr_Lion disse, o time NULL tem um segundo de precisao: In this example, the random seed is initialized to a value representing the second in which the program is executed (time is defined in the header <ctime>). This way to initialize the seed is generally a good enough option for most randoming needs. http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ This implementation uses a "linear congruential" generator. These generators are very fast, but have the property that the lowermost bits of the number returned may not be particularly random. The number returned is a "good random number" in the sense that: http://www.thinkage....c/lib/rand.html Para o problema do user, o srand(time(NULL)) deve ser o suficiente, mas ahco que e' melhor ele perceber que nao e' necessariamente random, e' pseudo-random. Edited June 18, 2012 at 03:31 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 18, 2012 at 03:49 PM Report Share #463694 Posted June 18, 2012 at 03:49 PM Há outras formas de obteres numeros random, fazes um programa que se põe a escutar os pacotes recebidos da interface de rede, por exemplo (podes ir buscar quaisquer dados que saibas que costumam variar num curto estpaço de tempo, limitas o teu interesse aos x bits menos significativos e aí tens um gerador pseudo aleatório sem algoritmo. ora aqui está um exemplo muito claro de uma solução exageradamente complexa para um problema simples usa os números pseudo-aleatórios que não terás problemas. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now