Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eferion

#1091
Es simple...

Código (cpp) [Seleccionar]
void something(char *text){
    cout << *text;
}


*text es de tipo char... luego cout solo te imprime un carácter.

Código (cpp) [Seleccionar]
void something(char **text){
    cout << *text;
}


*text es de tipo puntero a char... o cadena de caracteres... en este caso vuelca caracteres hasta que se encuentra con el primer nulo.

Código (cpp) [Seleccionar]
void something(char *text){
    cout << text;
}


Esta última versión es similar a la anterior sin punteros dobles... y por tanto más usable y manejable.
#1092
cuando tu haces


#include <stdio.h>

int funcion2()
{
    return 5;
}

int funcion1()
{
   return funcion2();
}

int main(void)
{
    printf("%d \n",funcion1() );

   getchar();
   return 0;
}


Lo que estás haciendo, realmente, es lo siguiente:

* Has creado una función "funcion2", que lo único que hace es devolver el resultado que a su vez le proporciona otra funcion "funcion1".

* Dado que funcion1 siempre va a devolver un 5, funcion2 va a devolver ese mismo 5.

* El printf del main va a sacar por pantalla el valor devuelto por funcion2... es decir, un 5.

Cuando tu haces lo siguiente:


int funcion2( )
{
  return funcion1( );
}


No estás devolviendo una función... sino el resultado de esa función.

De hecho, lo que has puesto es equivalente a:


int funcion2( )
{
  int resultado = funcion1( );
  return resultado;
}


Es decir, tu no devuelves funciones. Más bien estás llamando a una función determinada ( funcion1 ) y estás almacenando el resultado que te devuelve.
#1093
ASM / Re: Comandos puertos I/O
23 Julio 2013, 09:11 AM
Cita de: cpu2 en 22 Julio 2013, 21:16 PM
Ya e leido el datasheet de mi tarjeta, una imagen del chip con los pins enumerados, y al lado su simbolo, despues hay tablas con los pins su simbolo y la descripcion.

Y no dice nada de las operaciones de lectura / escritura sobre la tarjeta ??

si no es así ya te digo yo que el datasheet que tienes o no está completo o tiene que haber otro por con esa parte de la documentación.

Es como si el datasheet de una USART no te dijese cual es la forma de enviar y/o recibir información.
#1094
El formato de las ventanas no depende del lenguaje utilizado.

Cada framework de ventanas tiene un diseño propio. Algunos frameworks hacen uso de los estilos que vienen predefinidos por el sistema operativo, lo que permite que todas las aplicaciones tiendan a verse iguales en un mismo sistema operativo... algunos frameworks son ( todos ellos gratuitos ): Qt, wxwidgets, api de windows, gtk

Para hacer juegos deberías usar algún lenguaje de bajo nivel, tipo c, c++, en líneas generales son los más empleados... por algo será. También tendrás que hacer uso de alguna capa gráfica... opengl, directx, allegro, ... pero ese tema daría para crear otro hilo.

#1095
Sabes cómo funcionan los árboles binarios?

Si la respuesta es sí, sabes que cada nodo tiene un valor... los nodos de la izquierda tienen un valor inferior y los de la derecha un valor mayor.

Con esta idea fácilmente puedes adivinar que, tomando como referencia los 3 últimos nodos de la izquierda, puedes tener 3 escenarios diferentes:

     A                 A                 A
    /                  / \                  \
   B                 B  C                 C

En el 1er caso, tenemos que el nodo A tiene un valor X y, por fuerza, el nodo B tiene un valor necesariamente menor, luego en este caso el valor buscado sería A.

En el 2º caso, A tiene un valor X, B es menor y C es el mayor de los 3... el valor buscado es el del nodo A.

En el 3er caso, A tiene un valor inferior al B... el valor buscado es el del nodo B.

Con esta información, una opción sería diseñar un algoritmo que recorra la rama izquierda de cada nodo, empezando por el raiz. Una vez localizado el último grupo de nodos... mirar a ver si es del tipo 1, 2 o 3 y devolver el resultado correspondiente.

Otra opción podría ser recorrer todo el árbol y almacenar los dos números más pequeños que te encuentres... con eso tendrías el número más pequeño y, el buscado, el segundo más pequeño.

Para el caso del segundo mayor la lógica a implementar sería similar. Ya es gusto del programador ( es decir, tu decisión ), elegir la opción que crea más adecuada.

Un saludo.
#1096
dynamic_cast hace chequeos que verifican que, efectivamente, se puede hacer el cast a la clase destino. Esto solo es posible cuando la instancia apuntada es de la clase destino o de alguna clase hija... en caso contrario, el cast retornará un puntero nulo.

static_cast símplemente comprueba que el cast (a pelo) es válido. Es un chequeo muucho más sencillo que el dinámico y, por ello, más propenso a errores... por ejemplo que te deje hacer lo que estabas comentando.

Está claro que si tu tienes una superclase A... creas una instancia de esta clase y luego intentas hacer un cast a su subclase B... los miembros de esta subclase no pueden estar bien. En primer lugar porque en c++, a diferencia de en java, los miembros no se inicializan por defecto.

El constructor de A sólo sabe inicializar la parte que es propia de A... pero no sabe nada de la parte de B... luego esa parte siempre va a quedar con valores aleatorios.

Tu piensa que en el fondo, una clase no deja de ser x bytes en memoria y una serie de funciones que hacen uso de posiciones específicas de esa memoria... el concepto de clase solo tiene sentido para tí... la máquina no entiende de eso.
#1097
Para poder hacer un cast a una subclase y que el cast sea correcto, la instancia afectada tiene que ser, necesariamente, de la subclase.

Me explico:

Código (cpp) [Seleccionar]

Class A
{ };

Class B : public A
{ };

int main ( ... )
{
  A* puntero1 = new A( );
  A* puntero2 = new B( );

  // este caso retornará 0 porque puntero1 no es de la subclase B
  B* clase_b1 = dynamic_cast< B* >( puntero1 );

  // este caso retornará un puntero válido
  B* clase_b2 = dynamic_cast< B* >( puntero2 );
}


Luego, dado que para que el cast funcione correctamente, la instancia original ha de ser de la subclase ( o de una subclase de la subclase ), necesariamente has tenido que crear una instancia de la subclase y, al hacer esa creación, se han tenido que inicializar necesariamente todos los miembros de la clase.

Si esto no es así es porque se te ha olvidado inicializar algo en el constructor.
#1098
Cita de: Mister12 en 20 Julio 2013, 04:43 AM
Gracias por tu respuesta alguien a oído hablar de Just for $5 (solo por $5) es una forma de ganar dinero por internet aunque no necesariamente todo se hace por internet hace algunos dias me hablaron de esto y me parecio interesante se lo propuse a barias persona pero eran demasiado desconfiadas o no entendieron y ni respuesta me dieron
Just for $5  se trata de armar una red como de telaraña si no estoy mal hay 8 niveles cuando ingresa al primer nivel pagas $5 pero tienes que invitar a cinco personas mas y esas 5 personas te tienen que pagar $5 cada una y cada una de esas 5 personas también tienen que invitar a 5 personas que cada una tambien les ba a pagar $5 cada una y haci sucesivamente para subir al segundo nivel hay que pagar si no estoy mal $10 cuando ya subes al segundo nivel los que estan abajo de ti y quieren subir al segundo nivel te pagan $10 cada uno y ya tienes dinero para subir al tercer nivel donde ya se paga un poquito mas pero recibes mas y haci sucesivamente

Quisiera sus puntos de vista de esta idea no tengo la información detallada pero si alguien quiere saber mas le paso la información detallada 

Este es el típico timo piramidal...
#1099
En el momento en el que quieras poner barcos de forma aleatoria (simulando un jugador de IA), por ejemplo, necesitarás tirar de vb.

En el momento en el que quieras que tu IA tome decisiones sobre la siguiente casilla a bombardear necesitarás vb.

...

Al final tendrás que usar vb para poder llevar tu juego a buen término.

No olvides que con las fórmulas de Excel no puedes tener referencias circulares... y dado que al final elegir una casilla u otra dependerá del estado del resto de celdas... te resulta en una referencia circular tras otra.
#1100
CitarAdditional features for Qt Enterprise
- Scenegraph Analyzer: To optimize painting step time for each frame
- Pixmap Cache: To identify bad performance due to image loading

CitarAdditional features for Qt Enterprise
Qt Quick2 Application project wizard for creating projects that can contain both QML and C++ code
Keyword highlighting for QML files in the Visual Studio code editor
Preview of Qt Quick 2 applications directly from Visual Studio (QMLviewer launcher)

CitarAdditional Features for Qt Enterprise
Dynamic Property Editor: Edit properties inside the Qt Quick Designer using drop-down menus
Connection Editor: Create connections on the fly
Binding Editor: Define and edit bindings inside property management
PathView Editor: Dedicated Spline editor to create and modify a PathView
In-place modification: Quick access to color, gradient editors as well as in-built label editing

En este caso se refieren a mejoras en el IDE de la versión de pago ... lo cierto es que aún no he dado el salto completo a Qt5, por lo que no puedo asegurar que pase lo mismo con las librerías, pero cuando Qt era de Nokia estas cosas no pasaban.