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 - avesudra

#311
Lo más seguro es que se te haya olvidado inicializar la memoria:
static CvMemStorage* memoria = 0;
Que conste que no entiendo de OpenCV pero es lo más lógico siendo una violación de segmento.Para inicializarla creo que debes hacer esto:
memoria = cvCreateMemStorage(0);
¡Un saludo!
#312
Me alegro de que lo entiendas, para hacer un hueco debes hacer un layout entre dos layouts y ponerle este "widget"(QSpacerItem) http://qt-project.org/doc/qt-4.8/qspaceritem.html .Es un espacio, que puede ser vertical o horizontal y del tamaño que quieras.Si no le pones nada será un layout vacío tamaño 0 supongo...

¡Un saludo!
#313
Sí es exactamente como dices, en ese programa está ordenado así:

En los layouts horizontales, los widget se van añadiendo uno al lado del otro, y en los verticales en una pila, por eso sale como sale. Fíjate que el layout principal es un layout vertical no horizontal. Es sencillo de entender.

¡Un saludo!
#314
Ufff , hay una forma más sencilla de hacerlo, cada letra en la tabla ASCII tiene un valor, la ñ es un carácter extendido por lo que tendrás que hacer otra cosa para añadirla, bueno si te fijas en esta tabla:

Las letras mayúsculas van desde el rango 65 hasta el 90, sin la ñ. Para que la A te quede como 1 pues haces 65 - 64 , y tienes la posición desde las letras A hasta la N , para los rangos desde la O hasta la Z puedes restar el valor de la letra menos 63 dado que en la tabla ASCII no cuentan la Ñ. En este código compruebo las letras y el valor que no sea pues siempre da 15 dado que sería la Ñ.
Código (cpp) [Seleccionar]
#include <iostream>
#include <locale>

using namespace std;

int main ( int argc , char *argv[])
{
    char letra = 0;

    cout << "Introduzca la letra: ";

    cin.get(letra);

    letra = toupper(letra);

    if((letra >= 'A') && (letra <= 'N'))
        cout << "La posicion de tu letra en el alfabeto es " << ((unsigned int)letra)-64 << endl;
    else if ((letra >= 'O') && (letra <= 'Z'))
        cout << "La posicion de tu letra en el alfabeto es " << ((unsigned int)letra)-63 << endl;
    switch (letra)
    {
    case ' ':
        cout << -1;
        break;
    default:
        cout << "La posicion de tu letra en el alfabeto es " << 15 << endl;
    }
    return 0;
}

Es que trabajar con la ñ es muy jodido quizás alguien de por aquí si sepa más que yo porque me parece que varía según el S.O.

¡Saludos!
#315
Es que con el operador "->" lo que haces es acceder a un miembro ( variable ) de un puntero, y con el "." simplemente al miembro cuando no hay punteros de por medio... De ahí que cuando desreferencias con el "*" debas usar el "." . La diferencia de usar memoria dinámica ( calloc, malloc, realloc ... ) y memoria estática ( declaraciones de arrays etc ) la puedes leer aquí:

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_din%C3%A1mico_de_memoria

¡Saludos!
#316
¡Felicidades! Es un orgullo que haya personas así, te mereces lo que has ganado.

¡Saludos!
#317
---------------------------------------------------------------------------------------------------------------------------------------
El problema es que si desreferencias el puntero a la estructura te quedas con el valor del primer elemento de la estructura(supongo que puede ser el número de clientes o no sé, por eso no puedes acceder a nada, la primera dirección de memoria de una estructura creo que normalmente es su primer elemento, dependiendo de como se organize la memoria...)(que conste que no lo tengo claro):
*(hotel + i).numero_clientes = 0;
---------------------------------------------------------------------------------------------------------------------------------------
Retirando lo dicho, es un problema de sintaxis, pues así si sale:
(*(hotel + i)).numero_clientes = 0;
Pues así no está mal, lo que pasa es que obviamente tienes que apuntar el puntero a la estructura, que la creo con calloc:
#include <stdio.h>
#include <stdlib.h>
#define NUM_HOTELES 3

/// DEFINICIÓN DE ESTRUCTURAS
struct HOTEL
{
   int numero_clientes;
};

typedef struct HOTEL HOTELES;

/// DECLARACIÓN DE FUNCIONES
void HOTELES_inicializarHoteles(HOTELES *hotel);

int main (int argc, char *argv [])
{
   HOTELES *hotel;          
   hotel = calloc(NUM_HOTELES,sizeof(HOTELES));//3 hoteles
   HOTELES_inicializarHoteles(hotel); //Inicializamos el número de clientes de cada hotel a 0
   return 0;
}
/// DEFINICIÓN DE FUNCIONES
void HOTELES_inicializarHoteles(HOTELES *hotel)
{
   int i;

   for(i=0; i<NUM_HOTELES; i++)
   {
       (hotel+i)->numero_clientes = 0;
   }
}
#318
Sería de gran ayuda que postearas los errores que te dá el compilador. A mí así me funciona perfectamente:
#include <stdio.h>
#include <stdlib.h>
#define NUM_HOTELES 3

/// DEFINICIÓN DE ESTRUCTURAS
struct HOTEL
{
   int numero_clientes;
};

typedef struct HOTEL HOTELES;

/// DECLARACIÓN DE FUNCIONES
void HOTELES_inicializarHoteles(HOTELES *hotel);

int main (int argc, char *argv [])
{
   HOTELES hotel[NUM_HOTELES];          //3 hoteles

   HOTELES_inicializarHoteles(hotel); //Inicializamos el número de clientes de cada hotel a 0
   
   return 0;
}
/// DEFINICIÓN DE FUNCIONES
void HOTELES_inicializarHoteles(HOTELES *hotel)
{
   int i;
   for(i=0; i<NUM_HOTELES; i++)
   {
       hotel[i].numero_clientes = 0;
   }
}

Quizás te hayas confundido al declarar las estructuras puesto que se declaran así:
[struct] <identificador> <objeto_estructura>
Fuente: http://c.conclase.net/curso/?cap=011
Y tu la has declarado sin el struct:
HOTELES hotel[NUM_HOTELES];
Eso sí, si has puesto esto en el código no sé de que es el problema:
typedef struct HOTEL HOTELES;

¡Un saludo!
#319
Creo que esto debería funcionar ( no lo he comprobado pues estoy en Ubuntu y no sé como va aquí lo de mover las cosas por la pantalla, supongo que con ncurses EDITADO: funciona solo en Windows ). Bueno te he corregido algunas cosas como las asignaciones de los for's al valor de la variable "i" ya que lo haces usando el operador "==" (comparador lógico, lo cual conlleva error) y tienes que usar este "=" (operador de asignación). Bueno te dejo el código a ver si funciona:
Código (cpp) [Seleccionar]
##include <iostream> //usar cout
#include <cstdio>
#include <cstdlib>


#ifdef _WIN32
#include <windows.h>
#define cls system("CLS");
void sleep(unsigned milliseconds)
{
   Sleep(milliseconds);
}
void gotoxy( int column, int line )
{
   COORD coord;
   coord.X = column;
   coord.Y = line;
   SetConsoleCursorPosition(
       GetStdHandle( STD_OUTPUT_HANDLE ),
       coord
);
}

#elif defined  __unix__

#include <unistd.h>
#define cls system("clear");
void sleep(unsigned milliseconds)
{
   usleep(milliseconds * 1000); // takes microseconds
}
void gotoxy(int x, int y)
{
   printf("\033[%d;%df", y, x);
   fflush(stdout);
}
#endif



using namespace std;

struct pos
{
   bool arriba;
   bool abajo;
   bool izquierda;
   bool derecha;
   int x;
   int y;
} posicion;

void moverHorizontalDerecha     ();
void moverHorizontalIzquierda   ();
void moverVerticalAbajo         ();
void moverVerticalArriba        ();

int main (int argc, char * argv[])
{

   posicion.arriba     = true;
   posicion.izquierda  = true;
   posicion.derecha    = false;
   posicion.abajo      = false;
   posicion.x          = 0;
   posicion.y          = 0;

   for(;;)
   {
       if((posicion.arriba == true && posicion.izquierda == true))
       {
           moverHorizontalDerecha();
           posicion.izquierda  = false;
           posicion.derecha    = true;
           moverVerticalAbajo();
           posicion.arriba     = false;
           posicion.abajo      = true;
       }
       else if((posicion.abajo == true) && (posicion.derecha == true))
       {
           moverHorizontalIzquierda();
           posicion.izquierda  = true;
           posicion.derecha    = false;
           moverVerticalArriba();
           posicion.arriba     = true;
           posicion.abajo      = false;
       }
   }
   getchar();
}
void moverVerticalArriba()
{
   for (; posicion.y != 0; --posicion.y)
   {
       cls
       gotoxy(posicion.x,posicion.y);
       printf("Hola");
       sleep(10);
   }
}
void moverVerticalAbajo()
{
   for (; posicion.y != 20; ++posicion.y)
   {
       cls
       gotoxy(posicion.x,posicion.y);
       printf("Hola");
       sleep(10);
   }
}
void moverHorizontalIzquierda()
{
   for(; posicion.x != 0; --posicion.x)
   {
       cls
       gotoxy(posicion.x,posicion.y);
       printf("Hola");
       sleep(10);
   }
}
void moverHorizontalDerecha()
{
   for(; posicion.x != 75; ++posicion.x)
   {
       cls
       gotoxy(posicion.x,posicion.y);
       printf("Hola");
       sleep(10);
   }
}
#320
Deberían ponerlo como chincheta, dado que mucha gente lo usa.