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 - do-while

#481
Cita de: Alien-Z en 23 Agosto 2013, 09:29 AM
Es evidente, si dices que estás almacenando imágenes de gran tamaño y llegas a tener 16 777 216 es normal que no haya memoria suficiente. La solución a esto  es trabajar conjunto con el disco duro, ve guardando las imágenes que no utilices y cárgalas cuando las necesites (por ejemplo llevando una list<> de sus identificadores y no almacenando la foto en sí); la memoria RAM es demasiado limitada para lo que intentas.

Saludos.

Eso es. Aunque la cantidad de datos almacenados en la lista esté lejos del límite de la lista, tienes que tener en cuenta que si estás trabajando con un sistema de 32 bits, la cantidad máxima de RAM de que dispone tu programa son 4GB (2^32 bytes), por lo tanto la cantidad máxima de imágenes que puedes almacenar, suponiendo que todas las imágenes ocupen la misma cantidad de bytes, estará cerca de 2^32/tamaño_en_bytes_imagen. A partir de ahí el programa reventará, así que, como ya te han dicho, tendrás que ir tirando de disco duro.

¡Saludos!
#482
Programación C/C++ / Re: [Ayuda] Estructuras
22 Agosto 2013, 16:56 PM
¡Buenas!

Veo que vas un poco liado. Vamos al principio (y entonces Dios separo la luz de las tinieblas y se hicieron las compañías eléctricas y vieron que aquello era bueno y obtenían beneficio...) No tan al principio... (Lo siento mucho, estudiar me sienta francamente mal (¡¡Españoles...!! (No tan francamente mal))) Ya. Stop.

Vamos a ver. Olvídate de los typedef. Cuando tu quieres crear un conjunto mixto de datos que están relacionados en una única entidad ¿qué haces? creas un struct (hasta aquí todo evidente).

La declaración del struct puedes hacerla de dos formas:

struct nombre
{
};

//o de esta otra forma
struct //y aqui ni hay nombre ni hay nada
{
};


Cuando quieres crear un tipo de dato, si declaras el struct de la primera manera, hacesstruct nombre variable;, y de la segunda forma no hay manera de declarar variables, ya que no tenemos forma de llamar al struct. Pues no, esto último es mentira. Es cierto que no podemos declarar variables de ese tipo de dato en cualquier parte del código, pero cuando creamos un struct anónimo podemos declarar una lista de variables justo entre la llave que cierra el cuerpo del struct y los dos puntos que indicar que ahí termina la definición del struct:

struct
{
}una_variable, otra_variable, ultima_variable_que_me_apetece_poner;


Estas serán las únicas variable de ese tipo de dato que puedas declarar y serán globales.

Ahora con el typedef la cosa cambia un poco. Podemos definir como al principio un struct con nombre y darle luego otra notación mas breve:
Código (cpp) [Seleccionar]

struct Original
{
    char s[10];
};
typedef struct Original Original;

Al igual que haciamos al declarar variables del struct anonimo, podemos definir una lista de alias entre la llave final y los dos puntos:
Código (cpp) [Seleccionar]

typedef struct Original
{
    char s[10];
}Cosa,Culo,Melon;

int main(int argc, char *argv[])
{
    Cosa cosa={"Cosa"};
    Culo culo={"Culo"};
    Melon melon={"Melon"};

    cout << cosa.s << endl;
    cout << culo.s << endl;
    cout << melon.s << endl;

    return 0;
}

Y podemos hacer lo mismo con un struct anónimo. En este último caso, lo que haya entre la última llave y el punto coma se considerará un alias, no una variable global del tipo del struct anónimo:
Código (cpp) [Seleccionar]


typedef struct
{
    char s[10];
}Cosa,Culo,Melon;

int main(int argc, char *argv[])
{
    Cosa cosa={"Cosa"};
    Culo culo={"Culo"};
    Melon melon={"Melon"};

    cout << cosa.s << endl;
    cout << culo.s << endl;
    cout << melon.s << endl;

    return 0;
}


Espero que te haya quedado claro.

¡Saludos!
#483
Programación C/C++ / Re: [Ayuda] Estructuras
21 Agosto 2013, 11:26 AM
¡Buenas!

Como ya te han dicho, typedef sirve para crear alias de los distintos tipos de dato que puedas tener.

De todas formas hacer esto

typedef struct
{
    //...
}un_struct;

es algo que siempre me ha parecido odioso por cuestiones de legibilidad de código.

struct un_struct
{
    //...
};
typedef struct un_struct un_struct;


Queda mucho mas ordenado, primero defines un struct, y luego abrevias la notación, y puedes utilizar tanto la notacion un_struct una_variable como struct un_struct una_variable, si quieres dejar claro que el dato que estás usando es un struct. Si lo haces de la otra forma nunca podrás utilizar la notación struct un_struct ya que no habrás definido un struct con nombre, simplemente le has dado un nombre alternativo a un struct anónimo...

Ya te digo que esto simplemente es mi opinión, cada uno tiene sus gustos, pero como ya te he dicho, me parece que queda mas claro todo definiendo primero un struct con nombre, y luego redefiniendo la notación, que directamente dándole un alias a un struct sin mombre.

¡Saludos!
#484
¡Buenas!

Olvídate del tema de la OIE, de la UVA o de cualquier otro juez online. Hay problemas en los que por mucho que cambies el formato de salida (muchas veces la causa del error es esta), aunque esta sea correcta te dan errores de respuesta incorrecta.

Hace mucho que los mandé a freír espárragos...

¡Saludos!
#485
¡Buenas!

Si todavía no has estudiado nada sobre punteros, memoria dinámica y estructuras de datos sigue con C.

Una vez que te sepas todo eso al dedillo sigue, como ya te han dicho, con C++ o Java (por ejemplo...)

¡Saludos!

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
#486
Programación C/C++ / Re: Error con el while
19 Agosto 2013, 15:34 PM
El error no venia de ahí. El compilador le estaba diciendo que tenia una constante caracter que tenía mas de un caracter. Había puesto '/0' en lugar de '\0'

Y no llames a la variable index, te está diciendo que hay un conflicto con alguna función definida en string.h (Como ya había dicho Eternal)

¡Saludos!
#487
Y otra cosa.

Tienes una función que no devuelve ningún valor, a pesar de que indicas que debería devolver un entero...

¡Saludos!
#488
¡Buenas!

Lo de strcmp ya te lo han explicado.

Después de esto, lo que te toca es trabajar con el contenido del archivo:

fopen
fclose
fgets
feof

Con estas funciones debería ser suficiente.

¡Saludos!
#489
Dudas Generales / Re: Que estudiar?
18 Agosto 2013, 19:10 PM
¡Buenas!

No pierdas el tiempo con el módulo. El primer año de carrera me enseñaron a programar, y para sacarle provecho, ya que para cualquier trabajo de programador te piden el módulo, me puse a hacerlo y el segundo año lo mandé a tomar viento fresco. No te enseñan absolutamente nada. Aprendes mas a programar en un curso de la universidad que en todo el tiempo que te pegas en el módulo.

Mi consejo. Si quieres aprender a programar, escoge un lenguaje (C o C++) un buen libro (en la sección correspondiente a estos lenguajes encontraras un post con buenos libros (déjate de tutoriales) y empieza por el tema 1 hasta que llegues al último. Luego vuelve a leerte el libro, y la tercera vez que lo leas ya lo tendrás todo bien asimilado. Si eres de los que se toma las cosas con calma y te gusta entender bien las cosas antes de seguir, después de la segunda lectura seguramente lo tendrás pillado.

Y si lo que te interesa son las bases de datos o cualquier otro tema relacionado con la informática, supongo que deberás de hacer lo mismo. Coger un buen libro y a empollar, pero no pierdas el tiempo ni el dinero con un módulo que no sirve para nada.

¡Saludos!
#490
Y para los que opinan que utilizar break y continue no es estructurado:
Código (c++) [Seleccionar]
for (; !condicion_de_salida() ;)
{
}


O lo que es lo mismo:
Código (c++) [Seleccionar]
while(!condicion_de_salida())
{
}


Y si el código del bucle tiene que ejecutarse al menos una vez:
Código (c++) [Seleccionar]

do{
}while(!condicion_de_salida());


¡Saludos!

PD: Quítate cuanto antes el goto de la cabeza. Como te acostumbres a utilizarlo y empieces a tener que escribir bastantes líneas de código te vas a volver loco buscando los destinos de los goto, te encontraras con goto que están unos dentro de otros, los tendrás que salten dentro de otro goto, que salten fuera para volver por sorpresa dentro de otro. En fin, tendrás goto de todos los sabores y colores. Tantos goto tendrás que no sabrás donde empieza un algoritmo y como llega al final o a los finales que te puedas inventar, si es que llega a alguno. Utiliza las estructuras de control (que para algo están) y aplica indentación a los bloques para que quede bien claro que código pertenece a cada bloque y como están anidados.

¡Saludos!