Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Reto Delphi 2011

Hola a todos.

Ahora propongo este reto Delphi que me parece será más fácil de resolver que el anterior (esta vez no será necesario meternos con los registros de la CPU).

Tenemos una rutina de la cual sabemos que su última sentencia es una llamada a la función nativa GetMem:

Código Delphi [-]
Procedure T1.Proc1;
Begin
  ...
  GetMem (P, X);
End;

Como es de esperarse P es una variable puntero y X un entero que indica el tamaño del bloque de memoria que GetMem deberá reservar y asignar a la variable P.

T1 es una clase de la VCL de Delphi, cuyo código fuente podemos ver sin problemas. Proc1 es uno de los métodos públicos de T1. X es uno de sus campos privados (un miembro declarado en la sección Private de la clase), para el cual la clase no tiene propiedad o método alguno que nos permita conocer su valor.

En nuestra aplicación tenemos una instancia de clase T1 (variable Obj), y desde algún lugar realizamos esta llamada:

Código Delphi [-]
Begin
  Obj.Proc1;

Pero justo después de esa sentencia, necesitamos conocer el valor de X con el que Proc1 llamó a GetMem, es decir:

Código Delphi [-]
Begin
  Obj.Proc1;
  ShowMessage ('El valor de Obj.X es: ' + IntToStr (*));

La pregunta es: ¿Qué podemos colocar en lugar de ese asterisco para que el mensaje mostrado por ShowMessage diga la verdad, y qué código habría que escribir para lograrlo? Desde luego, sin modificar los fuentes de la VCL.

Recordemos que X es un campo privado de T1 y nuestro código de prueba (en mi caso hecho en Delphi 7), no forma parte de la misma unidad .pas que T1. Por lo tanto el compilador no admitirá un referencia explícita al campo Obj.X, ni siquiera derivando una clase de T1 (razón que me hace cuestionar de cuando en cuando la valía del nivel de visibilidad Private).

No vale el uso de moldes de acceso tipo:

Código Delphi [-]
T1Acceso = Class (MismoPadreQueT1)
  ...
  X :Integer;
End;

Estoy seguro que más de uno lo resolverá muy pronto. Cuando lo hagan, mencionen alguna pista si lo desean, pero por favor esperen un poco antes de publicar la solución completa. De esta forma la incógnita se mantendrá vigente por un tiempo considerable.

Un abrazo en privado.

Al González.
Responder Con Cita
  #2  
Antiguo 17-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Heap?

// Saludos
Responder Con Cita
  #3  
Antiguo 17-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¿Heap?

// Saludos
¿Eso fue una duda o una pista ?

Si me esperan unas dos semanas quizá me anime intentar superar el reto, pero para ese tiempo seguro que ya fue descubierto y publicada la solución.

Al, me dejaste sin opciones... mientras leía me decía fácil, le aplico un molde y se acabó; ya me dije que por algo es un reto.

Ummm... estoy pensando: ¿una sigla, 4 letras?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 17-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Delphius Ver Mensaje
¿Eso fue una duda o una pista ?
Ambas

Es pregunta, y si la respuesta es afirmativa entonces es una pista

// Saludos
Responder Con Cita
  #5  
Antiguo 17-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
¿Heap?
Cita:
Empezado por Delphius Ver Mensaje
¿Eso fue una duda o una pista ?
Cita:
Empezado por roman Ver Mensaje
Ambas
Yo creí que se trataba de un movimiento convulsivo del diafragma, que produce una respiración interrumpida y violenta y causa algún ruido, es decir, que te había dado hipo.

¡Si no estamos en La Taberna!
Responder Con Cita
  #6  
Antiguo 17-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No estoy muy seguro, pero creo que en lenguaje C sería más fácil
Responder Con Cita
  #7  
Antiguo 17-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Ambas

Es pregunta, y si la respuesta es afirmativa entonces es una pista

// Saludos
Ummm
Entonces no estamos pensando en las mismas 4 letras seguramente.

Ha seguir pensando, tengo dos semanas para pensar. Espero poder dormir esta vez.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 18-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No estoy muy seguro, pero creo que en lenguaje C sería más fácil
En mi barrio a eso le llamábamos ser un busca ruidos.
Responder Con Cita
  #9  
Antiguo 18-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Una pregunta: ¿P es una variable local al método Proc1, es una variable global, o es una propiedad de la clase? Y si es una propiedad, ¿es pública o privada?

Es que he tenido una idea...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #10  
Antiguo 18-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
En mi barrio a eso le llamábamos ser un busca ruidos.
No sé qué significa, pero a mí me gusta el silencio
Responder Con Cita
  #11  
Antiguo 18-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González Ver Mensaje
Yo creí que se trataba de un movimiento convulsivo del diafragma, que produce una respiración interrumpida y violenta y causa algún ruido, es decir, que te había dado hipo.

¡Si no estamos en La Taberna!
Dado el nulo interés que muestras, me reservo la respuesta.

// Saludos
Responder Con Cita
  #12  
Antiguo 18-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Talking

Cita:
Empezado por Ñuño Martínez Ver Mensaje
Una pregunta: ¿P es una variable local al método Proc1, es una variable global, o es una propiedad de la clase? Y si es una propiedad, ¿es pública o privada?

Es que he tenido una idea...
Yo tambien tengo las misma interrogantes y tambien creo que tengo tu misma idea
Pero mejor esperemos a que Alberto nos aclare mejor, ya sea para aplicar esa idea o para descartarla..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #13  
Antiguo 18-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Dado el nulo interés que muestras, me reservo la respuesta.
Amigo Román, confío en que no te haya molestado algo de lo que dije; en caso contrario te ofrezco una sincera disculpa. Sólo me pareció buena idea incluir algo de humor para amenizar el coloquio.

La pregunta que hiciste sólo tiene una respuesta: sí. La función GetMem sí tiene que ver con el montón, lo cual es algo conocido.


Cita:
Empezado por Ñuño Martínez Ver Mensaje
Una pregunta: ¿P es una variable local al método Proc1, es una variable global, o es una propiedad de la clase? Y si es una propiedad, ¿es pública o privada?
Es que he tenido una idea...
Cita:
Empezado por rgstuamigo Ver Mensaje
Yo tambien tengo las misma interrogantes y tambien creo que tengo tu misma idea
Ñuño, Roberto: Muy buenas preguntas. Creo que debí agregar que tampoco tenemos acceso a la variable P. Digamos que P es un campo privado de T1 y, para que descartemos por completo "ese" camino, P puede ser uno de muchos campos privados de T1, para los cuales no hay propiedad o método de acceso público.

No obstante, cuando esto quede resuelto, podríamos discutir qué tan viable sería aplicar la solución que tienen en mente si P fuera un elemento público. Claro, si es que ambos están pensando en lo mismo que yo.

Última edición por Al González fecha: 18-02-2011 a las 18:20:51.
Responder Con Cita
  #14  
Antiguo 18-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González Ver Mensaje
Amigo Román, confío en que no te haya molestado algo de lo que dije; en caso contrario te ofrezco una sincera disculpa. Sólo me pareció buena idea incluir algo de humor para amenizar el coloquio.

La pregunta que hiciste sólo tiene una respuesta: sí. La función GetMem sí tiene que ver con el montón, lo cual es algo conocido.
Bueno, he de decir que me molestó el hecho de participar en el reto que propones y no recibir un feedback al respecto. GetMem no sólo tiene que ver con el Heap sino que te puedo dar una respuesta al reto usando funciones del Heap aunque no estoy 100% seguro de que funcione siempre y por ello lo puse como pregunta.

// Saludos
Responder Con Cita
  #15  
Antiguo 18-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Al.

Creo que esta es una forma, vos diras si estoy en lo cierto...

Archivo Adjunto 1889

Te envío la contraseña por pm.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-04-2011 a las 09:06:30.
Responder Con Cita
  #16  
Antiguo 18-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Me parece ingenioso lo que has intentado, ecfisa. Quizá algo así es lo que tiene en mente Román, pero le veo dos pegas o inconvenientes, como decimos en México.

Una es que teóricamente serviría si T1.Proc1 no tuviera más sentencias que reservaran bloques de memoria. ¿Qué tal si crea en su interior nuevas instancias de objetos, o si llama a otras rutinas que también ejecutan el procedimiento GetMem? La operación matemática que haces no sería válida.

El otro inconveniente es que las funciones que reservan memoria suelen hacer alineación. Por ejemplo, si X tiene un valor de 847777, el resultado con la solución que propones aparece en mi pantalla como 847780.

Román, espero dejemos atrás el mal entendido y no desistas de participar. Un abrazo.

Al.
Responder Con Cita
  #17  
Antiguo 18-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Habra que seguir buscando por otro lado...


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 19-02-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Muy interesante... muy interesante! Ni siquiera me atrevo a decir que haré intento alguno. No soy muy bueno en las partes de más bajo nivel de Delphi.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #19  
Antiguo 21-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pues vaya, me has chafado. A ver qué hago y ahora.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #20  
Antiguo 21-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Esto no tiene mucha ciencia, creo que en cualquier momento alguien nos sorprenderá con la solución. Pero está bien, les daré una segunda pista sólo porque estamos a la mitad del camino.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dudas sobre Delphi 2011 cmm07 Varios 9 15-01-2011 14:48:06
Lazarus Vs. Delphi 2011 (2012? 2014?) gatosoft Debates 33 14-08-2010 21:12:05
Delphi 2011 (Fulcrum) heroe Noticias 11 15-07-2010 10:00:21
delphi 2011 JXJ Noticias 13 03-04-2010 00:42:34


La franja horaria es GMT +2. Ahora son las 13:47:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi