Jump to content

Recommended Posts

Posted

Boas pessoal, eu estou a tentar fazer uma função que receba duas matrizes como parametros.. Mas não sei como o fazer, eu tentei char *matriz1, char *matriz2 e tentei com 2 * também mas não funcionou, também se depois na hora de chamar a função estou a enviar corretamente ass matrizes, alguem me pode ajudar?

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Podes utilizar:

void func(char matriz1[], char matriz2[])

ou

void func(char *matriz1, char *matriz2)

são ambos válidos.

Mas é possível que queiras enviar também o tamanho dos arrays para a função.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted

Supondo que, por matriz, entendes um array cujos elementos sao arrays (char matriz[100][100]) tens basicamente 2 maneiras:

1) Fixas a dimensão "mais interna"

int fx(char (*m1)[100], char (*m2)[100]) {
   m1[2][43] = m2[3][42];
   return 0;
}
int main(void) {
   char matrizum[100][100];
   char matrizdois[200][100];
   fx(matrizum, matrizdois);
   return 0;
}

2) Convertes (virtualmente) o array de arrays num array simples e passas o tamanho da dimensão mais interna

int fx(int innersize, char *m1, char *m2) {
   m1[2*innersize + 43] = m2[3*innersize + 42];
   return 0;
}
int main(void) {
   char matrizum[100][100];
   char matrizdois[200][100];
   fx(100, matrizum[0], matrizdois[0]);
   return 0;
}

Com um compilador de C99, podes usar o método 1) com um valor da dimensão "mais interna" variável

/* C99 */
int fx(int innersize, char (*m1)[innersize], char (*m2)[innersize]) {
   m1[2][43] = m2[3][42];
   return 0;
}
int main(void) {
   char matrizum[100][100];
   char matrizdois[200][100];
   fx(100, matrizum, matrizdois);
   return 0;
}
  • Vote 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Podes utilizar:

void func(char matriz1[], char matriz2[])

ou

void func(char *matriz1, char *matriz2)

são ambos válidos.

Mas é possível que queiras enviar também o tamanho dos arrays para a função.

Da-me erro ao passar ao chamar a função, como devo chama-la?

eu tentei:

func( forma_original[11][11] );

Supondo que, por matriz, entendes um array cujos elementos sao arrays (char matriz[100][100]) tens basicamente 2 maneiras:

1) Fixas a dimensão "mais interna"

int fx(char (*m1)[100], char (*m2)[100]) {
m1[2][43] = m2[3][42];
return 0;
}
int main(void) {
char matrizum[100][100];
char matrizdois[200][100];
fx(matrizum, matrizdois);
return 0;
}

2) Convertes (virtualmente) o array de arrays num array simples e passas o tamanho da dimensão mais interna

int fx(int innersize, char *m1, char *m2) {
m1[2*innersize + 43] = m2[3*innersize + 42];
return 0;
}
int main(void) {
char matrizum[100][100];
char matrizdois[200][100];
fx(100, matrizum[0], matrizdois[0]);
return 0;
}

Com um compilador de C99, podes usar o método 1) com um valor da dimensão "mais interna" variável

/* C99 */
int fx(int innersize, char (*m1)[innersize], char (*m2)[innersize]) {
m1[2][43] = m2[3][42];
return 0;
}
int main(void) {
char matrizum[100][100];
char matrizdois[200][100];
fx(100, matrizum, matrizdois);
return 0;
}

Só funcionou a primeira maneira, a segunda dava erro de incompatibilidade ao chamar a função, e o terceiro dizia na função, "a parameter is not allowed" , isto referente ao [innersize] ..

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Só funcionou a primeira maneira, a segunda dava erro de incompatibilidade ao chamar a função, e o terceiro dizia na função, "a parameter is not allowed" , isto referente ao [innersize] ..

1) ok

2) qual erro? Qual é a mensagem concreta? incompatibilidade entre o quê e o quê? Quais são as definições que estás a usar (as da função; as dos parametros; a da chamada; tudo)?

3) aparentemente o teu compilador não reconhece a linguagem C como definida em 1999; está configurado para a linguagem de 1989.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.