Ir ao conteúdo

Posts recomendados

Postado

Olá galera, sou novo aqui no fórum. Estava fazendo um exercício pra faculdade e não entendi muito bem o que estou fazendo errado.

 

Basicamente, a primeira função era pra gerar 0 ou 1 aleatoriamente dentro da matriz informada, sem pegar as "bordas" e então na segunda função eu somaria a quantidade de 1 que cada posição tem ao redor, meio que simulando um campo minado(1 = bomba). Quando fiz com char ao invés de int o printf funcionava normal, então eu sei que não é problema do gerador de numero aleatório, não estou entendo porque são impressos esses números bizarros ao invés de só imprimir a soma dos "1". Não liguem muito pra formatação feia ou o código iniciante, não manjo muito de C  =( 

 

O código está desse jeito:

 

void gera_campo1(int a[M][N]){
    int x =0;
    for( int i=1; i < M-1; i++){
         for(int j=1; j < N-1; j++){
                 
                 x= rand() % 2 ;
                 if ( x == 0)
                 a[i][j] = 0;
                 else a[i][j] = 1;
                 }
                 }
}
  
    
      
void gera_campo2(int a[][N]){
     
     for (int i=1; i < M-1; i++){
         
         for(int j=1; j< N-1; j++){
         	
         	a[i][j]= a[i-1][j] + a[i-1][j-1] + a[i-1][j+1] + a[i][j+1] + a[i][j-1] + a[i+1][j] + a[i+1][j+1] + a[i+1][j-1];
                 
                 }
   
       
     
}                  
     
     
               
                 
}

int main(){
    
    int  campo1[M][N];
    
    srand(time(0));
    gera_campo1(campo1);
    
    
	for (int i=0; i<M; i++){
        for (int j=0; j<N; j++){
            printf(", %d",campo1[i][j]);}
            printf("\n");                 
            }
            
    gera_campo2(campo1);
    
    printf("numero de bombas na vizinhanca\n");
    for (int i=0; i<M; i++){
        for (int j=0; j<N; j++){
            printf(", %d",campo1[i][j]);}
            printf("\n");                 
            }
    
    
            
        
        
        
        
        
        
        
        
        
        
        
        
        system("Pause");  
        
            }
    
    

 

Obrigado desde já =]

 

Postado

Você está alocando memória para matriz? Na declaração você usa M e N para definir o tamanho da matriz. Porém não estou vendo se você está usando como variável ou constante e nem mesmo onde estão declaradas q:

 int  campo1[M][N];

 

Postado

@Berilo Os números estranhos aparecem porque você não setou valores para as bordas da matriz, veja isso:

 

#include <cstdio>
#include <cstdlib>
#include <ctime>

#define M 6
#define N 6

int  campo1[M][N];

void gera_campo1(int a[][N]) {
  int x =0;
  for( int i=1; i < M-1; i++) {
    for(int j=1; j < N-1; j++) {

      x= rand() % 2+1 ;
      if ( x == 0)
        a[i][j] = 0;
      else a[i][j] = 1;
    }
  }
}

void gera_campo2(int a[][N]) {

  for (int i=1; i < M-1; i++)
    for(int j=1; j< N-1; j++)
      a[i][j]= a[i-1][j] + a[i-1][j-1] + a[i-1][j+1] + a[i][j+1] + a[i][j-1] + a[i+1][j] + a[i+1][j+1] + a[i+1][j-1];
}

int main() {



  srand(time(0));
  gera_campo1(campo1);
printf("Campo 1\n");
  for (int i=0; i<M; i++) {
    for (int j=0; j<N; j++) {
      printf(", %4d", campo1[i][j]);
    }
    printf("\n");
  }

  gera_campo2(campo1);

  printf("numero de bombas na vizinhanca\n");
  for (int i=0; i<M; i++) {
    for (int j=0; j<N; j++) {
      printf(", %4d",campo1[i][j]);
    }
    printf("\n");
  }

  getchar();

}

 

Visitante
Este tópico está impedido de receber novas respostas.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...