|
|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - player_
1
« en: Miércoles 24 de Noviembre de 2010, 22:35 »
Buena solución.
2
« en: Martes 19 de Octubre de 2010, 22:55 »
Muchas gracias a los 2, ya entiendo lo que pasa. Ya veo que lo de mi ejemplo ha sido simple casualidad y eso me ha hecho hacerme un lío.
Saludos.
3
« en: Martes 19 de Octubre de 2010, 18:09 »
Es que a mí siempre me han dicho que cuando una variable sale de su ámbito, se destruye y desaparece.
Entonces, esto no es el todo así? Si una variable sale de su ámbito, se queda en la pila y se le puede apuntar con un puntero hasta que la pila se vacíe por algún motivo?
Agradecería una breve explicación sobre esto para aclararme las ideas.
Gracias.
4
« en: Martes 19 de Octubre de 2010, 14:50 »
Hola, tengo este pequeño fragmento de código: #include <iostream> using namespace std; void funcion(int* &p) { int local = 3; p = &local; } int main() { int numero; int *n = № numero = 2; funcion(n); cout << *n << endl; cout << numero << endl; system("PAUSE"); return 0; }
Como podéis ver, creo un puntero en el main que apunta a una variable número y lo paso por referencia a la función. Una vez dentro de la función, creo una variable local y hago que apunte a esa variable local. Una vez que salgo de la función, la variable local (en teoría) se debería destruir, pero cuando imprimo el contenido del puntero nuevamente en el main, me da el valor que tenía la variable local dentro de la función. Por qué el puntero me da el valor de la variable local de la función si se supone que se ha destruido al salir de la función y ya no existe? Gracias.
5
« en: Jueves 7 de Octubre de 2010, 00:37 »
Ok, entonces si he entendido bien, en mi ejemplo, la segunda opción sería la válida: void MiClase::GetX(const MiClase *this) const { }
y en el otro método: void MiClase::SetX(MiClase *this, int x) { }
Gracias.
6
« en: Miércoles 6 de Octubre de 2010, 23:10 »
Hola, me gustaría plantear algunas dudas acerca de lo que hace internamente el puntero this en el compilador con C++.
Por ejemplo tengo una clase cualquiera:
class MiClase { private: int x;
public: void GetX() const; void SetX(int x); };
Imaginemos que yo creo un objeto de la clase MiClase llamado objeto.
Ahora en el main invoco al metodo GetX ----> objeto.GetX();
Pues bien, al ser el método:
void MiClase::GetX() const {
}
el compilador internamente trata el puntero this de esta forma?
const MiClase *const this ó de esta otra? const MiClase *this
Creo que será de la primera forma no? Porque el puntero this siempre es constante (al hacer *const this indica que es un puntero constante que no puede cambiar de valor) y const MiClase indica que el objeto que invoca al método es de tipo MiClase y sus valores no son modificables.
Ahora al invocar al método SetX(int x) -----> objeto.SetX(5);
void MiClase::SetX(int x) {
}
el compilador internamente trata al puntero this así?
MiClase *const this;
o así?
MiClase *this;
De nuevo pienso que será de la primera manera no? Porque volvemos a indicar que *const this es un puntero constante (no cambia de valor) y en este caso el valor del objeto que invoca al método sí se puede modificar.
A ver si estoy en lo cierto, sino os agradecería que me lo explicarais para tenerlo bien claro.
Gracias.
7
« en: Miércoles 22 de Septiembre de 2010, 22:06 »
Y para pasar como parámetro de una función un vector creado con stl, es correcto así, pasándolo por referencia? void ImprimirVector(vector<int> &v) { //Código } int main() { vector<int> v; //Llenamos el vector ImprimirVector(v); }
Gracias.
8
« en: Sábado 18 de Septiembre de 2010, 23:25 »
Muchas gracias por la explicación, ha quedado todo muy claro. Añado otra pregunta que me ha venido a la mente, teniendo en cuenta que lo hago para C++: En el caso 2 devuelve el valor de la variable local num que se pasa como parámetro por valor. Si la función fuera así: int &ObtenerDireccionEntero2(int &num) { return num; } int main() { int numero = 10; cout << ObtenerDireccionEntero2(numero) << endl; return 0; }
Devolvería el valor de la variable numero que se pasa por referencia, ya que la variable "num" ya no actúa como local en la función porque se está pasando por referencia, cierto? Gracias.
9
« en: Sábado 18 de Septiembre de 2010, 12:07 »
Hola, es la primera vez que veo esto y me ha surgido la duda.
Por ejemplo, una función así:
int *ObtenerDireccionEntero(int num)
devolvería la dirección de memoria del entero que se pasa como parámetro, pero la función:
int &ObtenerDireccionEntero(int num)
qué devolvería?
Gracias.
10
« en: Jueves 16 de Septiembre de 2010, 22:35 »
Gracias por contestar. Poniendo lo de build-essential se ha solucionado.
Saludos.
11
« en: Jueves 16 de Septiembre de 2010, 18:56 »
Hola, podéis indicarme dónde conseguir la librería STL para C++?
Estoy usando ubuntu y como compilador el geany (parece que no la trae por defecto porque he hecho una prueba y no funciona).
Gracias.
12
« en: Jueves 2 de Septiembre de 2010, 13:44 »
Creo que no hay otra solución, pero me piden que sea así y así parece que no va a poder ser.
Gracias.
13
« en: Jueves 2 de Septiembre de 2010, 08:45 »
Hola, me piden que haga algo un poco extraño, a ver si me podéis guiar un poco.
Tengo un fichero .h con una clase y sus métodos.
Luego tengo un fichero .cpp con varios prototipos de funciones y el desarrollo de esas funciones.
Desde el .h, dentro de los métodos de la clase, tengo que hacer llamadas a esas funciones desarrolladas en el .cpp, entonces, como no están incluidas, el compilador me manda mensajes de error como que esas funciones no se han declarado.
Qué puedo hacer?
Gracias.
14
« en: Domingo 29 de Agosto de 2010, 21:55 »
Gracias, lo tendré en cuenta.
15
« en: Viernes 27 de Agosto de 2010, 01:12 »
Hola, tengo un fichero de texto con un laberinto de este estilo que lo cargo en una matriz:
##############E######## #### # ## # #### # # # ######## ########### #####S#########
Una vez cargado, quiero comprobar si existe un camino válido, es decir, que puedo llegar desde E(entrada) hasta S (salida) sin problemas. En este caso debería indicarme que sí, pero por ejemplo, en este otro:
##############E######## #### # ## # #### ### ## # # ########## ########### #####S#########
Debería decirme que no porque hay una '#' bloqueando la entrada, tampoco podría si bloquea la salida o hay símbolos '#' que cortan el paso entre la entrada y la salida en cualquier punto de la matriz.
La entrada y salida pueden estar en cualquiera de los bordes del rectangulo, asi que cada vez habra que buscar un camino distinto según la situación.
Tenéis algún ejemplo o link para hacer esto con algún algoritmo de búsqueda en amplitud o algo parecido?
Lo necesitaría en C o C++.
Gracias.
16
« en: Lunes 23 de Agosto de 2010, 22:10 »
Gracias por la respuesta, ya lo tengo claro.
Un saludo.
17
« en: Lunes 23 de Agosto de 2010, 16:30 »
Igual no me he explicado del todo bien, voy a explicar el problema que tengo paso a paso a ver si así queda más claro:
Tengo una clase con un doble puntero "mat" en la parte privada para crear una matriz de forma dinámica y un método CrearMatriz en la parte pública donde voy a reservar memoria para esta matriz y si hay memoria suficiente, la relleno de datos.
Llamo al método CrearMatriz, primero indico el número de filas y de columnas que quiero, reservo la memoria de forma dinámica y si hay memoria suficiente, la relleno.
Después, vuelvo a llamar al método CrearMatriz, indico el número de filas y columnas que quiero y mediante un doble puntero auxiliar "matAux" reservo la memoria de forma dinámica, si hay suficiente memoria, lo que hago es liberar la memoria que había reservado anteriormente con "mat" y acto seguido hago que "mat" apunte a la misma dirección de memoria que "matAux", y si NO hay memoria suficiente, al haber usado un puntero auxiliar, mi matriz creada anteriormente con "mat" sigue intacta.
Pues bien, aquí vienen las dudas que tengo:
Si en la segunda vez que llamo al método CrearMatriz, hago mat = matAux, estoy indicando bien que "mat" apunte a "matAux"?
Y después de haber hecho mat = matAux, si ahora quiero que solo "mat" apunte a esa dirección de memoria y "matAux" ya no lo haga, que debo hacer, libero la memoria que había reservado con matAux (con delete o free)? (así creo que me estaría cargando la matriz)
O por el contrario, ya no libero ninguna memoria porque cuando salga del método CrearMatriz la variable "matAux" se destruye automáticamente al estar fuera del ámbito en el que fue declarada?
Esas eran mis preguntas concretas. Gracias.
18
« en: Lunes 23 de Agosto de 2010, 14:23 »
Hola. Tengo dudas de si lo que hago es correcto. #include <stdio.h> #include <stdlib.h> int main() { char **mat, **matAux; int i, j; //Reservo memoria para una matriz 5x5 mat = (char**) malloc(sizeof(char*) * 5); //Creamos la matriz dinamica if(mat != NULL) { for(i=0 ; i < 5; i++) { mat [i ] = (char*) malloc(sizeof(char) * 5); } } //La relleno de letras a for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) { mat[i][j] = 'a'; } } //Imprimo su contenido for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) { } } //Reservo memoria para una matriz 10x10 en una matriz auxiliar matAux = (char**) malloc(sizeof(char*) * 10); if(matAux != NULL) { for(i=0 ; i < 10; i++) { matAux [i ] = (char*) malloc(sizeof(char) * 10); } } //Libero la memoria de la 5x5 for(i=0 ; i < 5 ; i++) { } //Hago que mat apunte a la matriz 10x10 mat = matAux; //Libero la memoria de matAux for(i=0 ; i < 10 ; i++) { } //Relleno la matriz de letras b for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { mat[i][j] = 'b'; } } //La imprimo por pantalla for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { } } return 0; }
Lo que quiero hacer es crear una matriz dinamica "mat", crear una matriz auxiliar "matAux", liberar la memoria de "mat" creada anteriormente, hacer que "mat" apunte al mismo contenido que "matAux" y liberar la memoria liberada por "matAux". Es correcto lo que he hecho? Es correcta la manera de hacer que "mat" apunte al mismo contenido que "matAux" haciendo mat = matAux;? He puesto un ejemplo simplificado de un problema real que tengo, tengo una matriz "mat", más adelante cargo una nueva matriz dinamica "matAux", libero la memoria de "mat" y hago que apunte a "matAux" y finalmente libero la memoria de "matAux". Si hago esto una vez, funciona bien, pero si vuelvo a hacer lo mismo, me da un error de ejecución, y realmente no sé si lo que estoy haciendo lo estoy haciendo bien. Gracias.
19
« en: Lunes 3 de Mayo de 2010, 08:57 »
Y cómo copio el contenido del listview al reporte?
Gracias.
20
« en: Domingo 2 de Mayo de 2010, 23:51 »
Hola a todos. Necesito imprimir el contenido de un ListView, tenéis algún ejemplo o podríais explicarme cómo?
Gracias.
21
« en: Lunes 22 de Febrero de 2010, 23:51 »
Ya me imaginaba que no se podría, necesitaba hacer unos cálculos bastante precisos pero más o menos lo tengo solucionado.
Para no abrir otro tema aprovecho este para realizar otra pregunta, hay alguna función en c++ para indicar si un fichero existe? El usuario introduce el nombre del fichero y se comprueba si existe en el mismo directorio. Hasta ahora lo único que he conseguido es abrirlo en modo lectura y si existe, cierro el fichero y lo vuelvo a abrir en modo de escritura, ya que si lo abro directamente en modo escritura, aunque el fichero no exista, me dice que existe (lo crea) y escribe en él. Gracias.
22
« en: Lunes 22 de Febrero de 2010, 09:07 »
Hay alguna forma de que haciendo cálculos con valores double, el valor se almacene en una variable con los dígitos exactos del cálculo y no con el redondeo automático que hace?
Gracias.
23
« en: Lunes 25 de Enero de 2010, 21:35 »
Como he dicho antes, lo de que no se hacen tareas es una estupidez, porque mucha gente pone 2 líneas de código y otro le contesta con 30 líneas habiéndole hecho el programa, eso no es hacer la tarea? Parece que unas veces sí y otras no. De todas formas, debería permitirse hacer tareas, el que sale perdiendo es a quien se lo hacen, porque a parte del trabajo que tenga que presentar, luego tendrá que examinarse no? Y ahí nadie le va a ayudar y suspenderá porque no sabe NADA.
Estamos hablando de hacer pequeños algoritmos absurdos que pide la gente, no aplicaciones enteras para comercializarlas, se radicaliza todo mucho por aquí.
24
« en: Lunes 25 de Enero de 2010, 19:19 »
de esto depende que pase la materia si no me van a dar vancaciones 6 meses y no quiero.  Pues entonces comienza a hacerlo, porque aqui no se hacen tareas.
Como cansáis ya con lo de "aquí no se hacen tareas". Quien quiera hacerle la tarea que se la haga, peor para él si se lo dan hecho porque no va a aprender nada. Ni que esto fuera el colegio para ver quién hace la tarea de quién. Luego viene alguien y pone 4 líneas de código sin sentido, se lo modifican y le hacen el resto del programa y...eso no es hacer la tarea? Sin comentarios.
25
« en: Martes 8 de Diciembre de 2009, 23:49 »
Y por qué el getchar() del primer código no lo sustituyes por un while(getchar() != 'n');?
|
|
|