gaspar1423 Posted October 24, 2012 at 10:18 AM Report #480222 Posted October 24, 2012 at 10:18 AM Boas Eu queria saber se é possivel gerar uma matriz com caracteres aletorios, fazendo uma função do genero srand(). E que quero criar uma matriz com Letras maiusculas para fazer o jogo sopa de letras.
HappyHippyHippo Posted October 24, 2012 at 10:26 AM Report #480224 Posted October 24, 2012 at 10:26 AM sim é possível. definir uma matrix de array de array's com dimensão n por m iniciar a função de geração de números aleatórios para i de 0 a n-1 para j de 0 a m-1 atribuir à posição da matrix ixj o valor aleatório entre 'A' e 'Z' IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
gaspar1423 Posted October 24, 2012 at 05:32 PM Author Report #480285 Posted October 24, 2012 at 05:32 PM (edited) eu fiz este ciclo para me imprimir os caracteres de 'A' a 'Z' segundo o código ASCII deles: void gerar_matriz(char matriz[MAX][MAX]){ for (int i=65; i<=90; i++) { for (int j=65; j<=90; j++) { matriz[i][j]=rand(); } } for (int i=65; i<=90; i++) { for (int j=65; j<=90; j++) { printf("%c",matriz[i][j]); } } } mas imprime isto : \247\361\331*\202\310\330\376CM\230U\214\342\263G\230T/-X\365kֈ\231\222H3bA\363 #\345_0\321\310\355aK59\201\204\270\242\234\264Zg*\312\345H\351\305\361\260\304\212\345\233M9\366\367\350\241\323\376\355\245\325\363\331\344[\372l\303Q\342 \256\341\230ma\3774\241\3756P鷁\217\303:\300,DUzȫPɲ\366\265\342LOݟ\210g\275\316\362a鱷 Edited October 24, 2012 at 05:43 PM by pmg falta LP
pmg Posted October 24, 2012 at 05:49 PM Report #480287 Posted October 24, 2012 at 05:49 PM (edited) O que o teu programa esta a imprimir é o resultado da funcao rand(). Se queres imprimir valores especificos, nao uses rand(); usa rand() apenas para obteres valores aleatorios. Para gerar um valor aleatorio entre os valores "LO" e "HI" (inclusive), usa o codigo int randbetween(int lo, int hi) { if (lo > hi) { int tmp = lo; lo = hi; hi = tmp; } return (rand() % (hi - lo + 1)) + lo; /* ATTENTION: MAY CONTAIN BIAS */ } Edited October 24, 2012 at 05:50 PM by pmg 1 Report 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!
HappyHippyHippo Posted October 24, 2012 at 07:20 PM Report #480300 Posted October 24, 2012 at 07:20 PM for (int i=65; i<=90; i++) { for (int j=65; j<=90; j++) { olha bem para os valores dos índices que estas a aceder da matrix [65 .. 90] IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
gaspar1423 Posted October 30, 2012 at 10:21 AM Author Report #480971 Posted October 30, 2012 at 10:21 AM eu tinha esse ciclo entre 65 e 90 como uma tentativa de limitar o rand() a esses valor só depois de analisar bem é que vi que é muito estupido 😛 a função que pmg me recomendou funciona lindamente, só não percebo bem o calculo. Podem-me dar um explicaçãozinha sobre o calculo? 😕 Obrigado a todos pela ajuda 😛
mogers Posted October 30, 2012 at 11:58 AM Report #480981 Posted October 30, 2012 at 11:58 AM (edited) int rand ( void );Generate random number Returns a pseudo-random integral number in the range between 0 and RAND_MAX. O valor de RAND_MAX: "This value is library-dependent, but is guaranteed to be at least 32767 on any standard library implementation." X = Numero % mod; Qualquer que seja o Numero, o valor de X estara entre 0 e mod-1 (com mod > 0), e' o resto da divisao. http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ http://www.cplusplus.com/reference/clibrary/cstdlib/RAND_MAX/ Edited October 30, 2012 at 11:58 AM by mogers "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
pmg Posted October 30, 2012 at 12:06 PM Report #480982 Posted October 30, 2012 at 12:06 PM (edited) A função rand() devolve um número entre 0 e RAND_MAX. Nós queremos reduzir esse intervalo a um intervalo mais pequeno (por exemplo, entre 15 e 21). Para isso é bom saber quantos números existem para o intervalo em que estamos interessados (15, 16, 17, 18, 19, 20, 21: ou seja 7 números). Para calcular esse número de números calcula-se a subtracção do maior pelo menor e soma-se 1 (21 - 15 + 1; outro exemplo: entre 165 e 165: 165 - 165 + 1 => há um número). Sabendo quantos números queremos podemos calcular o resto da divisão (rand() % <NUMERO_DE_NUMEROS>). Isto vai dar um número aleatório (com bias) entre 0 e um menos o <NUMERO_DE_NUMEROS>. Se a seguir somarmos o número mais pequeno a esse resultado obtemos o pretendido 🙂 Exemplo detalhado: randbetween(15, 21) rand() deu 64100825 21 - 15 + 1 dá 7 64100825 % 7 dá 5 (o resto da divisão de 64100825 por 7 dá 5) 5 + 15 dá 20 resultado 20 Edited October 30, 2012 at 12:09 PM by pmg 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!
pmg Posted October 30, 2012 at 12:16 PM Report #480984 Posted October 30, 2012 at 12:16 PM bias Suponhamos que a função rand() dá números entre 0 e 50 e que pretendemos obter números aleatórios entre 1 e 40. Com a função sugerida por mim, quando o número aleatório for 0 ou 40 (depois do módulo e soma de 1) obtemos 1 quando o número aleatório for 1 ou 41 (depois do módulo e soma de 1) obtemos 2 ... quando o número aleatório for 9 ou 49 (depois do módulo e soma de 1) obtemos 10 quando o número aleatório for 10 ou 50 (depois do módulo e soma de 1) obtemos 11 quando o número aleatório for 11 (depois do módulo e soma de 1) obtemos 12 quando o número aleatório for 12 (depois do módulo e soma de 1) obtemos 13 ... quando o número aleatório for 38 (depois do módulo e soma de 1) obtemos 39 quando o número aleatório for 39 (depois do módulo e soma de 1) obtemos 40 Como se pode constatar há muito mais probabilidade de obter 1, 2, ..., 11 do que os outros números. é isto o bias Como o RAND_MAX é um número muito grande e o <NUMERO_DE_NUMEROS> é muito pequeno, o bias é pequenino (e muitas vezes escolhe-se ignorar) 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!
gaspar1423 Posted November 7, 2012 at 11:18 AM Author Report #482044 Posted November 7, 2012 at 11:18 AM Obrigado mogers e pmg. a vossa explicação ajudou-me imenso 👍 👍 👍 obrigado a todos que me ajudaram 👍 :thumbsup:
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