Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como enviar arreglos a funciones en C

Estas en el tema de Como enviar arreglos a funciones en C en el foro de C/C++ en Foros del Web. Hola y bendiciones para todos, de antemano gracias por su respuesta. Estoy aprendiendo a usar c hasta me surgio la dificultad de no saber como ...
  #1 (permalink)  
Antiguo 05/02/2012, 20:32
Avatar de n_i
n_i
 
Fecha de Ingreso: febrero-2012
Ubicación: Lourdes, La Libertad, El Salvador, El Salvador
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Como enviar arreglos a funciones en C

Hola y bendiciones para todos, de antemano gracias por su respuesta.

Estoy aprendiendo a usar c hasta me surgio la dificultad de no saber como manda un arreglo de dos dimensiones a un función en C. Bueno explico eh escrito un codigo que recibe desde consola el orden de dos matrices y las multiplica bueno y trabaja bien y quiero optimizarlo creando una funcion que sea capaz de pedir ambas matrices bueno espero que me entienda les dejo el codigo que tengo para multiplicar las matrices sin la funcion que trato de hacer y despues el que tiene mi intento y idea de como mandar el arreglo

Código C:
Ver original
  1. #include <stdio.h>
  2. //programa para multiplicar matrices que cumplan las reglas de multiplicacion
  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[fila1][columna1],B[fila2][columna2],Aux[fila1][columna1];
  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.             //pide matriz 1
  17.             printf ("\"Ingrese 1ª (A) Matriz a Sumar\"\n");
  18.             for(i=0;i<fila1;i++){
  19.                     for(j=0;j<columna1;j++){
  20.                             printf("Ingrese el valor de A[%d][%d]:\n",i+1,j+1);
  21.                             scanf("%d",&A[i][j]);  
  22.                                   }
  23.                        }   
  24.             //pide matriz 2
  25.             printf ("\"Ingrese 2ª (B) Matriz a Sumar\"\n");
  26.             for(i=0;i<fila2;i++){
  27.                     for(j=0;j<columna2;j++){
  28.                             printf("Ingrese el valor de B[%d][%d]:\n",i+1,j+1);
  29.                             scanf("%d",&B[i][j]);  
  30.                                   }
  31.                        }
  32.             // reliza las operaciones
  33.             for(i=0;i<fila1;i++){
  34.                     for(j=0;j<columna2;j++){
  35.                             s=0;
  36.                             for(k=0;k<fila2;k++){
  37.                                 s=s+(A[i][k]*B[k][j]);  }
  38.                             Aux[i][j]=s;
  39.                            
  40.                                   }
  41.                        }
  42.             //Mostras la respuesta
  43.             printf ("\"La Matriz respuesta es\"\n");
  44.             for(i=0;i<fila1;i++){
  45.                     for(j=0;j<columna2;j++){
  46.                             printf("\t%d",Aux[i][j]);
  47.                                   }
  48.                     printf ("\n");
  49.                        }
  50.                    
  51.                 }
  52.     return 0;
  53.     }

Código C:
Ver original
  1. #include <stdio.h>
  2. //programa para multiplicar matrices que cumplan las reglas de multiplicacion
  3.  
  4. int i=0, j=0;
  5. int pedir_matris (int x, int y, int Z);
  6.  
  7. int main (int argc, char*argv[])
  8.     {
  9.         int fila1=atoi(argv[1]),columna1=atoi(argv[2]),fila2=atoi(argv[3]),columna2=atoi(argv[4]);
  10.         int k=0, s;
  11.         int A[fila1][columna1],B[fila2][columna2],Aux[fila1][columna1];
  12.        
  13.         // mini compro para mejorar mas adelante
  14.         if (fila1<=0 || columna1<0 || fila2<=0 || columna2<0 || columna1!=fila2)
  15.             {
  16.                 printf ("\a \"Debe ingresar un orden mayor que cero\"\n\n");
  17.             }  
  18.         else  {
  19.             pedir_matris (fila1, columna1, "A");
  20.             //pide matriz 1
  21.             /*printf ("\"Ingrese 1ª (A) Matriz a Sumar\"\n");
  22.             for(i=0;i<fila1;i++){
  23.                     for(j=0;j<columna1;j++){
  24.                             printf("Ingrese el valor de A[%d][%d]:\n",i+1,j+1);
  25.                             scanf("%d",&A[i][j]);  
  26.                                   }
  27.                        }*/ 
  28.             //pide matriz 2
  29.             printf ("\"Ingrese 2ª (B) Matriz a Sumar\"\n");
  30.             for(i=0;i<fila2;i++){
  31.                     for(j=0;j<columna2;j++){
  32.                             printf("Ingrese el valor de B[%d][%d]:\n",i+1,j+1);
  33.                             scanf("%d",&B[i][j]);  
  34.                                   }
  35.                        }
  36.             // reliza las operaciones
  37.             for(i=0;i<fila1;i++){
  38.                     for(j=0;j<columna2;j++){
  39.                             s=0;
  40.                             for(k=0;k<fila2;k++){
  41.                                 s=s+(A[i][k]*B[k][j]);  }
  42.                             Aux[i][j]=s;
  43.                            
  44.                                   }
  45.                        }
  46.             //Mostras la respuesta
  47.             printf ("\"La Matriz respuesta es\"\n");
  48.             for(i=0;i<fila1;i++){
  49.                     for(j=0;j<columna2;j++){
  50.                             printf("\t%d",Aux[i][j]);
  51.                                   }
  52.                     printf ("\n");
  53.                        }
  54.                    
  55.                 }
  56.     return 0;

PD el codigo anterior es mi intento mas tonte de como mandar arreglos

PD muchas gracias por su ayuda

Última edición por n_i; 06/02/2012 a las 09:24
  #2 (permalink)  
Antiguo 06/02/2012, 12:04
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 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
  #3 (permalink)  
Antiguo 06/02/2012, 23:33
Avatar de n_i
n_i
 
Fecha de Ingreso: febrero-2012
Ubicación: Lourdes, La Libertad, El Salvador, El Salvador
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Como enviar arreglos a funciones en C

Muchas Gracias por tu repuesta "cesar_casla" comprendí muy bien tu explicación . me funciono a la perfección
Saludos

Etiquetas: arreglos, funcion, funciones, matrices, matriz, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:10.