Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: xuhipoint en 3 Mayo 2014, 20:32 pm



Título: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: xuhipoint en 3 Mayo 2014, 20:32 pm
Código
  1. #include <iostream>
  2. using namespace std;
  3. void llenar_matriz(int fil, char  &matriz[][col]){
  4. int i,j ;
  5. for (int i = 0; i < fil; i++){
  6.    for (int j = 0; j < col; j++){
  7.  
  8.        cin >> matriz[i][j];
  9.  
  10. }
  11. }
  12. }
  13.  
  14. void Mostrar_matriz(int fil, char &matriz[][col] ){
  15. int i,j;
  16. for (i = 0; i < fil; i++)
  17.    {
  18.        for ( j = 0; j < col; j++){
  19.           cout << matriz[i][j] << " ";
  20.        cout << endl;
  21.    }
  22. }
  23.  
  24. }
  25.  
  26.  
  27.  
  28. int main()
  29. {
  30.  
  31.   int fil, col ;
  32. cout << "Dimensiones del tablero: ";
  33. cin >> fil >> col;
  34. char  matriz[fil][col];
  35.  
  36. }

Hola espero que estén bien, esta es mi idea de como pasar una matriz por referencia en una acción pero no entiendo porque no funciona, esto es lo que he entendido viendo videos y documentos, seria de gran ayuda que me dijeran en que me equivoco, ya que no puedo usar punteros esta fue mi idea. Gracias de antemano por sus respuestas.


Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: Blaster en 3 Mayo 2014, 21:19 pm
como pasar una matriz por referencia en una acción pero no entiendo porque no funciona

Debes tener encuenta que cuando se pasa uan matriz a una función, esta siempre se pasa por referencia ya que su nombre hace referencia al primer elemento de la misma, es innecesario utilizar el operador (&) por lo que te he comentado anteriormente. El numero de columnas la debes indicar explicitamente para que el compilador conozca la dimensión de la matriz..



Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: mr.blood en 5 Mayo 2014, 23:37 pm
Aparte de lo que ya te han dicho, col y fil están declaradas dentro del ambito de  main, no de forma global. Aun así, te recomiendo que trabajes más con punteros y memoria dinámica, porque tal y como lo planteas te dará dolores de cabeza.

Sa1uDoS


Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: leosansan en 8 Mayo 2014, 05:57 am
Sin punteros ni asignación dinámica de memoria, una forma sería pre dimensionar la matriz para que la función tenga el tamaño de la misma, con el desperdicio de memoria que eso supone:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #define FIL   10
  6. #define COL   11
  7.  
  8.  
  9. void llenar_matriz(int fil, int col,char matriz[][COL]){
  10.  int i,j;
  11.  for ( i = 0; i < fil; i++)
  12.    for ( j = 0; j < col; j++){
  13.       cout << endl << "matriz[" <<i<< "][" << j << "]=";
  14.       cin>>matriz[i][j];
  15.   }
  16. }
  17.  
  18. void Mostrar_matriz(int fil, int col,char matriz[][COL] ){
  19.  int i,j;
  20.  for (i = 0; i < fil; i++){
  21.    for ( j = 0; j < col; j++)
  22.      cout << matriz[i][j]<<"  " ;
  23.    cout << endl;
  24.  }
  25. }
  26.  
  27. int main(){
  28.  int fil,col;
  29.  char  matriz[FIL][COL];
  30.  cout << "Dimensiones del tablero : "<< endl;
  31.  cout << endl<< "Filas del tablero(menor 11): ";
  32.  cin >> fil ;
  33.  cout << endl<< "Columnas del tablero(menor 11): "<< endl;
  34.  cin >>  col;
  35.  llenar_matriz(fil,col,matriz);
  36.  cout << endl;
  37.  Mostrar_matriz(fil,col,matriz);
  38.  return 0;
  39. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: xuhipoint en 10 Mayo 2014, 22:24 pm
Gracias a todos por sus respuestas, al final lo que hice fue esto:
Es muy parecida a la tuya leosansan pero fue la unica idea que se me ocurrio para no utlizar punteros.

Código
  1. #include <iostream>
  2. using namespace std;
  3. int M[20][20];
  4. void llenar(int fil,int col,int M[][20]){
  5. int i,j;
  6. for(i=0;i<fil;i++){
  7. for(j=0;j<col;j++){
  8. cout<<"["<<i<<"]"<<"["<<j<<"]"<<endl;
  9. cin>>M[i][j];
  10. }
  11. }
  12. cout<<endl;
  13. }
  14. void mostrar(int fil, int col, int M[][20]){
  15. int i,j;
  16. for(i=0;i<fil;i++){
  17. for(j=0;j<col;j++)
  18. cout<<M[i][j]<<" ";
  19. cout<<endl;
  20. }
  21. }
  22.  
  23. int main(){
  24. int fil,col;
  25. cout<<"Ingrese fila y columna"<<endl;
  26. cin>>fil>>col;
  27. llenar(fil,col,M);
  28. mostrar(fil,col,M);
  29. }


Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: MeCraniDOS en 11 Mayo 2014, 22:51 pm
Gracias a todos por sus respuestas, al final lo que hice fue esto:
Es muy parecida a la tuya leosansan pero fue la unica idea que se me ocurrio para no utlizar punteros.

Estas usando punteros de todas formas.

Esto
Código
  1. void Funcion(int Matriz[])

Es equivalente a esto
Código
  1. void Funcion(int *Matriz)

Al pasar una matriz a una funcion lo unico que haces es mandarle un puntero con la posicion de memoria donde empieza la matriz, por eso todo lo que modifiques en la matriz de la funcion, lo estas modificando en la matriz declarada en el main.

Código
  1. void Funcion(int *Matriz);
  2.  
  3. int main()
  4. {
  5.      int Matriz[5]={0}; //Inicializas todo a cero
  6.  
  7.      Funcion(Matriz);
  8.  
  9.      //Aqui Matriz[0] ya vale 1
  10.  
  11.      return 0;
  12. }
  13.  
  14. void Funcion(int *Matriz)
  15. {
  16.      Matriz[0] = 1;
  17. }


Título: Re: Duda acerca de como pasar por referencia matrices dinamicas?
Publicado por: xuhipoint en 11 Mayo 2014, 22:59 pm
Si al final es lo mismo, lo que pasa es que en mi universidad no quieren que use puntero porque todavía no me lo han dado por eso al final hice eso.