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ú

Temas - amchacon

#1
Buenas.

Por razones que se desconoce, cuando la gente empieza a aportar curiosidades en un tema. Este se cierra automaticamente:
http://foro.elhacker.net/programacion_cc/problema_en_variable_int-t413535.0.html
http://foro.elhacker.net/programacion_cc/duda_con_matrices_y_paso_por_parametro-t413102.0.html

No acabo de entender esa postura de moderación. ¿No quiere que la gente participe? ¿O hay alguna explicación que nadie conoce? :huh:
#2
Pues resulta que tenía petadas "aleatorias" en mi programa. Estuve mirando y comprobé que pasaba en la destrucción de un objeto.

El objeto tiene pocos atributos, lo unico que puede causar problemas es:
Código (cpp) [Seleccionar]
std::vector<std::vector<RGB> > Matriz;

RGB es una clase con 3 enteros. Eso no debería causar problemas.

Probé a depurar el destructor:
Código (cpp) [Seleccionar]
~Image()
{
   for (int i = 0; i < Matriz.size();i++)
       Matriz[i].clear();
   std::cout<<"Destruidas las filas..."<<std::endl;
   Matriz.clear();
   std::cout<<"^^"<<std::endl;
};


Falla en el ultimo clear. Pero no entiendo porque. ¿Hay problemas en destruir un vector desde otro vector?

Repito que no pasa siempre, solo pasa en X casos (y con la misma entrada y circunstancias :huh: :huh:).




Vale, esque escribía en posiciones negativas del vector *_*
#3
No sé porque, pero esto de los avatares me falla bastante.

Dado esta imagen:


La subo al avatar y al cambiar de página me la borra sola :huh:

Y que yo sepa las dimensiones son las legales *_*:
https://docs.google.com/document/d/1OsG_dD3SwbkOmMTg3bAFFRFY69Tq6JQLFf593n97D7Y/preview#heading=h.0f7161dd5db5
#4
Buenas.

Frecuentemente hay que trabajar con coordenadas en la programación. Actualmente conozco tres formas de pasarlas:

1º A "pelo" con dos variables int:

Código (cpp) [Seleccionar]
int x = 1;
int y = 1;

pintar(x,y);


2º Creandote una estructura "Cord":

Código (cpp) [Seleccionar]
struct Cord
{
   int X,Y;

  Cord(int x,int y) : X(x),Y(y) {}
};

//...

pintar(Cord(1,1));


3º Un objeto Cord con su encapsulamiento y su todo:
Código (cpp) [Seleccionar]
class Cord
{
int X,Y;

public:

Cord(int x,int y) : X(x),Y(y) {}

int getX() const {return X;}
int getY() const {return Y;}
void setX(int x){X = x;}
void setY(int y){Y = y;}

bool operator==(const Cord a) const {return X == a.X && Y == a.Y;}
bool operator!=(const Cord a) const {return X != a.X || Y != a.Y;}
       Cord operator+(const Cord a) const{return Cord(A.X+X,A.Y+Y);}
};

//...

Pintar(Cord(1,1));]


En vuestra opinión. ¿Cual es la forma más adecuada? Con la primera quizás se escribe menos, aunque se te acumulan los argumentos en la función.
#5
Programación C/C++ / Problema extraño
13 Marzo 2014, 12:00 PM
Buenas.

Voy a a hacer un post un poco largo, de modo que los vagos deberían dejar de leer ^^

Estoy haciendo problemas de estos con juez automatico, el problema en el que estoy es el siguiente:

CitarE. KaniI LanGuAgeE

Por razones que no vienen al caso, se quiere convertir grandes clásicos de la literatura española (El Quijote,Don Juan Tenorio, Teo va al parque, etc. . . ) a un lenguaje más cercano a la juventud de hoy en día.

Así pues, se está pensando en realizar un programa que utilice una serie de reglas de conversión al lenguaje conocido como kaNiI LanGuAgeE.

A continuación explicamos dichas reglas:

1. Se eliminan las haches (excepto ch que se transformará en x).
2. Cuando existan una o más vocales juntas, se convierten en mayúscula las de las posiciones pares, contando
la primera vocal como posición 1.
3. Las consonantes siguen una regla similar, pero no tienen que ser consecutivas para pasarlas a mayúsculas. En
este caso, las consonantes se alternan entre mayúsculas y minúsculas dentro de una misma palabra, empezando por mayúscula. (hola caracola!oLaA KaraKolaA) Por simplicidad se puede considerar consonante todo aquello que no es vocal.
4. Si la palabra acaba en vocal se añade la misma vocal (se sigue aplicando la regla de las mayúsculas (regla 2)) (Primo!PriMoO, vivia !BibiAa).
5. Las c con sonido z (ce, ci) se cambian por z, mientras que el resto se cambian por k.
6. Las b cambian por v y las v por b.
7. Las letras ch cambian por x.
8. Las letras que ya están en mayúscula se mantienen: (HOLA CARACOLA!OLAA KARAKOLAA).
9. Una consonante estará en mayúscula si cumple la regla 3 o si la letra original está en mayúscula. Para el
caso especial de la ch (al sustituirse por x), seguirá la regla tomando en cuenta si la c de la ch original es
mayúscula o no. (revancha!RebaNxaA, rebanCHa!RevaNXaA, reVancHa !ReBaNxaA)
10. Una vocal estará en mayúscula si cumple la regla 2 o si la letra original está en mayúscula. (que ! QuEe, quE!QuEE)

Se recomienda revisar los ejemplos detenidamente para ver como se aplican estas reglas. Y utilizar herramientas como diff para ver con más detalle en qué partes está fallando el programa.

Por simplicidad las frases solo contendrán carácteres de a-z y A-Z y espacios como delimitadores. También, debido al caso especial de la eliminación de la h, no existe ninguna palabra que acabe por h.

Y te dan ejemplo la entrada:
CitarNo es verdad angel de amor que en esta apartada orilla mas pura la
luna brilla y acaso se respira mejor
En un lugar de la mancha de cuyo nombre no quiero acordarme vivia
Con diez canyones por banda viento en popa a toda vela no corta el
mar sino vuela un velero bergantil aquel pirata el temido
Este es
un ejemplo
mas corto
Para que
podais gastar la
herramienta diff
y os salgan bien
las cosas
ahi es nada
y ahora
unas frases tipicas
si apruebo todas mi madre me
compra la moto
sin ser chula ni vacilona soy tu envidia campeona

Y la salida:

CitarNoO eS verdad aNgeL DeE aMor QuEe eN eStaA aParTadaA oRilLaA Mas PuraA LaA
LunaA VriLlaA Y aKasoO SeE ResPiraA MejoR
EN uN LugaR DeE LaA ManXaA DeE KuyoO NomVreE NoO QuIeroO aKorDarMeE BibiAa
Kon DiEz KanYoneS Por VanDaA BiEnToO eN PopaA aA TodaA BelaA NoO KorTaA eL
Mar SinoO BuElaA uN BeleRoO VerGanTil aQuEl PiraTaA eL TemiDoO
ESteE eS
uN eJemPloO
Mas KorToO
ParaA QuEe
PodaIS GasTar LaA
eRraMiEnTaA DifF
Y oS SalGan ViEn
Las KosaS
aIi eS NadaA
Y aORaA
uNas FraSes TipiKas
SiI aPruEVoO TodaS MiI MadReE MeE
KomPraA LaA MotoO
Sin Ser XuLaA NiI BaziLonaA Soy TuU eNbiDiAa KamPeOnaA

Total que me pongo a ello y saco este código:
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

string Traducir(string &e);

int main()
{
   ifstream fin("Ekani1.in");
   ofstream fout("salida.txt");
   string palabra,linea;
   getline(fin,linea);
   
   while (fin.good())
   {

       {
           stringstream Buffer(linea);
           unsigned int i = 0;
           while (Buffer.good())
           {
               while (i < linea.size() && linea[i] == ' ')
               {
                   fout<<' ';
                   i++;
               }

               Buffer>>palabra;

               i += palabra.size();
               fout<<Traducir(palabra);
               palabra.clear();
           }
           fout<<endl;

       }
       getline(fin,linea);
   }

   return 0;
}

inline bool esVocal(char a)
{
   return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a== 'u' || a == 'A' || a == 'E' || a == 'I' ||a == 'O' ||a=='U';
}

string Traducir(string &e)
{
   string buffer;
   int consonante = 1;
   char letra;

   if (esVocal(e[e.size()-1])) // Si la ultima es vocal, añadimos una vocal al final
       e += e[e.size()-1];

   for (unsigned int i = 0; i < e.size(); i++)
   {
       if (esVocal(e[i])) // es vocal?
       {
           buffer += e[i]; // la anyadimos
           bool mayus = 1;
           i++;

           // listamos todas las vocales adyacentes (y las h, ya que son "mudas")

           while (i < e.size() && (esVocal(e[i]) || e[i] == 'h' || e[i] == 'H'))
           {
               if (e[i] == 'h' || e[i] == 'H'){i++; continue;} // las haches se descartan

               if (mayus == 1) buffer += toupper(e[i]); // si toca mayuscula, anyadimos una mayuscula
               else buffer += e[i]; // sino, la anyadimos tal cual

               mayus = !mayus;
               i++;
           }
           i--;
           continue;
       }

       // no es vocal

       if (e[i] == 'h' || e[i] == 'H') // si es h, se ignora
       {
           if (i != 0 && (e[i-1] == 'c' || e[i-1] == 'C')) // si la anterior era una c
           {
               if (e[i-1] == 'C') letra = 'X'; // la sustituimos por una X
               else letra = 'x'; // o x minuscula

               if (consonante % 2 == 0) // si es una posicion par, toca mayuscula
               {
                   buffer[buffer.size()-1] = toupper(letra); // cambiamos la ultima posicion
                   consonante = 1;
               }
               else buffer[buffer.size()-1] = letra;

           }
           continue;
       }

       letra = e[i]; // la letra se anyade al final, segun resulte ser mayuscula o minuscula
       consonante++;
       //  else buffer += e[i];
//
       if (e[i] == 'b') // sustituir b por v
       {
           letra = 'v';
       }
       else if (e[i] == 'B') // sustituir B por V
       {
           letra = 'V';
       }
       else if (e[i] == 'v')
       {
           letra = 'b';
       }
       else if (e[i] == 'V')
       {
           letra = 'B';
       }

       else if (e[i] == 'c' || e[i] == 'C') // las c, por z o por k
       {
           if (i+1 < e.size() && (e[i+1] =='e' || e[i+1] == 'E' ||e[i+1] == 'i' || e[i+1] == 'I'))
           {
               if (e[i] == 'c') letra = 'z';
               else letra = 'Z';
              // i++;
           }
           else
           {
               if (e[i] == 'c') letra = 'k';
               else letra = 'K';
           }
       }

       if (consonante % 2 == 0) // si es una consonante en posicion par
       {
           buffer += toupper(letra); // se anyade mayuscula
           consonante = 0;
       }
       else buffer += letra; // se anyade tal cual
   }

   return buffer;
}


Que me genera una salida identica a la anterior.

Total que lo subo al juez y me marca WRONG ANSWER. Lo he revisado varias veces pero no entiendo que puede fallar :(

#6
Buenas.

Suponte, que quiero leer los números:
Citar2 5

Yo haría:
Código (cpp) [Seleccionar]
int numero,numero2;
cin>>numero>>numero2;


Y perfecto. ¿Pero que pasaría si hubiese una coma en lugar de un espacio?
Citar2,5

¿Como cambio el delimitador de cin para poder leerlos directamente?
#7
Está pagina estaudinense, es la que usan los alumnos de allí para practicar para las olimpiadas de progamación. Son problemas muy interesantes:
http://cerberus.delos.com:790/usacogate

Tienes que subir el código del problema, allí un juez automático comprueba que todo va bien. El juez automático lo que hace es compilar el progama y meterles algunos casos de prueba para ver si da bien el resultado. Puede dar los siguientes errores:

- Error de compilación.
- Error de ejecución (el SO aborta el progama, mayormente por un mal uso de punteros entre otras cosas).
- Respuesta incorrecta (el resultado no coincide con el que él tiene).
- Sobrepasado el tiempo de ejecución.

Suponeos que teneís que calcular el máximo de un conjunto de números. El juez compila el código y le mete la siguiente entrada al progama:
Citar1 4 2 3 6 5 3 4 8 3 1 0 4

La salida que debería dar tu progama es:
Citar8

Ya que es el número máximo.

PD: Decir que la página no está orientada para principiantes, debes tener un mínimo de conocimiento para poder hacer algun problemilla ;)
#8
Tengo un problemilla muy extraño en un constructor, dado una estructura tal que así:

Código (cpp) [Seleccionar]
struct Nodo
{
    Nodo* Letra[26];
    int ocupados = 0;
    char Caracter;

    Nodo(char caracter = 0) : Caracter(caracter) { for (int i = 0; i < 26;i++} Letra[i] = NULL;}

    ~Nodo(){for (int i = 0; i < 26;i++) if (otro.Letra[i] != NULL) delete Letra[i]; }
};


Me salta un error de compilación en el constructor, dice que "Letra" no existe. Lo cual no tiene sentido *_*
#9
Programación C/C++ / Memory leak con strings
9 Agosto 2013, 14:06 PM
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

class foo
{


public:
      string str;
    foo() : str(1000000,'a')
    {

    }
    ~foo()
    {
        cout<<"Destructor invocado";
    }
};

int main()
{


    cout << "Presione para construir f";
    cin.get();


    foo* f = new foo;


    cout << "Presione para destruir f";
    cin.get();

    delete f;

    cout << "Presione para salir del programa";
    cin.get();
}


¿Por qué la memoria no se libera al destruir el objeto foo? *_*
#10
Tengo un problema que me frie la sangre.

Tengo esto en un archivo:

Código (cpp) [Seleccionar]

HILO(DesplazamientoPersonaje,parametro)
{
   Datos* param = (Datos*) parametro;

   switch (param->Orientacion)
   {
   case ARRIBA:
       Transicion(param,0,-1); // Transicion, desplazamiento X e desplazamiento Y negativo
       break;
   case ABAJO:
       Transicion(param,0,1); // Transicion, desplazamiento X e desplazamiento Y positivo
       break;
   case IZQUIERDA:
       Transicion(param,-1,0); // Etc
       break;
   case DERECHA:
       Transicion(param,1,0);
       break;

   }

   delete param;
}

void Transicion(Datos* param,short incrx,short incry)
{
   for (short ini = 1; ini < 21; ini++)
   {
           //Blablablabla...
   }
   
}


Y en otro archivo tengo:

Código (cpp) [Seleccionar]
HILO(Desplazamiento,parametro)
{
   Datos* param = (Datos*) parametro;

   switch (param->Orientacion)
   {
   case ARRIBA:
       Transicion2(param,0,-1); // Transicion, desplazamiento X e desplazamiento Y negativo
       break;
   case ABAJO:
       Transicion2(param,0,1); // Transicion, desplazamiento X e desplazamiento Y positivo
       break;
   case IZQUIERDA:
       Transicion2(param,-1,0); // Etc
       break;
   case DERECHA:
       Transicion2(param,1,0);
       break;

   }

   delete param;
}

void Transicion2(Datos* param,short incrx,short incry)
{
   
   for (short ini = 1; ini < 21; ini++)
   {
           // blablabla

           if (param->Valor == 1)
               circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,5,pallete_color[14]);

           if (param->Valor == 2)
               circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,7,pallete_color[12]);

           // blablablabla

       
   }
}


Son muy parecidas, las unicas diferencia son los dos ifs de la función for. Hay alguna forma (sencilla) de juntar las dos funciones pero conservando los dos ifs?  :-\

#11
Programación C/C++ / MiniLibrería de hilos
10 Julio 2013, 12:32 PM
La estuve haciendo para un proyecto, es una especie "abstracción" con macros para poder usar hilos de forma multiplataforma. La cuelgo aquí por si alguien le interesa:

CitarIDTHREAD Variable que identifica a un thread
IDMUTEX Variable que identifica a un mutex

CREARHILO(handle,funcion,parametro) Crea un hilo de ejecución, el primer parámetro corresponde a la variable ID, el segundo parámetro al nombre de la función y el tercero al parametro que se pase (NULL si no se pasa ninguno)
CREARMUTEX(nombre) Inicializa un mutex

HILO(nombre,parametro) Prototipo de la función del hilo, el primer parámetro correspondel nombre de la función y el segundo corresponde al nombre del parametro

LOCKMUTEX(nombre) Bloquea un mutex
UNLOCKMUTEX(nombre) Desbloquea un mutex

JOIN(handle) Espera hasta la finalización de un determinado hilo.

Librería (copiar y pegar):

#ifdef WINDOWS
#include <windows.h>
#else
#include <pthread.h>
#endif

#ifdef WINDOWS

#define IDTHREAD HANDLE
#define IDMUTEX HANDLE

#define CREARHILO(handle,funcion,parametro)  handle = CreateThread(NULL,0,funcion,parametro,0,NULL);
#define CREARMUTEX(nombre) nombre = CreateMutex(NULL,FALSE,NULL);
#define HILO(nombre,parametro) DWORD WINAPI nombre ( LPVOID parametro)
#define LOCKMUTEX(nombre) WaitForSingleObject(nombre,INFINITE);
#define UNLOCKMUTEX(nombre) ReleaseMutex(nombre);

#define JOIN(nombre) WaitForSingleObject(nombre,INFINITE);

#else
#define IDTHREAD pthread_t
#define IDMUTEX pthread_mutex_t

#define CREARHILO(& handle,funcion,parametro) pthread_create(handle,NULL,funcion,parametro);
#define CREARMUTEX(nombre)  pthread_mutex_init (nombre, NULL);
#define HILO(nombre,parametro) void* Nombre(void* parametro)
#define LOCKMUTEX(nombre) pthread_mutex_lock(nombre);
#define UNLOCKMUTEX(nombre) pthread_mutex_unlock(nombre);

#define JOIN(nombre) pthread_join(nombre,NULL);

#endif


Nota Windows: Hay que poner el define WINDOWS (en Codeblocks, tienes que irte a project -> build options -> #defines -> Escribir WINDOWS).
Nota Linux: Hay que enlazar con la librería pthread (en Codeblocks tienes que irte a project -> build options -> linker settings -> pthread (columna de la izquierda)).
#12
Tengo una matriz tal que:

Código (cpp) [Seleccionar]
char Matriz[29][31];

Quiero pasar una referencia de esta a una estructura como si la pasase a una función. No me vale copiarla porque quiero que se reflejen los cambios... ¿Alguna idea?
#13
Scripting / Duda python (error de sintaxis)
1 Julio 2013, 09:00 AM
Recien estoy empezando python, estaba traduciendo una función que tenía en C++:

Código (python) [Seleccionar]
def Resolver(Tablero):

    if Explora(Tablero,MAX,MAX) == False:
        return false;

    if Resuelto(Tablero) == True:
        return true;

    for j in range(9):
        for i in range(9):
            if Tablero[i][j] != None:
Valores = EncontrarPosibilidades(Tablero,i,j)

tablero = [None] * 9

for k in range(9):
tablero[k] = [None] * 9


                for it in Valores:

                    for k in range(9):
                        for l in range(9):
                            tablero[l][k] = Tablero[l][k]

                    tablero[i][j] = it

                    if (Resolver(tablero))
                   
                        for k in range(9)
                            for l in range(9)
                                Tablero[l][k] = tablero[l][k];

                        return true;
                   

               

return false;



Me marca un error en EncontrarPosibilidades(Tablero,i,j):



Lo cual no entiendo (¡Está identado!)
#14
Programación C/C++ / Obtener ruta más corta
12 Junio 2013, 23:22 PM
Me encuentro en un problema un poco elemental. A ver si alguien me puede dar alguna pista de como resolverlo.

Tenemos una cuadrícula tal que:



Ahí tenemos dos cuadrados pintados:



Partiendo del cuadrado rojo, tenemos que obtener una ruta para llegar al cuadrado azul (moviendose verticalmente/horizontalmente). Para complicar más la cosa ponemos algunos obstaculos aleatorios:



La ruta más corta sería:

(7,2)
(7,9)
(10,9)


¿Cómo podríamos implementar esto en C++?
#15
¿En Mingw?

Quiero decir, yo ahora me descargo el código de una librería:
http://www.libsdl.org/projects/SDL_mixer/

Para instalarla, en linux sería:

Citar./configure
make
sudo make install

¿Cual es su equivalente en windows?
#16
Programación C/C++ / Vectores vs Listas
1 Junio 2013, 13:39 PM
Tenemos el siguiente caso, necesitamos tener almacenados los disparos de una nave. Cada cierto tiempo comprobaremos los disparos y si alguno ha acertado/salido del mapa los eliminaremos.

¿Que contenedor deberíamos usar para obtener el máximo rendimiento? ¿Vectores o listas?
#17
Programación C/C++ / Duda sobre los macros
22 Mayo 2013, 13:04 PM
No me queda del todo claro, dado ese macro:

#define DeclararPiezas(jugador,dirrecion) Tablero[0][dirrecion] = jugador(TORRE); \
Tablero[1][dirrecion] = jugador(CABALLO); \
Tablero[3][dirrecion] = jugador(REY); \
Tablero[4][dirrecion] = jugador(REINA); \
Tablero[5][dirrecion] = jugador(ALFIL); \
Tablero[6][dirrecion] = jugador(CABALLO); \
Tablero[7][dirrecion] = jugador(TORRE); \
#if dirrecion ABAJO
#define aux 1
#else
#define aux -1
#endif \
for (int i = 0; i < 8;i++) \
     Tablero[i][dirrecion+aux] = jugador(PEON);


Dado un jugador y una orientacion (ARRIBA o ABAJO). Se declara un tablero de ajedrez. Ahora bien, para poner los peones no es tan sencillo puesto que dependiendo si esta arriba o abajo tengo que sumar 1 o restar 1.

He hecho ahí una prueba (#if dirrecion abajo) pero evidentemente el compilador no se lo traga. ¿Alguna idea?
#18
Programación C/C++ / (Juego) La Serpiente
10 Mayo 2013, 18:37 PM
Aquí os dejo un juego que he estado desarrollando por mi cuenta:




Citar
Descarga Ejecutable Windows (Versión 20130510)
Descarga Ejecutable Linux (Versión 20130513)
Descarga Código (Versión 20130510)

CONTROLES:

W/Flecha Arriba: Moverse hacia arriba.
A/Flecha Izquierda: Moverse hacia la izquierda.
D/Flecha Derecha: Moverse hacia la derecha.
S/Flecha Abajo: Moverse hacia abajo.

P = Pausa
J = Más velocidad (necesita pulsarse varias veces para que sea perceptible).
U = Menos velocidad.
K = Aumentar longitud de la serpiente.
M = Silenciar la Musica.
ESC = Salir del juego.

#19
Tal como suena, busco alguna manera de detectar el idioma que usa el usuario... Tanto en Windows como en Linux.
#20
Programación C/C++ / Duda sobre CodeBlocks
25 Abril 2013, 00:18 AM
Tengo varios códigos con Compilación Condicional:



Por lo que veo, el código que no cumple la condición se oculta. Si coloco un "#define WINDOWS" se muestra y se oculta el otro:



Todo muy bonito, pero como yo no puedo estar añadiendo un define a cada archivo. Lo he puesto en los comandos del compilador "-DWINDOWS". Funciona perfecto en el ejecutable pero...

El código se me sigue ocultando en el editor! Lo cual es muy engorroso. ¿Alguna idea?
#21
Buenas, necesito hacer algo un poco engorroso.

Quiero que un exe "cambie" el registro para que al iniciar Windows se ejecute un determinado bat.

El bat en cuestión se encuentra en la misma carpeta del exe y tiene un nombre conocido (Bateria.bat).
#22
Me estoy volviendo loco para instalar esta librería en CodeBlocks (Windows):

- Primero me descargo el full SDK de aquí:
http://www.sfml-dev.org/download.php
- Copia las carpetas lib y include a la carpeta de Mingw
- Creo un proyecto en blanco, voy a build options y pongo:



- Introduzco la macro SFML_STATIC tal como sale en el tutorial:



Añado un archivo al proyecto y pongo un código de ejemplo:

Código (cpp) [Seleccionar]
#include <SFML/Window.hpp>

int main()
{
   sf::Window window(sf::VideoMode(800, 600), "My window");

   // run the program as long as the window is open
   while (window.isOpen())
   {
       // check all the window's events that were triggered since the last iteration of the loop
       sf::Event event;
       while (window.pollEvent(event))
       {
           // "close requested" event: we close the window
           if (event.type == sf::Event::Closed)
               window.close();
       }
   }

   return 0;
}


Clico en compilar, errores:

Citarc:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `__gxx_personality_sj0'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Register'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Unregister'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Resume'|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|

Pruebo ahora a enlazar con las librerías dinámicas, elimino la macro STATIC y compilo. Ahora compila correctamente, copio las DLL a la carpeta y ejecuto el programa. Me da error:



Me estoy volviendo loco, LOCO
#23
El caso es que cambie la pasta térmica de la CPU. Quería comprobar como reaccionaría la nueva ventilación ante una situación full, asi que me creé un mini-programilla y fue checkeando las temperaturas.

Antes de la prueba:

 

Tras tres minutos de estress:

 

Lo cual demuestra que la refrigeración funciona bastante bien (nota, los valores minimum son nada más empezar la prueba).

Os dejo aquí el programa por si quereís checkear las vuestras, podríamos hacer un ranking de la que menos se calienta [carcajad]*(o la que más tarda en llegar a 50ºC ):
https://dl.dropbox.com/u/69551225/CPU_Estress.exe
(programa no comprobado por el moderador)

Podeís descargaros el realtemp de aquí:
http://www.techpowerup.com/downloads/2089/mirrors.php
#24
Me he dado cuenta que mucha gente aún sigue usando el obsoleto Devcpp... Mi consejo esque os cambieis de IDE ya que:

- Lleva sin actualizarse desde el 2004.
- Su editor es muy simple, sus tabulaciones son horrorosas.
- No tiene plugins.
- No soporta varios compiladores, es más, el compilador que viene por defecto está muy obsoleto.
- La depuración no funciona, no dispone de apenas opciones de compilación...
- No es multiplataforma, solo está para Windows.

La única razón por la que alguien puede seguir con Devcpp es porque está acostumbrado a él. Pero no hay ninguna razón lógica para seguir con él (ni es más sencillo, ni es más potente, ni es más eficaz...).

Hay muchos otros IDE que harían mucho mejor su trabajo (Geany, CodeBlocks, Visual Studio...). Personalmente a mi me gusta CodeBlocks:



http://www.codeblocks.org/downloads/26

Os descargaís la versión que incluye mingw (el compilador). Lo instalais y creaís un nuevo proyecto. Terminado  :rolleyes:

Por favor, dejad de usar IDE tan desfasados (como digo este digo Turboland).
#25
Os dejo aquí un programa que me creé para calcular determinantes de matrices NxN. Personalmente no me gustan los algoritmos recursivos, pero funcionan de maravilla en este caso :)

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>

using namespace std;

void MostrarMatriz(int** Matriz,unsigned int MAX);
void Leer_matriz(int** a,unsigned int MAX);
int CalcularDeterminante(int** Matriz,unsigned int MAX);

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

   while(1)
   {
       cout<<"Indica el tamanyo de la matriz: ";
       cin>>Tamanyo;

       if (Tamanyo < 2)
           Tamanyo = 2;

       cout<<endl<<"Inserta los elementos de la matriz: "<<endl<<endl;

       int** Matriz;
       Matriz = new int*[Tamanyo];

       for (int i = 0; i<Tamanyo; i++)
           Matriz[i] = new int[Tamanyo];

       Leer_matriz(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       MostrarMatriz(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       cout<<"El determinante es: "<<CalcularDeterminante(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       system("PAUSE");
       system("PAUSE");
       system("CLS");
   }
   return EXIT_SUCCESS;
}

int CalcularDeterminante(int** Matriz,unsigned int MAX)
{

   if (MAX == 2)
   {
       return (Matriz[0][0]*Matriz[1][1] - Matriz[0][1]*Matriz[1][0]);
   }
   else
   {
       int Actual = 0;
       int k = 0;
       int Numero = 0;
       short Multriplicador;
       int** Buffer; // Creo una nueva matriz para hacer los adjuntos
       Buffer = new int*[MAX-1];

       for (int i = 0; i<(MAX-1); i++)
           Buffer[i] = new int[MAX-1];

       for (int l = 0; l < MAX; l++) // Desarrollo por filas
       {
           for (int j = 1; j < MAX; j++) // Creo una nueva matriz adjunta
           {
               for (int i = 0; i < MAX; i++)
               {
                   if (i != l)
                   {
                       Buffer[k][j-1] = Matriz[i][j];
                       k++;
                   }
               }
               k = 0;
           }

           if ( l % 2 != 0)
               Multriplicador = -1;
           else
               Multriplicador = 1;
           Numero += (Matriz[l][0]*CalcularDeterminante(Buffer,MAX-1)*Multriplicador);
       }
       return Numero;
   }
}

void MostrarMatriz(int** Matriz,unsigned int MAX)
{
   for (int j = 0; j < MAX; j++)
   {
       cout<<endl<<" (  ";
       for (int i = 0; i < MAX; i++)
           cout<<Matriz[i][j]<<"  ";


       cout<<") ";
   }
}

void Leer_matriz(int** a,unsigned int MAX)
{
   int i,j;

   for (j = 0; j < MAX; j++)
       for (i = 0; i < MAX; i++)
       {
           cout<<"Introduce el numero para la posicion ("<<i<<","<<j<<") "<<endl;
           cin>>a[i][j];
       }
}



Consejos, mejoras ;)
#26
Programación C/C++ / Windows API: Crear Menú
30 Enero 2013, 18:34 PM
Iniciandome en el tema de Windows API, intento crear un menú sencillo pero no me lo coje!:

Menu.rc
Código (cpp) [Seleccionar]
#include "Constantes de menu.hpp"

Menu MENU
BEGIN
   POPUP "&Archivo"
      BEGIN
         MENUITEM "&Abrir", M_ABRIR
         MENUITEM "&Guardar", M_GUARDAR
         MENUITEM SEPARATOR
         MENUITEM "&Salir", M_SALIR
      END
    POPUP "Ediccion"
        BEGIN
            MENUITEM "&Deshacer",M_DESHACER
        END

END


Main.cpp
Código (cpp) [Seleccionar]
#include <windows.h>
#include "Assets\Constantes de menu.hpp"
#include "Assets\Menu.rc"

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "CodeBlocksWindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Code::Blocks Template Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           LoadMenu(hThisInstance,"Menu"),                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nCmdShow);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


Constantes de Menu.hpp
Código (cpp) [Seleccionar]
#define M_ABRIR 100
#define M_GUARDAR 101
#define M_SALIR 102
#define M_DESHACER 103


Me da error de sintaxis en Menu.rc, y yo no veo ninguno *_*

#27
De las funciones que tiene Windows para el trato con ficheros. Hay alguna que se parezca al tellg de la biblioteca estandar? (es decir una función que te diga en que posición del archivo te encuentras).
#28
He aquí, os presento un programa de esteganografía para archivos Rar: Rar File Missing.

Su uso es sencillo, creamos previamente un rar con los archivos:



Le pasamos el programa:



El programa nos detecta automáticamente el número de archivos que hay, ahora podemos ocultarlos a nuestro antojo. Por ejemplo quiero ocultar el archivo Cosa.txt porque allí escondí mi plan de asesinato al presidente :)



Ahora abrimos el nuevo archivo:



¡Ha desaparecido! Podemos descomprimirlo y comprobarlo. El archivo ha
desaparecido sin dejar rastro (0 mensajes de error, 0 advertencias...).

Para desbloquearlo solo es necesario abrirlo con el mismo programa y seleccionar la opcion "Mostrar" ;)

Basada en la técnica de Hecky: http://neobits.org/?p=560

Descarga:

Rar_File_Missing Version Última versión (Source)

Rar_File_Missing Version ALPHA (WINDOWS)
Rar_File_Missing Version ALPHA (WINDOWS 64 BITS)
Rar_File_Missing Version ALPHA (LINUX)

Rar_File_Missing Version Primera versión (Source)
#29
Vereis tengo una clase tal que asi:

Código (cpp) [Seleccionar]
using namespace std;

class Rar_File_Mising
{
private:
   ifstream Lectura;
   ofstream Escritura;
   // Demas metodos y variables...

public:
   // Constructor
    Rar_File_Mising(const char* Nombre,bool Opcion);

   //Metodos

   string ListarArchivos();

   void Generar(const char* Nombre,vector<unsigned int> Numero);

  //...

  // Excepciones...

   struct Excepcion
   {
       unsigned int N_Error; // Codigo de error
       string Mensaje; // Mensaje de error

       Excepcion(string mensaje,unsigned int Error) : Mensaje(Mensaje),N_Error(Error) {}; // Constructor
   };

   // Destructor

   ~Rar_File_Mising();

};


Como veis, he definido una estructura para definir las excepciones que me puedan ocurrir. De forma que si ocurre algo inesperado:

Código (cpp) [Seleccionar]
if (!Lectura.is_open())
       throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);


El problema esque no me las coge nunca en el bloque catch (ni siquiera en el bloque ...):

Código (cpp) [Seleccionar]
try
{
  Rar_File_Mising Nuevo(Nombre.c_str(),Opcion);
  cout<<Nuevo.ListarArchivos();
}
catch(Rar_File_Mising::Excepcion &E)
{
   cout<<E.Mensaje<<endl;
}
catch(...)
{
     cout<<"???";
}


¿Que es lo que puede pasar? Me acabo de cambiar al codeblocks hace poco, tengo que activar algo para que me admita las excepciones?
#30
Necesito comprobar si un determinado archivo es un rar, lo que hago es comprobar si tiene la firma que tiene todo archivo Rar: "Rar!"

Código (cpp) [Seleccionar]
bool Rar_File_Mising::ComprobarFormato()
{
   if (!Lectura.is_open())
        throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);

   char* Leer = new char[4];

   Lectura.read(Leer,4);
  // cout<<"Cosa:"<<Leer[0]<<Leer[1]<<Leer[2]<<Leer[3];

   if (strcmp(Leer,"Rar!") == 0)
   {
       delete[] Leer;

       return true;
   }
   else
   {
       delete[] Leer;

       return false;
   }
}


El problema esque cuando abro un archivo real. Siempre me lo detecta como falso, es como si no quisiera leer >_>