• Martes 5 de Noviembre de 2024, 14:46

Mostrar Mensajes

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


Mensajes - ToTeX

Páginas: [1]
1
Java / Re: Iniciacion A Java
« en: Viernes 5 de Marzo de 2004, 15:41 »
Para que andar buscando tutoriales de terceros si cuentas con un sitio con toda la documentacion: http://java.sun.com/docs/books/tutorial/index.html

2
C/C++ / Re: Constructor Privado
« en: Jueves 4 de Marzo de 2004, 17:43 »
Hola, yo uso siempre singletons en mis juegos y en otros programas donde necesito instancias unicas. He visto hartos ejemplos en internet pero ninguno me dejo satisfecho, asi que me hice una propia. La ventaja de la implementacion que les presento es que uno solo deriva cualquier clase de CSinlgeton y punto. Solo hay que tener presente que hay que llamar al destructor al fin del programa, pues la instancia unica se crea mediante un new, por lo tanto no se llama al destructor automaticamente. Otro punto es que el programa al partir crea todos los singletons, por lo tanto no se pueden hacer constructores con parametros, por eso generalemente yo creo un metodo, en la clase derivada, que haga la construccion, asi controlo en el main yo mismo el orden en que se crean los singletons y le puedo pasar parametros.

singleton.h
Código: Text
  1.  
  2. #if !defined(SINGLETON_DEC)
  3. #define SINGLETON_DEC
  4.  
  5.  
  6. //Clase CSingleton, base para derivar singletons
  7.  
  8. template<class CLASS> class CSingleton
  9. {
  10.   protected:
  11.     static CSingleton<CLASS>* m_poObj;
  12.   public:
  13.     CLASS* poObj()
  14.     {
  15.       if(!m_poObj)
  16.         m_poObj=new CLASS();
  17.       return (CLASS*)m_poObj;
  18.     }
  19. };
  20. template<class CLASS> CSingleton<CLASS>* CSingleton<CLASS>::m_poObj=new CLASS();
  21.  
  22.  
  23. /*
  24.   Esta funcion ahorra lineas de codigo, sirve para inicializar un puntero
  25.   a alguna Clase derivada de CSingleton.
  26. */
  27. template<class CLASS> CLASS* poSingleton()
  28. {
  29.   CLASS* poSingleObject=(CLASS*)0;
  30.   poSingleObject=poSingleObject->poObj();
  31.   return poSingleObject;
  32. }
  33.  
  34. #endif
  35.  
  36.  
  37.  


main.cpp
Código: Text
  1.  
  2. #include <iostream>
  3. #include "singleton.h"
  4.  
  5. using namespace std;
  6.  
  7. class A:public CSingleton<A>
  8. {
  9.   public:
  10.     A(){cout<<"construyendo A"<<endl;}
  11.     ~A(){cout<<"destruyendo A"<<endl;}
  12. };
  13.  
  14. class C
  15. {
  16.   public:
  17.     C(){cout<<"construyendo C"<<endl;}
  18.     ~C(){cout<<"destruyendo C"<<endl;}
  19. };
  20.  
  21. class B:public CSingleton<B>,public C
  22. {
  23.   public:
  24.     B(){cout<<"construyendo B"<<endl;}
  25.     ~B(){cout<<"destruyendo B"<<endl;}
  26. };
  27.  
  28. int main()
  29. {
  30.   A *p1=poSingleton<A>();
  31.   B *p2=poSingleton<B>();
  32.   delete p1;
  33.   delete p2;
  34.   return 0;
  35. }
  36.  


Una alternativa interesante y a veces mejor(en mi opinion) son los namespaces. Son bastante comodos, ademas de que sus variables y metodos son "unicos", El unico problema es que se viola la encapsulacion, ademas de la imposibilidad de usar alguna clase base como se haria al construir un singleton derivado.

3
C/C++ / Re: Operadores De Indirección (*), De Dirección (&)...
« en: Domingo 22 de Febrero de 2004, 18:26 »
Un par de sutilezas puristas:

Es erroneo decir que el 'operador' * se utiliza para declarar punteros: int* pInt;
El * de esta declaracion no tiene nada que ver con el operador de indireccion, es solo una coincidencia de simbolo, el * es solo la sintaxis del lenguaje para declara punteros.

No existe el paso de argumentos por referencia en C, esta caracteristica esta implementada solo en C++. Lo que se hace en C es simular una referencia pasando un objeto(puntero) que representa al dato deseado,  pero el dato en realidad nunca pasa al ambito de la funcion, pasa una copia por valor del puntero.

4
C/C++ / Re: Modificando Una Cadena
« en: Sábado 14 de Febrero de 2004, 16:58 »
Cita de: "desorden"
ToTeX, ¿has compilado y ejecutado el código de tu mensaje? ¿modifica(k) provoca un error en tiempo de ejecución?  <_<

Un saludo...
ah por supuesto que compile y ejecute el programa, si no no habria opinado  :P

La linea 'modifica(k)' del ejemplo que di da solo un warning al compilar 'warning C4700: local variable 'k' used without having been initialized', pero nada mas, el programa cae al ejecutarse.

5
C/C++ / Re: Modificando Una Cadena
« en: Sábado 14 de Febrero de 2004, 00:44 »
Cita de: "desorden"
Cita de: "ToTeX"
   modifica(k); //Error! k no es un puntero inicializado

Es un error porque no sabes que zona de memoria estás modificando, pero no provoca un error en ejecución.

Yo creo que el problema se encuentra en como se ha inicializado el puntero.
 
desorden no concuerdo contigo y no creo estar equivocado, segun entiendo hay errores en tiempo de compilacion(el codigo no se logra compilar por errores de sintaxis) y errores en tiempo de ejecucion, generalmente errores semanticos o logicos que provocan la finalizacion anormal del programa. El programa expuesto es sintacticamente correcto, compila bien, el problema ocurre solo cuando se le pasa un puntero que no esta incializado, o sea apunta a una zona de memoria desconocida como dices tu, pero eso es un error en tiempo de ejecucion.

shephiroth tampoco concuerdo contigo, creo que estas equivocado. Tu dices que perder el inicio del puntero en el ambito de la funcion void modifica(char* p) es el error, porque se modifica el puntero; ese es un grueso error porque el puntero se pasa por valor por lo tanto NO SE PUEDE MODIFICAR, el puntero con que se trabaja en el ambito de la funcion modifica es solo una copia del verdadero puntero,lo que se puede modificar es "lo que apunta el puntero", pero no el valor del puntero, por lo tanto no tiene sentido recorrer de esa forma que propones el arreglo.

Creo que ya concordamos todos en que el error se da cuando el puntero que pasa a la funcion no esta inicializado o apunta a una zona de memoria no modificable(como dijo desorden).

6
C/C++ / Re: Modificando Una Cadena
« en: Viernes 13 de Febrero de 2004, 04:50 »
En mi opinion la funcion esta correcta, la unica forma de generar un error en tiempo de ejecucion es pasarle un puntero no inicializado a la funcion modica.


#include <iostream>

using std::cout;
using std::endl;

char funcion(char c)
{
   return c+1;
}

void modifica(char* p)
{
   while(*p)
   {
      *p=funcion(*p);
      p++;
   }
}

int main()
{
   char* k,h[]="hola";
   cout<<h<<endl; //imprime 'hola'
   modifica(h);
   cout<<h<<endl; //imprime 'ipmb'
   modifica(k); //Error! k no es un puntero inicializado
}

7
Inteligencia Artificial / Sólo un comentario sobre la IA
« en: Jueves 20 de Noviembre de 2003, 20:07 »
Yo creo que se espera mucho de la AI en muy corto plazo. Pienso que el comportanmiento inteligente es una caracteristica emergente de sistemas complejos, como el cerebro humano... o sea la relacion de muchos sub-sistemas a los mejor "no tan inteligentes" logran que el cerebro en su conjunto sea "tan inteligente", todo esto a muchos estratos!. A lo que me refiero es que los esfuerzos deberian centrarse en lograr primero comportamientos como los de organismos inferiores, de ahi se debe avanzar hacia arriba... no creo que vivamos los suficiente como para poder tener una conversacion con un PC, falta mucho para eso aun.

8
C/C++ / Re: Random entre 0 y 1 con 5 decimales
« en: Lunes 17 de Noviembre de 2003, 18:00 »
no se si habra algo para generar numeros decimales aleatorios, pero podrias construir el decimal a raiz de dos enteros al azar, el primero que sea la parte entera y el segundo la decimal :good:

9
C/C++ / QT para windows!
« en: Domingo 16 de Noviembre de 2003, 05:17 »
Hola! Resulta que no quiero seguir dedicandole mi esfuerzo a winapi y MFC, me gustaria aprender a usar "bien" una libreria que me permitiera portar el codigo sin tanto esfuerzo a varios sistemas operativos... decidi dedicarme a QT, la tengo en linux, pero no me la he podido conseguir para windows... alguien me podria decir como conseguirla? no tengo como para comprarla!! Agradeceria muuuucho el dato :gracias:

10
C/C++ / Necesito saber como Reproducir un archivo Wav en c++(Modo DO
« en: Viernes 14 de Noviembre de 2003, 22:39 »
Quieres hacer un juego? Si estas empezando prueba con SDL, es una libreria facil. Yo hace poquito hice un tetris en eso y le coloque una musiquita de fondo.

Visita www.libsdl.org Te recomiendo que uses ademas SDL_mixer, es otra libreria que te permite reproducir sonido con SDL.

11
C/C++ / Re: NUMEROS ALEATORIOS EN GCC
« en: Viernes 14 de Noviembre de 2003, 19:05 »
Para generar numeros aleatorios primero llamas a srand() con algun parametro(entero sin signo). Segun ese parametro srand() genera una lista de numeros aleatorios que despues puedes ir rescatando con rand(). Para siempre generar una lista de numero distintos se le pasa como parametro la hora, para eso la funciona time(). Los numeros que se generan estan en el rango 0-RAND_MAX, asi que tienes que manejar un poco el numero aleatorio para obtenerlo en un rango, lo que hice yo fue aplicarle modulo al rango+1, y despues le sumo el minimo. Por ejemplo para obtener numeros entre 15 y 20 tomas un numero con rand(), le aplicas mod 6(20-15+1) y asi siempre obtienes 0,1,2,3,4 o 5, y le sumas 15. Como veras 15+0=15 y 15+5=20, el rango de numero:o

En C:
 
Código: Text
  1.  
  2. #include <stdlib.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. #define MIN 15
  7. #define MAX 20
  8. #define N 5
  9.  
  10. int main()
  11. {
  12.     int i;
  13.     srand((unsigned int)time(0));
  14.     for(i=0;i<N;i++)
  15.         printf("%dn",(rand()%(MAX-MIN+1))+MIN);
  16.     return 0;
  17. }
  18.  
  19.  


Si lo quieres en C+-:P
 
Código: Text
  1.  
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <ctime>
  5.  
  6. #define MIN 15
  7. #define MAX 20
  8. #define N 5
  9.  
  10. using namespace std;
  11.  
  12. int main()
  13. {
  14.     srand((unsigned int)time(0));
  15.     for(int i=0;i<N;i++)
  16.         cout<<(rand()%(MAX-MIN+1))+MIN<<endl;
  17.     return 0;
  18. }
  19.  
  20.  

12
C/C++ / Re: backtracking!!! :p
« en: Sábado 27 de Abril de 2002, 00:26 »
Reviza eso... yo todavia no lo capto bien, asi ke no te lo puedo explicar! :o

http://www.labmc.inf.utfsm.cl/ateo/bart ... track.html

13
C/C++ / Re: 45481
« en: Martes 23 de Abril de 2002, 23:24 »
Por lo ke entendi quieres pasar un numero a una cadena. El problema mayor que podrias tener es reservar un espacio de memoria suficiente para guardar la cadena, lo demas es trivial.

Si tu numero como maximo es mil basta con que hagas un array de 5 chars:

char array[5]; /*un elemento mas para el caracter nulo*/
array[5]='0'; /*con eso indicas fin de cadena*/

Luego haces una iteracion, en cada vuelta debes ir dividiendo el numero por 10 y colocando el resto de la division en array[4], arra[3], array[2] etc, la conversion de int a char es tirivial igual, solo necesitas un switch o un conjunto de if de la forma:

if (resto==4) char=='4';

Haces las condiciones para todos los numeros de 0 a 9, y eso es todo. Si kieres algo mas completo puedes hacer un puntero a char y reservarle memoria con malloc, asi puedes pasar cualkier numero sin importar su largo de digitos. Tambien podrias establecer una relacion entre el numero ascii de los digitos y los numeros, creo que el ascii del '0' es 48, entonces tomas el digito y le sumas 48 y lo guardas en el char y tendras el ascii correspondiente al digito, como los chars de 0 a  estan consecutivos en la tabla ascii funciona.

14
C/C++ / Re: Fichero > Puntero > Estructura
« en: Jueves 18 de Abril de 2002, 23:41 »
Yo tampoco entendi bien.... es que guardas la estructura entera en un archivo binario? si es asi tienes que leer la estructura con fread y luego leer el campo SEB y compararlo....

15
C/C++ / Re: AYUDA con PILAS en C++
« en: Jueves 18 de Abril de 2002, 23:33 »
:)

Kiuz... yo no programo en c++, o sea hago mis tareas en C no maz, acabo de hacer una tarea relacionada con pilas....

http://www.totex.cl/inf/estructura/20-2002-t2.c

Reviza elkodigo si keres y yo te puedo responder cualquir pregunta sobre el, y la implementacion de la pila por supuesto.

:D

16
C/C++ / Kiuz!
« en: Jueves 18 de Abril de 2002, 00:58 »
:o

No se porke salio aki esto! se suponia que era una respuesta a otro post :angry:

17
C/C++ / Re: Kiuz!
« en: Jueves 18 de Abril de 2002, 00:54 »
Hola loko... especifica mas tu pregunta si poh.... de todas formas para hacer una lista circulas tiene que implementar una estructura... ke sera el nodo de tu lista:

struct lista {
    int dato;
    struct lista* sig;
};
Por ejemplo ahi tienes la definicion de un nodo de lista para numeros enteros. Fijate en la declaracion autoreferencial del puntero, indica que apuntara a otro nodo del mismo tipo, struct lista.
Ahora lo unico que tienes que hacer para tener tu lista circular es crear nodo e irlos enlazando, y dejar siempre el ultimo apuntando al primero. Por supuesto deberas tener un puntero a tu primer nodo que te indica donde empieza tu lista. Puedes hacer una funcion que te cree nodos... lo fundamental es:

struct lista* nodo;
nodo=(struct lista*)malloc(sizeof(struct lista));

Con eso reservas espacion en la memoria para un nodo, si no hay sufuente memoria malloc te deja a nodo como puntero nulo. Es importante que captes bien como funcionan los castings con mallos, realloc etc, porke despues cuando uno trabaja con putero a punteros, o  tripes punteros y cosas asi se arman unos enredos en como hacer el casting, si es ke uno no lo tiene claro.

Cada vez que haces un nodo tienes que "insertarlo", o sea cambiar los punteros del ultimo nodo,  que apunten al nuevo nodo, y hacer que nodo->sig apunte a tu primer elemento que tienes que tener siempre en un puntero, si no pierdes la lista y se fuga memoria!!!

Esta implementacion de lista es muy rasca si, es mejor hacer listas con cabecera con punteros al primer y ultimo elemento, son mas eficientes.

Mira yo he hecho unas tareas, estudio ing civ informatica, las dejo en http://www.totex.cl/inf/estructura/ y http://www.totex.cl/inf/fundamentos/ .

No son cosas sofisticadas pero a ver si de algo te sirven, reviza el archivo lista.h, ahi hice hartas funciones para lista enlzada.

18
C/C++ / Re: tamaño de un array
« en: Miércoles 17 de Abril de 2002, 22:05 »
Los arrays son estaticos?

Ke pasa si hago un puntero a un bloque de memoria y despues reajusto el tamaño de ese bloque con realloc?  Eso se comporta igual que un array...  es un aray?

Respecto al tema del tamaño, la mejor forma al usar array dinamicos con realloc es usar sizeof como dice jpastor, si es un array estatico la pregunta no tiene mucho sentido.
Hay que acordarse se que esta el '' al final cuando usamos cadenas.... ese igual se contaria en el tamaño del array:P

19
C/C++ / Ayuda urgente con programa : como pasar palabas de una frase
« en: Miércoles 17 de Abril de 2002, 21:46 »
Poner una palabra dentor de una sola casilla????:o

A lo mejor tu keres separar las palabras de una string envarios arreglos, uno para cada palabra, y ahi compararlos.... pero poner una palabra en una sola casilla no creo que se pueda... a lo mejor hacer un arreglo con punteros a los demas arrelgos de cada palabra si... por ahi si

Páginas: [1]