Ir para conteúdo
Fórum Script Brasil
  • 0

Rand em Matrizes


Ax00n

Pergunta

Boa tarde comunidade do scriptbrasil,

estou a tentar obter a vossa ajuda pois já perdi horas e horas a pensar num jeito de resolver o meu problema e não consigo...

1 - Eu tenho uma matriz de MxP (valores de entrada)

2 - A matriz é composta pelas letras X e Y

3 - As letras da matriz são geradas aleatoriamente, mas só pode existir cinco Y.

Por exemplo, para M=3 e P=7:

X Y X X X X X

Y X X X Y X X

X X X Y X X Y

esta seria a matriz certa.

#include	<stdio.h>

int main() {
	int M,P,L;
	printf("M: ");
	scanf("%d", &M);
	printf("P: ");
	scanf("%d", &P);
	printf("L: ");
	scanf("%d", &L);
	printf("\n");

	int matriz[M][P];
	int i,j;
	int r;

	for(i=0; i<M; i++){
		for(j=0; j<P; j++){
			r=rand ()% 2;
			if (r==1) r="X";
			else r="Y";

			matriz[i][j]=r;
			printf("%s", matriz[i][j]);
		}
		printf("\n");
	}
}

Esse é o código que eu construí, e consigo ter uma matriz com X e Y aleatórios, o "L" é a variável que diz quantos Y a minha matriz pode ter, no exemplo que coloquei lá em cima L=5, como é que eu faço isso?

Espero que tenham compreendido o meu problema, minha cabeça está quase a explodir.

Obrigado a todos, um abraço

Editado por Ax00n
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá boa noite, na verdade acho que você está complicando algo simples.

Se eu entendi bem o enunciado, podemos assumir que temos uma matriz cujo tamanho é definido pelo usuário, sendo essa matriz repleta de X.

O usuário também vai definir um número arbitrário de Y que serão fixados na matriz em posições aleatórias.

Para atender ao texto acima, o exemplo abaixo foi criado.

#include <stdlib.h>
#include <stdio.h>

int main(){
	int linha, coluna, numeroDeY;
	printf("Informe o numero de linhas da matriz: ");
	scanf("%d", &linha);
	printf("\nInforme o numero de colunas da matriz: ");
	scanf("%d", &coluna);
	printf("\nInforme o numero de Y que deve existir na matriz: ");
	scanf("%d", &numeroDeY);
	
	//verifica se o numero de y está dentro do intervalo da matriz. linhaXcoluna.
	if(numeroDeY>(coluna*linha)){
		printf("\nO numero de y estar fora do intervalo da matriz.");
		return -1;
	}
	
	char matriz[linha][coluna];
	//preenche a matriz com x.
	for(int i=0; i<linha; i++){
		for(int j=0; j<coluna; j++){
			matriz[i][j]='X';
		}
	}	
	
	//sorteando os Ys necessarios.
	int yLina, yColuna;
	for(int i=0; i<numeroDeY; i++){
		yLina=rand()%linha;
		yColuna=rand()%coluna;
		//verifica se o item selecionado já foi selecionado ou não.
		if(matriz[yLina][yColuna]=='X'){
			matriz[yLina][yColuna]='Y';
		}else{
			//esse y já foi selecionado então, temos que selecionar outro.
			i--;
		}
	}
	//imprime a matriz para ver o resultado.
	for(int i=0; i<linha; i++){
		for(int j=0; j<coluna; j++){
			printf("%c ", matriz[i][j]);
		}
		printf("\n");
	}
}

Se eu entendi algo errado, me desculpe.

até mais

Link para o comentário
Compartilhar em outros sites

  • 0

Rickayron, muito obrigado pela sua ajuda,

se tiver disponibilidade pode-me explicar como é que o programa interpreta estes passos:

//sorteando os Ys necessarios.
	int yLina, yColuna;
	for(int i=0; i<numeroDeY; i++){
		yLina=rand()%linha;
		yColuna=rand()%coluna;
		//verifica se o item selecionado já foi selecionado ou não.
		if(matriz[yLina][yColuna]=='X'){
			matriz[yLina][yColuna]='Y';
		}else{
			//esse y já foi selecionado então, temos que selecionar outro.
			i--;
		}

A parte do condicional if e else é que não percebi bem a lógica, se não estiver a abusar muito pedia que me explicasse esse passo.

Um abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, bom dia.

Estou a disposição, o mais importante é que entenda a lógica, por isso pode perguntar o for necessário.

Bem vamos, lá.

O usuário vai informar um número qualquer de y, que serão selecionados aleatoriamente.

Mas o problema do aleatório é que existe uma probabilidade de um número ser selecionado duas vezes, e por isso uso o if para verificar se aquela posição é livre (igual a x, indica que não foi selecionada anteriormente.) ou já está ocupada( é igual a Y, pois já foi selecionada anteriormente.).

Se aquele número for recusado, ou seja, já estiver sido selecionado anteriormente, agente diminui uma unidade no i, para que o processo repita mais uma vez.

até mais.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...