Fazer uma matriz com letras aleatórias??

1. Fazer uma matriz com letras aleatórias??

Larissa Fiorini
larissaf

(usa Linux Mint)

Enviado em 12/06/2014 - 21:12h

Por favoor, como fazer?
Meu professor pediu para a gente fazer um candy crush em C, mas com letras. Então preciso fazer uma matriz 9x9 com letras aleatórias. E ele não mostrou como usar o 'rand' então não estou conseguindo..
Fiz assim:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>

int x, y;



char vetor(void)
{
char vetorletra[6] = {
'G', 'B', 'F', 'M', 'Z'
};
int mat[9][9];
char n;
srand(time(NULL));
for (x=1; x<='M'; x++)
{
for (y=1; y<='Z'; y++)
{
n = (vetorletra) (rand() % 10);
mat[x][y]= n;
printf("[%c] ", mat[x][y]);

}
getch();
}
return 0;
}

Mas não está funcionando.. como posso fazer?
E para imprimir depois a matriz também estou tendo dificuldade..
Muito obrigado!!


  


2. Re: Fazer uma matriz com letras aleatórias??

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/06/2014 - 22:35h

Boa noite. Seja bem-vinda a comunidade

Primeiramente uma dica: Quando for postar seus códigos aqui coloque entre as tags [ code] [/ code], sem o espaço antes do "c".

Aqui mesmo tem uma dica a respeito do uso da função rand:
http://www.vivaolinux.com.br/dica/Gerando-numeros-aleatorios-em-C

Dê uma lida e procure entender como usar a função, para posteriormente aplicá-la ao seu programa.

O seu código-fonte contém alguns erros de sintaxe e de lógica:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>

int x, y;

char vetor(void)
{
char vetorletra[6] = {'G', 'B', 'F', 'M', 'Z'};
int mat[9][9];
char n;
srand(time(NULL));
for (x=1; x<='M'; x++)
{
for (y=1; y<='Z'; y++)
{
n = (vetorletra) (rand() % 10);
mat[x][y]= n;
printf("[%c] ", mat[x][y]);

}
getch();
}
return 0;
}


Em primeiro lugar, seu programa não tem a função principal main().No lugar de char vetor(void), deveria ser int main().

Em segundo lugar, você declarou o vetor "vetorletra" com capacidade para 6 elementos e só usou cinco(Não é errado, mas está gastando memória a toa).

Em terceiro lugar, você disse que quer uma matriz que armazene caracteres, então a matriz tem que ser do tipo char. Você declarou como int, não dá erro, porém o ideal é usar como char.

Em quarto lugar, você está fazendo as comparações nos laços com caracteres. Isso não trará o resultado esperado. Você quer "encher" a matriz certo? Então quantas repetições você acha que tem que ser feitas? Pense na matriz como se fosse uma tabela, o primeiro laço(controlado pelo x) representam as linhas da tabela, o segundo laço(controlado pelo y,e interno ao x) representam as colunas. E inicialize essas variáveis no laço for com 0, ambas, porque em linguagem C os índices dos vetores e matrizes começam no 0. Por exemplo, o índice do primeiro elemento do vetor "vetorletra[6]" é "vetorletra[0]", cujo valor é o primeiro elemento do vetor, no caso é 'G'.

Em quinto lugar, procure separar as coisas, primeiro preencha a matriz, e depois que estiver completamente preenchida escreva os valores na tela.

A atribuição que você fez na linha 19 é inválida

n = (vetorletra) (rand() % 10));

Dê uma olhada a respeito de vetores, para ver como passar um elemento de um vetor para uma variável.

Bons estudos!



3. Re: Fazer uma matriz com letras aleatórias??

Larissa Fiorini
larissaf

(usa Linux Mint)

Enviado em 13/06/2014 - 19:09h

Muito obrigado pela ajuda!!Fiz os ajustes que você indicou.
Mas olhando aqui sobre o rand, entendi bem seu funcionamento com números, porém ainda não entendi como posso colocar letras aleatórias. Não sei como acessar o vetor e preencher a matriz com caracteres aleatórios do vetor. Você poderia me ajudar??


4. Re: Fazer uma matriz com letras aleatórias??

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/06/2014 - 22:44h

larissaf escreveu:

Muito obrigado pela ajuda!!Fiz os ajustes que você indicou.
Mas olhando aqui sobre o rand, entendi bem seu funcionamento com números, porém ainda não entendi como posso colocar letras aleatórias. Não sei como acessar o vetor e preencher a matriz com caracteres aleatórios do vetor. Você poderia me ajudar??


De nada! Onde meu pouco conhecimento puder ajudar alguém fico feliz.

Bom, vamos por partes:


Mas olhando aqui sobre o rand, entendi bem seu funcionamento com números, porém ainda não entendi como posso colocar letras aleatórias.


Isso mesmo, a função rand() irá gerar NÚMEROS aleatórios. Mas você quer que sejam "embaralhadas" as letras, certo? É aí o ponto importante de se entender.

Você criou um vetor chamado vetorletra[6]. Esse vetor irá armazenar 6 letras distintas. Mas aí você pensa, "onde entra a função rand() para eu conseguir manipular essas letras?". A função rand() entra justamente no índice desse vetor vetorletra[6].

Por exemplo:


n = rand() % 5;
mat[x][y] = vetorletra[n];


O que foi feito acima? Na variável n, foi atribuído um valor aleatório entre 0 e 5. Lembre-se que em linguagem C a contagem do índice começa no 0. Então como são 6 letras, a última letra está no índice 5.

Depois na matriz mat[x][y], foi atribuído uma letra aleatória porque o n que é o índice do vetor irá mudar a cada repetição do laço, atribuindo a n uma letra aleatória a cada repetição do laço.


Não sei como acessar o vetor e preencher a matriz com caracteres aleatórios do vetor.


Está respondido no trecho de código acima. Sendo que esse trecho é do seu programa. Só tome cuidado e coloque n como tipo int. Por que em n não irá ficar armazenado uma letra mas sim um número aleatório entre 0 e 5.

E também quando for usar uma função, não use somente o nome dela. Não é rand, mas rand(). Não se esqueça dos parênteses, se não irá ocorrer um erro na compilação.