Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/02/2012, 12:04
cesar_casla
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 9 meses
Puntos: 94
Respuesta: Como enviar arreglos a funciones en C

hola n_i! para enviar un arreglo a una funcion solo basta con pasarle la direccion de inicio del arreglo, como el nombre de todo arreglo es el inicio, podes hacer:
Código C:
Ver original
  1. pedir_matriz(A);  // llamada a la funcion pedir_matriz donde se le pasa como argumento la matriz A

El problema con los arreglos de dos dimensiones (o mas) es que en la funcion se debe declarar el numero de columnas(el numero de filas se puede omitir), ej:
Código C:
Ver original
  1. void pedir_matriz(int A[nFILAS][nCOLUMNAS])
  2. { .... }
  3. // o tambien la podes declarar como
  4. void pedir_matriz(int A[][nCOLUMNAS])
  5. { .... }

Ahora ¿que son nFILAS y nCOLUMAS? estos nombre deben estar declarados e inicializados en algun lugar. Generalmente yo trabajo a esas variables como define las cuales van a hacer el maximo tamaño de la matriz, ejemplo:
Código C:
Ver original
  1. #define nFILAS 10
  2. #define nCOLUMAS 15
Teniendo estos define declaro en el main la matriz como:
Código C:
Ver original
  1. int A[nFILAS][nCOLUMAS]; // maximo de filas 10 y maximo de columas 15
Luego pido al usuario que ingrese el tamaño de la matriz "que él va a utilizar"... Resumiendo en codigo seria:

Código C:
Ver original
  1. #define nFILA 8
  2. #define nCOLUMNA 8
  3.  
  4. int main (int argc, char*argv[])
  5.     {
  6.         int fila1=atoi(argv[1]),columna1=atoi(argv[2]),fila2=atoi(argv[3]),columna2=atoi(argv[4])  
  7.         int i=0, j=0, k=0, s;
  8.         int A[nFILA][nCOLUMA],B[nFILA][nCOLUMA],Aux[nFILA][nCOLUMNA];
  9.        
  10.         // mini compro para mejorar mas adelante
  11.         if (fila1<=0 || columna1<0 || fila2<=0 || columna2<0 || columna1!=fila2)
  12.             {
  13.                 printf ("\a \"Debe ingresar un orden mayor que cero\"\n\n");
  14.             }  
  15.         else  {
  16.             pedir_matriz(A,fila1,columna1); // llamada a la funcion donde se le pasa la matriz, el numero de filas y de columnas ingresados por el usuario
  17.             pedir_matriz(B,fila2,columna2);
  18.  
  19.                       // reliza las operaciones
  20.                       for(i=0;i<fila1;i++){
  21.                     for(j=0;j<columna2;j++){
  22.                             s=0;
  23.                             for(k=0;k<fila2;k++){
  24.                                 s=s+(A[i][k]*B[k][j]);  }
  25.                             Aux[i][j]=s;
  26.                            
  27.                                   }
  28.                        }
  29.             //Mostras la respuesta
  30.             printf ("\"La Matriz respuesta es\"\n");
  31.             for(i=0;i<fila1;i++){
  32.                     for(j=0;j<columna2;j++){
  33.                             printf("\t%d",Aux[i][j]);
  34.                                   }
  35.                     printf ("\n");
  36.                        }
  37.                    
  38.                 }
  39.     return 0;
  40.              }

Y la funcion seria:

Código C:
Ver original
  1. void pedir_matriz(int mat[nFILA][nCOLUMNA], int fila, int columna)
  2. {
  3.    int i,j;
  4.             printf ("\"Ingrese los datos de la matriz"\n");
  5.            for(i=0;i<fila;i++){
  6.                    for(j=0;j<columna;j++){
  7.                            printf("Posicion[%d][%d]: ",i+1,j+1);
  8.                            scanf("%d",&mat[i][j]);  
  9.                                  }
  10. }

Espero q se haya entendido algo. Saludos