Autor
|
Tema: Como retornar una matriz. (Leído 3,472 veces)
|
SirLancelot53
Desconectado
Mensajes: 10
|
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í: char crear_mundo (char**M, int f, int c, istream& a, int i, int j) { for (i = 0; i < f; i++) { for (j = 0; j < c; j++) { a>>M[i][j]; } } delete [] M; } int main() { int i,j,f,c; ifstream a("archivo.txt"); a>>f; a>>c; char **M = new char* [f]; for (i = 0; i < f; i++) { M[i] = new char[c]; } crear_mundo (M, f, c, a, i, j); return 0; }
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
Mensajes: 10
|
Que pena, dentro de la función main() va: cout << crear_mundo (M, f, c, a, i, j);
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
SirLancelot53
Desconectado
Mensajes: 10
|
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
Mensajes: 1.639
|
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í: char crear_mundo(char** M, int f, int c, istream& a) { for (int i = 0; i != f; i++) for (int j = 0; j != c; j++) a >> M[i][j]; }
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
Mensajes: 10
|
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
Mensajes: 1.639
|
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: int main() { ifstream a("archivo.txt"); int f, c; a >> f; a >> c; char **M = new char* [f]; for (int i = 0; i < f; i++) M[i] = new char[c]; crear_mundo (M, f, c, a); // Imprimir la matriz for (int i = 0; i != f; ++i){ for (int j = 0; j != c; ++j) cout << " " << M[i][j]; cout << endl; } return 0; }
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
Mensajes: 10
|
Gracias, ahora ya entiendo pensé que no eran necesarios los ciclos; muchas gracias.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda - Buscar si existe una matriz dentro de otra matriz
Programación Visual Basic
|
EddyW
|
2
|
6,022
|
14 Agosto 2010, 06:18 am
por EddyW
|
|
|
¿Como retornar a un paso anterior?
Programación C/C++
|
skatres
|
5
|
2,623
|
20 Noviembre 2011, 22:31 pm
por RyogiShiki
|
|
|
MATRIZ que imprima como una matriz en forma de cuadrado... ayudaaaaa!! help
Programación C/C++
|
oscarpy
|
3
|
8,814
|
9 Abril 2012, 16:23 pm
por Xandrete
|
|
|
como retornar un int como un string c++?
Programación C/C++
|
andrex.125
|
2
|
3,616
|
16 Mayo 2013, 20:26 pm
por andrex.125
|
|
|
¿Como es posible retornar estructuras con la convencion de llamadas cdecl?
Programación C/C++
|
Usuario887
|
4
|
3,759
|
7 Marzo 2021, 16:28 pm
por BloodSharp
|
|