Autor Tópico: problema ao mandar uma matriz para uma função(linguagem C)  (Lida 3315 vezes)

Offline tatsu3pt

  • Usuário Ubuntu
  • *
  • Mensagens: 61
    • Ver perfil
problema ao mandar uma matriz para uma função(linguagem C)
« Online: 04 de Novembro de 2010, 00:49 »
sou iniciante e gostaria de saber oq esta errado nesse codigo.
Eu quero mudar os valores dentro da funcao mesmo.

vou ter q fazer malloc em todas as linhas?

Código: [Selecionar]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void copia(int **m,  int **n){
    int i, j;
for(i = 0; i < 8; i++){
for(j = 0; j < 8; j++){
            m[i][j] = n[i][j];
}
}         
}

int main(){
int i, j, a= 0;
int origem[8][8], dest[8][8];
for(i=0;i<8;i++){
for(j=0;j<8;i++){
origem[i][j] = a; a++;
dest[i][j] = -1;
}
}
copia(origem, dest);

for(i=0;i<8;i++){
for(j=0;j<8;i++){
printf("%d", dest[i][j]);
}
printf("\n");
}
return 0;
}

Offline zeroday

  • Usuário Ubuntu
  • *
  • Mensagens: 1.083
    • Ver perfil
Re: problema ao mandar uma matriz para uma função(linguagem C)
« Resposta #1 Online: 04 de Novembro de 2010, 10:40 »
Olá tatsu ,

Vc poderia nos dizer uma breve descrição de o que seu problema faz. Não entendi o ponteiro para ponteiro como argumento para a função.

E poderia colar aqui o erro quando tenta compilar?

Até mais
"Lutar sempre , vencer na medida do possível , desistir jamais."

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: problema ao mandar uma matriz para uma função(linguagem C)
« Resposta #2 Online: 04 de Novembro de 2010, 15:52 »
sou iniciante e gostaria de saber oq esta errado nesse codigo.
Eu quero mudar os valores dentro da funcao mesmo.

Acho que seria mais fácil fazer assim:

Código: [Selecionar]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int i, j, a= 0;
  int origem[8][8], dest[8][8];

  for(i=0; i<8; i++)
    for(j=0; j<8; j++)
      origem[i][j] = a++;

  /* Mostra matriz "origem" */
  for (i=0;i<8;i++) {
    for(j=0;j<8;j++)
      printf("%d,", origem[i][j]);
    printf("\n");
  }
  printf("\n\n");

  /**** Usa função de copia para "copiar" matriz. ****/
  memcpy(&dest[0][0], &origem[0][0], sizeof(int) * 8 * 8);

  /* Mostra vetor destino */
  for (i=0;i<8;i++) {
    for(j=0;j<8;j++)
      printf("%d,", dest[i][j]);
    printf("\n");
  }

  return 0;
}

Ahhh. Note que, no seu código, trocou o 'j' pelo 'i' no incremento em 2 loops!

Darcamo

  • Visitante
Re: problema ao mandar uma matriz para uma função(linguagem C)
« Resposta #3 Online: 09 de Novembro de 2010, 19:32 »
Já que o fpissarra já respondeu (e de maneira bem elegante e eficiente com o memcpy), vou dizer apenas uma pequena dica estética.
No printf use
Código: [Selecionar]
printf("%2d,", dest[i][j]);
Com isso cara número vai ocupar o espaço de dois caracteres e a matriz ficará mais organizada.

Offline RonaldoRG

  • Usuário Ubuntu
  • *
  • Mensagens: 659
    • Ver perfil
    • Twitter: @rafas_andrade
Re: problema ao mandar uma matriz para uma função(linguagem C)
« Resposta #4 Online: 09 de Novembro de 2010, 20:11 »
O erro deve ser nessa linha:
Código: [Selecionar]
copia(origem, dest);Porque você declarou a função com a matriz com ponteiro para ponteiro e tá passando a matriz do tipo m[][].
Assim ou você declara a função com o tipo [][], ou você declara no main um ponteiro para ponteiro, aloca memória e atribui os valores.
Se for utilizar matrizes de dimensão arbitrária então tem que usar matriz dinâmica, se for matriz fixa então usa o tipo [][].
Eu dei uma verificada no seu código.
Código: [Selecionar]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void copia(int m[8][8],  int n[8][8]){
    int i, j;
for(i = 0; i < 8; i++){
for(j = 0; j < 8; j++){
            m[i][j] = n[i][j];
}
}         
}

int main(){
int i, j, a= 0;
int origem[8][8], dest[8][8];
for(i=0;i<8;i++){
for(j=0;j<8;j++){
origem[i][j] = a; a++;
dest[i][j] = -1;
}
}
copia(dest, origem);

for(i=0;i<8;i++){
for(j=0;j<8;j++){
printf("%2d ", dest[i][j]);
}
printf("\n");
}
return 0;
}
T+
Ubuntu 12.04

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: problema ao mandar uma matriz para uma função(linguagem C)
« Resposta #5 Online: 11 de Novembro de 2010, 17:49 »
RonaldoRG apresentou uma solução perfeita para o problema em questão.

Eu só fico meio cabreiro com a passagem de vetores ou matrizes para funções porque alguns compiladores tendem a descarregar o conteúdo na pilha. Por isso prefiro lidar com ponteiros...

O GCC não parece sofrer desse problema... Assim, é bastante segura a solução do RonaldoRG!