rjclaudio 0 Denunciar post Postado Maio 26, 2006 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
ricci ottadnot 4 Denunciar post Postado Maio 26, 2006 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
rjclaudio 0 Denunciar post Postado Maio 27, 2006 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
ricci ottadnot 4 Denunciar post Postado Maio 27, 2006 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
rjclaudio 0 Denunciar post Postado Maio 27, 2006 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
ricci ottadnot 4 Denunciar post Postado Maio 27, 2006 Agnt no começo fica meio perdido mesmo.. mas te garanto q daki um tempin você vai fazer esses programinhas de olho fechado.. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif flw Compartilhar este post Link para o post Compartilhar em outros sites
Genezini 0 Denunciar post Postado Maio 29, 2006 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
gRoOvE 0 Denunciar post Postado Agosto 22, 2008 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