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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como retornar una matriz.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como retornar una matriz.  (Leído 3,472 veces)
SirLancelot53

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Como retornar una matriz.
« en: 24 Enero 2014, 00:32 am »

Si tengo una matriz que saco de un archivo y quiero retornarla ¿como lo hago? ya que el return quedaría dentro de los ciclos for terminando la función antes de tiempo. así:

Código
  1. char crear_mundo (char**M, int f, int c, istream& a, int i, int j)
  2. {
  3.   for (i = 0; i < f; i++)
  4.   {
  5.       for (j = 0; j < c; j++)
  6.       {
  7.            a>>M[i][j];
  8.       }
  9.   }
  10.   delete [] M;
  11. }
  12.  
  13. int main()
  14. {
  15.    int i,j,f,c;
  16.    ifstream a("archivo.txt");
  17.    a>>f;
  18.    a>>c;
  19.    char **M = new char* [f];
  20.    for (i = 0; i < f; i++)
  21.    {
  22.        M[i] = new char[c];
  23.    }
  24.    crear_mundo (M, f, c, a, i, j);
  25.    return 0;
  26. }

Porque si la retorno dentro del ciclo solo imprimiria el primer caracter del archivo, y lo que ocurre es que después debo modificar la matriz (cosa que no puedo hacer si está dentro del ciclo). Agradezco su ayuda y estoy atento a respuestas!!!!!!


En línea

SirLancelot53

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #1 en: 24 Enero 2014, 00:34 am »

Que pena, dentro de la función main() va:
cout << crear_mundo (M, f, c, a, i, j);


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Como retornar una matriz.
« Respuesta #2 en: 24 Enero 2014, 01:49 am »

No tienes que retornar nada, los cambios que se hagan en la función cambiarán la matriz del main. Compruebalo tú mismo.

Ojo, esto solo ocurre con los vectores y matrices. No intentes hacerlo con una variable o con un objeto.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
SirLancelot53

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #3 en: 24 Enero 2014, 02:19 am »

Pero cuando intento imprimir en pantalla la matriz dentro de la función main, me compila pero despues aparece error.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #4 en: 24 Enero 2014, 02:22 am »

Eso se debe a que la matriz la destruyes al final de la función "crear_mundo", a partir de ahí ya no puedes utilizar los datos leídos del archivo (no tiene sentido).

Siguiendo lo comentado por amchacon también debes eliminar los parámetros "i" y "j", en su lugar hay que declararlos como variables locales.

La función termina así:
Código
  1. char crear_mundo(char** M, int f, int c, istream& a)
  2. {
  3.   for (int i = 0; i != f; i++)
  4.      for (int j = 0; j != c; j++)
  5.         a >> M[i][j];
  6. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
SirLancelot53

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #5 en: 24 Enero 2014, 02:26 am »

Pero entonces ¿como podría imprimir la matriz o modificarla dentro de la función main? Porque intento hacerlo así:

cout << M;

En main() pero el programa corre y luego sale error aún destruyendo la función al final de main().
« Última modificación: 24 Enero 2014, 02:29 am por SirLancelot53 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #6 en: 24 Enero 2014, 03:33 am »

Pero entonces ¿como podría imprimir la matriz o modificarla dentro de la función main?
Honestamente no entiendo.

La matriz la modificas en la función "crear_mundo": en ella sobrescribes cada uno de sus elementos con un valor leído del stream "a", modificar la matriz en la función main no conlleva diferencia alguna y basta con utilizar dos bucles.

Y para imprimirla la operación es similar:
Código
  1. int main()
  2. {
  3.   ifstream a("archivo.txt");
  4.  
  5.   int f, c;
  6.   a >> f;
  7.   a >> c;
  8.  
  9.   char **M = new char* [f];
  10.   for (int i = 0; i < f; i++)
  11.      M[i] = new char[c];
  12.  
  13.   crear_mundo (M, f, c, a);
  14.  
  15.   // Imprimir la matriz
  16.   for (int i = 0; i != f; ++i){
  17.      for (int j = 0; j != c; ++j)
  18.         cout << " " << M[i][j];
  19.  
  20.      cout << endl;
  21.   }
  22.  
  23.   return 0;
  24. }
Por ultimo antes de que la función main termine se debe liberar la memoria utilizada por la matriz mediante el operador new.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
SirLancelot53

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Como retornar una matriz.
« Respuesta #7 en: 24 Enero 2014, 04:07 am »

Gracias, ahora ya entiendo pensé que no eran necesarios los ciclos; muchas gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines