Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vagner Le Roy

com matrizes passadas como parâmetros

Recommended Posts

Pessoal, me desculpem por criar outro tópico, mas é que parece que o servidor estava com problema quando eu postei e só agora eu vi que o outro estava em branco.

 

Bom, vamos lá, já tem um tempinho que vi C na faculdade e agora to precisando mecher nele novamente.

Acontece que eu esqueci muita coisa , inclusive os conceitos de como o C trabalha com ponteiros.

A professora minha de Linguagem de Programação passou o problema das 8 rainhas num tabuleiro 8x8, então estou aqui ralando mas tá dando um erro que eu não consigo ver.

 

void InicializaM(int **m) //preenchendo a matriz com 0
{
	 int i,j;
	 
	 for(i=0;i<8;i++)
	 {
		for(j=0;j<8;j++)
		  m[i][j]=0; //pos = 0 = posição vazia, sem rainha					   
		
	 }
	 
}   


int main(int argc, char *argv[])
{
  int matriz[8][8]; 
  InicializaM(matriz);
  
  system("PAUSE");	
  return 0;   
}

 

Outra dúvida, eu criei um estrutura desse tipo aqui:

typedef struct Ttabuleiro
{
   int matriz[N][N];//matriz que receberá o tabuleiro   
   int pos[N][2];//guarda a posicao de cada rainha no tabuleiro	 
}Ttabuleiro;

Qual é o procedimento pra me passar ela por referência?

E como eu vou acessar os campos dela dentro das funções?

t->matriz[j]?

 

Obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá dando um erro que eu não consigo ver.

use um debugger.

 

Isis , o erro está na atribuição da matriz

 

m[i][j]=0; //pos = 0 = posição vazia, sem rainha

Alguém sabe o que pode ser isso?

Se eu faço o mesmo código fora do procedure ele compila normalmente!

Bom, o erro que dá é esse aqui:

[Warning] passing arg 1 of `InicializaM' from incompatible pointer type

Compartilhar este post


Link para o post
Compartilhar em outros sites

void inicia(int M[][8]);

 

Use memset p/ inicializar.É mais curto que for.

 

#include <stdio.h>
#include <stdlib.h>
int ** inicia() {
  int i,j;
  int **M = (int **)malloc(sizeof(int*)*8);
  for(i=0;i<8;i++) {
   M[i] = (int*)malloc(sizeof(int)*8);
   for(j=0;j<8;j++)
	  M[i][j] = 0;
  }
  return M;
}

int main() {
 int **M;
 M = inicia();
}

 

O problema disso com argumento é que você fica sem o endereco atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.