Ir ao conteúdo

C Wumpus posiçoes aleatorias para os objetos na matriz


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Bom galera estou fazendo um wumpus e quero que gere posiçoes aleatorias e quero por um limite nesse gerador por exemplo: o usuário escolhe o tamanho da matriz 4x4 preciso que o gerador gere apenas 2 poço aleatórios na matriz como faço? já fiz a parte que o usuário escolhe o tamanho da matriz

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


int main(void){
int i, j; //contadores
int const N; // constante para definir o tamanho da matriz ambiente

printf("informe o tamanho do ambiente:");
scanf("%i", &N);

int Am[N] [N];//matriz usada como ambiente

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        Am[i] [j] = 0; //matriz ambiente criada e preenchida com 0
        }
}
for(i=0; i<N; i++){
    for(j=0;j<N; j++){
        printf(" %i", Am[i][j]);
    }
    printf("\n");
}
}

 

  • Obrigado 1
  • Solução
Postado

@zepelinmdr    para gerar apenas duas posição você coloca um loop que repita duas vezes , então seu código com algumas modificações poderia ser assim  :

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


int main(){
    srand(time(NULL));
    int i,j,cont=0,flag; //contadores
    int const N; // constante para definir o tamanho da matriz ambiente
    printf("informe o tamanho do ambiente:");
    scanf("%i", &N);
    int Am[N][N];//matriz usada como ambiente
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            Am[i][j] = 0; //matriz ambiente criada e preenchida com 0*/

    flag=0;
    for(cont=0;cont<2;cont++){
        do{
            i=rand()%N;
            j=rand()%N;
           if(Am[i][j]!= 0)flag=1;
        }while( flag  );
        Am[i][j]=rand()%100;
    }
    for(i=0; i<N; i++){
        for(j=0;j<N; j++){
            printf(" %2i",Am[i][j]);
        }
        printf("\n");
    }
    printf("\n\n");
    return 0;
}

 

Postado

@zepelinmdr    stray"\357" seria algum caractere inválido , como um ponto ou vírgula ou número , no texto do seu  código ,  copie o código do fórum novamente e cole no codeblocks que é essa IDE que uso e testei aqui e funcionou bem  .

Postado

consegui resolver o erro eu tinha copiado errado agora tenho so mais uma pergunta como faço para o rand gerar so o valor que eu quero por exemplo quero que o rand gere apenas o numero 2 como faço? nesse código 

  • Curtir 1
Postado

Nessa parte do codigo

 for(cont=0;cont<F;cont++){
        do{
            i=rand()%N;
            j=rand()%N;
           if(Am[i][j] == 0) {flag=1;}
        }while( flag  );
        Am[i][j]=1;
    }

queria que ficasse assim mas nao compila nao sei porque não aparece erro mas tambem nao aparece a matriz no compilador, botei para as posições aleatórias que aparecerem recebessem 1.

  • Curtir 1
Postado

já consegui aqui

adicionado 35 minutos depois

beleza agora so preciso de mais uma ajuda  no if (Am [j] ==0) ele vai ver que não tem zero e nao vai por nada preciso que ele procure outro lugar, ou seja o "for" rode mais uma vez para achar outro local como faço? 

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


int main(){
srand(time(NULL));
int cont;
int insira;
int i, j; //contadores
int const N; // constante para definir o tamanho da matriz ambiente
int F;
  
printf("informe o tamanho do ambiente:");
scanf("%i", &N);

int Am[N] [N];//matriz usada como ambiente


/* 1-fosso, 2-wumpus, 4-agente*/
for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        Am[i] [j] = 0; //matriz ambiente criada e preenchida com 0

        }
        }

F=N-1;
for(cont=0;cont<F;cont++){ //gerador do fosso

    i=(rand()%N)+1; //geradores de posição aleatorios
    j=(rand()%N)+1; //geradores de posição aleatorios

if(Am[i][j]==0) {
    Am[i][j] = 1;
}

}
for(cont=0;cont<1; cont++ ){
    i = (rand() %N)+1;
    j = (rand() %N)+1;
    if(Am[i][j]==0){
        Am[i][j] = 2;
    }

}


for(i=0; i<N; i++){
    for(j=0;j<N; j++){
        printf(" %i", Am[i][j]);
    }
    printf("\n");
}
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!