Ir para conteúdo
Fórum Script Brasil
  • 0

Uso de matrizes em funções


djoser

Pergunta

Olá, sou novo por aqui.

Fiz uma função do tipo

double teste (double [][])

main(){...}

double teste(double matriz[][]){...}

mas na primeira linha em que declaro a função (antes do main) e na depois do main o compilador faz o seguinte comentário: "multidimensional arry must have bounds for all dimensions except first".

Não entendi muito bem. Como faço para ter algo do tipo?

Outra dúvida, é possível ter uma função do tipo int [][] teste() ?

Obrigado

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
"multidimensional arry must have bounds for all dimensions except first".

A regra é clara: matriz multidimensional precisa ter limites para todas as dimensões, exceto a primeira.

Outra dúvida, é possível ter uma função do tipo int [][] teste() ?

Não. Você não pode retornar uma matriz. Muito menos multidimensional com o erro acima. :)

Link para o comentário
Compartilhar em outros sites

  • 0

Como assim varia de tamanho? É uma matriz dinâmica? Se for, você precisará alocar memória, conforme a necessidade. Poste o código, pois sem ver o que você está fazendo eu só posso ficar na suposição. Mas poste dentro das tags de código, senão nem dá pra ler.

Link para o comentário
Compartilhar em outros sites

  • 0

Observe o seguinte. O compilador precisa saber como ele vai acessar os elementos de uma matriz. Portanto, você precisa informá-lo qual a geometria dessa matriz. Se nem você sabe qual será o tamanho dessa matriz, então arrume outro jeito de armazenar os valores. Matriz nXn, com um valor n incerto e não sabido não vai dar pé. Uma alternativa é você usar uma lista ligada.

Link para o comentário
Compartilhar em outros sites

  • 0

Você vai precisar fazer alocação dinâmica, não tem outra maneira.

Defina a matriz como:

double **matriz;
Depois de capturar o valor de n e antes de utilizar a matriz, faça: em C:
// não sei se o type casting é necessário, mas aconselho a usar sempre
   matriz = (double **) malloc(n*sizeof(double *));   //aloca um ponteiro para ponteiro de double
   for (i = 0; i<n; i++)
      matriz[i] = (double *) malloc(n*sizeof(double)); // aloca um ponteiro para double
em C++
matriz = new double* [n];
   for (int i=0; i<n; i++)
      matriz[i] = new double [n];
E no final do programa, quando você não precisar mais usar a matriz, faça: Em C:
for (i = 0; i<n; i++)
      free(matriz[i]);
   free(matriz);
Em C++:
for (int i=0; i<n; i++)
      delete matriz[i];
   delete matriz;
Pra passar como argumento em função teste, você deve definir na função, que o argumento que você vai receber é do tipo double** & Isso diz que você vai poder modificar o conteúdo da matriz e devolvê-lo pra fora da função. defina assim:
void teste (double ** &matriz)
{
}
Mas quando for fazer a chamada dela dentro da main, coloque a matriz sem &
teste(matriz);

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...