Matriz como parametro de una funcion

Iniciado por Dacan, 23 Marzo 2013, 02:14 AM

0 Miembros y 1 Visitante están viendo este tema.

Dacan

Como puedo obtener una matriz desde los parametros de una funcion?

Necesito hacer una funcion para multiplicar matrices:

int multmatrices(int afilas, int acolumnas, aarreglo[][], int bfilas, int bcolumnas, barreglo[][]){

Me da error al intentar obtener las matrices asi.

durasno

Tenes mal la declaracion de la funcion, tnes que especificar el tipo de dato de las matrices y los tamaños(filas y columnas)


Saludos
Ahorrate una pregunta, lee el man

Dacan

int multmatrices(int afilas, int acolumnas, int aarreglo[][], int bfilas, int bcolumnas, int barreglo[][]){


Las filas y columnas seran asignadas por el usuario es decir para eso son las otras variables: afilas, acolumnas, bfilas, bcolumnas.

durasno

En el caso de las matrices tenes q especificar si o si las filas y columnas, sino tenes que usar matrices dinamicos para hacer uso de afilas, acolumnas,....


Saludos

PD: enrealiadad si se puede omitir las filas en la declaracion, pero no las columnas
Ahorrate una pregunta, lee el man

Dacan

Y como puedo utilizar matrices dinamicos, lo necesito ya que la funcion a crear necesariamente debe ser asignada por el usuario.

naderST

Debes especificar únicamente las columnas, pero en tu caso debes utilizar un apuntador y pasarle a la función el número de columnas de tu matriz dinámica ya que necesitas saber sí o sí el número de columnas ya que al final tu matriz en memoria no es más que un arreglo, es decir, digamos que tienes el siguiente arreglo en memoria:

1 2 3 4 5 6

Puedes verlo como varias matrices:

2x3
1 2 3
4 5 6

3x2
1 2
3 4
5 6

6x1
1
2
3
4
5
6

Todo depende de cómo la quieras tratar.

durasno

CitarY como puedo utilizar matrices dinamicos
Tnes q investigar el tema de "memoria dinamica", vas a ver funciones como malloc, realloc, free.. comenza intentando hacer un arreglo unidimencional dinamico y luego pasa por la matriz. Cualquier duda pregunta


Si te parece muy dificil el tema, la otra alternativa es crear matrices con tamaños maximos, ejemplo:
#include <stdio.h>

#define MAX_FILAS 10
#define MAX_COLUMNAS 10

int multmatrices(int afilas, int acolumnas, int aarreglo[MAX_FILAS][MAX_COLUMNAS], int bfilas, int bcolumnas, int barreglo[MAX_FILAS][MAX_COLUMNAS]) { /* ........ */ }

int main() {
  /* variables */
  int a[MAX_FILAS][MAX_COLUMNAS], b[MAX_FILAS][MAX_COLUMNAS];
  /* ingreso del usuario de los tamaños de la matriz; debe ser menor que los
   valores maximos definidos */
 
multmatrices( afilas, acolumnas, a, b, bfilas, bcolumnas);

return 0;
}
Ahorrate una pregunta, lee el man

Dacan

Muchisimas gracias, me funciona mejor lo de declarar constantes y con un simple if puedo comprobar de que los valores del usuario sean menores :D

Lo de memoria dinamica y punteros quizas lo averigue para luego.

Saludos.

Wofo

#8
Por si te interesa, lo de matrices/arrays dinámicos es muy fácil de implementar usando una de las librerías estándares que trae C++ y que se llama "vector".

Usarlo es tan sencillo como muestro en el código:
Código (cpp) [Seleccionar]
#include <vector>

int main() {
int size = 5;
vector<int> array(size);

array[0] = 8;
array[1] = 3;
//array[5] daría error porque está fuera del rango
}

Descripción: http://www.cplusplus.com/reference/vector/vector/
Ejemplos: http://www.mochima.com/tutorials/vectors.html
Fuente: Google.

Saludos,
Wofo.