elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda acerca de como pasar por referencia matrices dinamicas?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda acerca de como pasar por referencia matrices dinamicas?  (Leído 5,398 veces)
xuhipoint

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Duda acerca de como pasar por referencia matrices dinamicas?
« 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.


En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #1 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..



En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #2 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
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #3 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! ..... !!!!



« Última modificación: 8 Mayo 2014, 14:27 pm por leosansan » En línea

xuhipoint

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #4 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. }
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #5 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. }
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
xuhipoint

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Duda acerca de como pasar por referencia matrices dinamicas?
« Respuesta #6 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda matrices dinámicas multidimencionales
Programación Visual Basic
:matux: 1 1,899 Último mensaje 20 Agosto 2007, 14:03 pm
por :matux:
¿Cómo puedo pasar dos enteros por referencia?
Java
theluigy13etv 2 2,993 Último mensaje 16 Abril 2012, 20:04 pm
por theluigy13etv
Matrices dinámicas en C
Programación C/C++
thekill01 3 4,821 Último mensaje 22 Mayo 2012, 02:06 am
por icoheed
Pasar matriz char a una función como referencia
Programación C/C++
KISKE 2 7,723 Último mensaje 18 Junio 2013, 13:07 pm
por KISKE
[Duda] Pasar struct por referencia
Programación C/C++
jaxoR 9 5,937 Último mensaje 27 Agosto 2014, 02:50 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines