Ir para conteúdo

POWERED BY:

Arquivado

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

rjclaudio

Matriz bidimensional, ponteiros e funcoes

Recommended Posts

Eu tava com duvidas na hora de juntar matriz, ponteiros e funções, mas eu testei com uma matriz unidimensional e deu certo.

Queria saber se tem como fazer o mesmo com uma matriz bidimensional . Bem, claro q deve ter, então eu queria saber oq tem de errado no meu programa.

Esse programa é só pra iniciar uma matriz bidimensional e imprimir ela na tela.

Os erros que aparecem estão nos comentarios do programa.

 

(Obs.: Como q faz pra aparecer os espaçoes do código ? pra ficar td organizado ? eu tentei colocar, mas ficou tudo alinhado.)

 

 

#include<stdio.h>

#include<conio.h>

 

void IniciaMatriz (int matriz[][]);

void ImprimeMatriz (int matriz[][]);

 

int main (void)

{

/****/int matriz[20][20];

 

/****/IniciaMatriz (&matriz[0][0]);

/****/ImprimeMatriz (&matriz[0][0]);

 

 

 

/****/printf("\n\nFinalizando ... ");

/****/getch();

/****/return 0;

}

 

void IniciaMatriz (int matriz[][])

{

/****/int i,

/**********/j;

 

/****/for(i = 0; i < 10; i++)

/****/{

/**********/for(i = 0; i < 10; i++)

/**********/{

/****************/matriz[j] = i+2*j; // <-- Invalid use of array with unspecified bounds

/**********/}

/****/}

}

 

void ImprimeMatriz (int matriz[][])

{

/****/int i,

/**********/j;

 

/****/for(i = 0; i < 10; i++)

/****/{

/**********/for(i = 0; i < 10; i++)

/**********/{

/****************/printf("%2d ", matriz[j]); // <-- Invalid use of array with unspecified bounds

/**********/}

/**********/printf("\n");

/****/}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

no editor do iMasters, você pode utilizar o botao Code ( [#] )..

 

bom..

uma matriz de tamnho n se organiza na memoria como se fosse um vetor de tamanho n*n ..

 

entao para acessar uma matriz atraves de um ponteiro você pode utilizar um laço..

 

suponha q você tenha a matriz: M[5][5]

agora você quer utiliza-la em uma funçao qualquer..

 

entre com a primeira posição da matriz como parametro (&M[0][0])..

por exemplo.. uma funçao que retorna a soma dos elementos desta matriz

 

// você vai ter como parametros://	  um ponteiro para a primeira posição da matriz//	  a sua ordem (5x5)int SomaMatriz(int *matriz,lin,col){	int soma = 0;	// para percorre-la você pode utilizar o seguinte laço	for(int i=0;i<lin*col;i++)		soma += *(matriz + i);		 return soma;}
repare na estrutura: *(matriz + i)

 

ele retorna o valor que esta no endereço matriz + i

 

tipow.. qdo o i vale 3, eu terei *(matriz+3)

entao ele vai me retornar o valor que esta 3 posiçoes depois do ponteiro..

como se fosse um vetor..

 

facin neh..

 

espero ter ajudado

mas caso ainda esteja com duvidas, eh soh postar aki..

Compartilhar este post


Link para o post
Compartilhar em outros sites

tah, mas e se eu quiser saber o valor de um elemento específico da matriz.tipo, uma matriz 5x4, quero saber o valor do elemento da linha 3 e da coluna 2.como q eu boto o ponteiro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vj.. esta eh sua matriz 5x4:

O O O O

O O O O

O O O O

O O O O

O O O O

você quer localizar o elemento 3x2..

O O O O

O O O O

O O O O

O O O O

O O O O

Este elemento esta localizado em qual posição depois do ponteiro?

na 10ª, certo?!

vamos supor que o elemento q eu procuro esta na posição i x j ..

Qual a relação (logica) que podemos ter?

*(matriz+(i-1)*col+j)

:wacko:

veja q para a posição do elemento ja se passaram duas linhas inteiras neh (i-1)*col

e em qual coluna ele esta na terceira linha? na coluna j

 

se você estiver fazendo em C/C++, cuidado!! nesta explicação estou trabalhando com o indice começando em 1.. em C/C++ começa em 0 .. ok.

eh soh quebrar um pouco a kbça..

Compartilhar este post


Link para o post
Compartilhar em outros sites

to fazendo em C.tah, jah intendi.tentei fazer uns exemplos aki e deu certo.soh espero naum eskecer de novo isso, nunca me dei bem nessa materia.vlw ai, brigadaum

Compartilhar este post


Link para o post
Compartilhar em outros sites

se não me engano você não pode declarar um parametro de função assim:

 

void IniciaMatriz (int matriz[][]);

 

Tenta assim

void IniciaMatriz (int matriz[]);

 

ou assim

void IniciaMatriz (int *matriz);

Compartilhar este post


Link para o post
Compartilhar em outros sites

ali onde você corrigiu Genezini, está passando um vetor e não array bidimensional...

 

pra passar um array bidimensional, é obrigatório definir as "colunas", isto se estiver em notação de array...

 

void IniciaMatriz (int matriz[][20])
ou como ponteiro

void IniciaMatriz (int **matriz)

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.