|
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 - Amilius
Páginas: 1 ... 3 4 [5] 6 7 ... 27
101
« en: Lunes 28 de Enero de 2008, 22:07 »
¿Intentaste con "clean solution" antes de recompilar?
102
« en: Lunes 21 de Enero de 2008, 19:46 »
Asi no vas a encontrar nada, tienes que separar la complejidad: Pues al final sería lo mismo que te dijo Mollense, sólo que en lugar de usar un array usas un código para manejar lista enlazadas, que ejemplos hay a montones. Y si quieres más velocidad pues usas unas tablas hash con punteros a los elementos: o puedes tener una tabla hash usando las filas o las columnas o divides el array en sectores, bueno lo que veas más conveniente. Al final todo se reduce a ¿cuanta velocidad quieres sacrificar para ahorrar memoria?.
103
« en: Domingo 20 de Enero de 2008, 21:13 »
Puedes usar programación OO, estructurada, etc. Incluso existen lenguajes creados específicamente para IA. En mi caso personal el catedrático dejó a elección libre el lenguaje a utilizar para implementar las prácticas. Yo utilicé Delphi, otros C++ y creo que alguno Java. Es bueno si tienes conocimientos de estructuras de datos básicas como listas, árboles, etc. para no tener trabas al momento de implementar las prácticas. Un punto importante para aplicaciones de IA es que tienes que aprender a mantener siempre separada la complejidad del código de la complejidad de la información que estás manejando. También es bueno evitar el código "hard coded", hazlo tan flexible como te sea posible. Claro que hacer esto es más fácil si tienes buena base en conceptos de programación OO y sabes aprovecharlos para dar a tu código la flexibilidad que sea necesaria. Si ahora tuviera que elegir un lenguaje para realizar esas prácticas elegiría C# (OJO: la versión que soporta visual studio 2005). Puedes leer esto a manera de introducción. http://www.monografias.com/trabajos16/inte...rtificial.shtml
104
« en: Viernes 18 de Enero de 2008, 15:14 »
Una forma es asignar un caracter único a cada barco de cada tamaño, de forma que puedas identificar cada una de sus partes al recorrer la matriz para verificar si fue hundido.
Otra forma es almacenar en listas las coordenadas de cada parte del barco y el estado actual de cada parte del barco.
105
« en: Lunes 14 de Enero de 2008, 19:16 »
¿cómo obtengo el mapa de bits a partir del objeto panel donde realice los dibujos? No puedes por que esos elementos se dibujaron en una zona de memoria que no es propiedad del objeto panel. De hecho el objeto panel carece de la propiedad de un bitmap para dibujar su contenido, es decir que su contenido se dibuja directamente en la pantalla que se presenta al usuario, si mueves una ventana encima de tu panel y luego la quitas de encima verás que borrará lo que dibujaste. Por esa misma razón si quieres aumentar algún gráfico a tu control tienes que dibujarlo respondiendo al evento Paint. Por eso es que tienes que crear un bitmap que nada tiene que ver con el objeto Panel y en el evento Paint, o cuando sea necesario, dibujar el bitmap en el panel u otro control donde desees dibujarlo. El objeto Graphics tampoco tiene un bitmap para dibujar. En realidad lo que contiene son instrumentos para dibujar, pero no un bitmap que pueda almacenar lo que dibujaste. Por lo mismo puedes crear un objeto Graphics usando un método estático que te pedira un objeto Bitmap. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace WindowsApplicationTest00 { public partial class Form1 : Form { public Form1() { InitializeComponent(); B = new Bitmap(panel1.Width, panel1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); G = Graphics.FromImage(B); //Como dibujar en el Bitmap de trabajo G.SmoothingMode = SmoothingMode.HighQuality; G.Clear(Color.White); Bs = (Bitmap)(B.Clone()); Gs = Graphics.FromImage(Bs); //Como dibujar en el Bitmap de almacenamiento (HighSpeed por que sólo guardamos resultados) Gs.SmoothingMode = SmoothingMode.HighSpeed; R = new Random(); } private Bitmap B, Bs = null; private Graphics G, Gs; private System.Random R; private void buttonClear_Click(object sender, EventArgs e) { G.Clear(Color.White); //Indicar al S.O. que el contenido gráfico del panel necesita ser refrescado panel1.Invalidate(); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Gs.Dispose(); G.Dispose(); Bs.Dispose(); B.Dispose(); } private void buttonDraw_Click(object sender, EventArgs e) { const int MAX = 20; for (int i = 0; i <= MAX; i++) { G.DrawLine(new Pen(Color.FromArgb(R.Next(256), R.Next(256), R.Next(256))), R.Next(B.Width), R.Next(B.Height), R.Next(B.Width), R.Next(B.Height)); } panel1.Invalidate(); } private void buttonSave_Click(object sender, EventArgs e) { //Para este caso en particular sería mejor un BitBlt usando la opción //de copia simple. // http://msdn2.microsoft.com/en-us/library/ms532278(VS.85).aspx //Es probable que usando DrawImage junto con Gs.SmoothingMode = SmoothingMode.HighSpeed; //se obtenga el mismo resultado (copia simple sin efectos ni transformaciones). Gs.DrawImage(B, 0, 0); } private void buttonRestore_Click(object sender, EventArgs e) { G.DrawImage(Bs, 0, 0); panel1.Invalidate(); } private void panel1_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.HighSpeed; e.Graphics.DrawImage(B, 0, 0); } } }
106
« en: Sábado 12 de Enero de 2008, 04:33 »
Tomando en cuenta que tratamos solo con enteros positivos, lo de dividir por dos es buena idea, además existe el operador de desplazamiento a izquierda que permite dividir entre potencias de 2 siempre que X sea entero positivo: Por ejemplo X shl 1 equivale a X div 2. Pero también sería suficiente esta función: Bits:=Trunc( log2((Numero shl 1)+1) ); No recuerdo si en pascal estándar tienes el logaritmo en base 2, pero si tienes ln puedes obtener el log2 con esta ecuación: log2(x)=(ln(x)/ln(2)) O también: BitsNecesarios:=0; While (Numero>0) do begin Numero:=Numero shr 1;{Dividir entre dos} Inc(BitsNecesarios);{incrementar en 1} end; result:=BitsNecesarios;
107
« en: Jueves 10 de Enero de 2008, 23:16 »
Primero que los controles generalmente se dibujan directamente en pantalla, sin tener memoria propia para almacenar lo que dibujaste en ellos. Ademas lo que estás guardando y restaurando es el "HDC" (Encapsulado en la clase Graphics) y no el "BITMAP" (Encapsulado en la clase Bitmap y es descendiente de la clase Image), es como si guardaras y restauraras el estado de todas las herramientas de dibujo de un pintor, menos el cuadro que estaba pintando.
Es mejor utilizar un bitmap que almacene lo dibujado. Asi en lugar de "guardar" y "restaurar" tendrías que dibujar el bitmap en el panel y para guardar sólo dibujarias el actual en otro que te sirva para almacenar el estado guardado, o bien guardarlo en disco.
Otra cosa, no tienes que llamar a cada rato a: "CreateGraphics()", sólo una vez y guardar la referencia en un miembro privado. Al cerrar el formulario deberías llamar a Dispose(). Tienes que crear un objeto Graphics para el bitmap y otro para el control donde quieres dibujar, en este caso el panel. Ojo que los objetos Graphics no se crean con new, sino llamando a un método estático de Graphics "Graphics.FromImage(miBitmap)" o en el caso de los controles llamando al método que estas usando "CreateGraphics()".
Quedaria asi: 1. Un Bitmap con el estado actual 2. Otro Bitmap para el estado "guardado"
Siempre dibujas en el bitmap "estado actual" Borras haciendo clear del bitmap "estado actual" Dibujas el bitmap actual en el control que desees usando el evento Paint. Para guardar simplemente dibujas el bitmap actual en el bitmap "guardado".
Una nota más, dependiendo de cómo estén implementados los métodos que dibujan en el bitmap será conveniente usar un bitmap DIB o no. DIB = Device independent bitmap que es un bitmap que se aloja en RAM. Es mejor usar un bitmap DIB si es el procesador central el que dibuja, en cambio si el dibujo lo hace la tarjeta aceleradora es mejor utilizar un bitmap alojado en memoria de tarjeta de video, es decir bitmap dependiende del dispositivo gráfico. Pero en este caso en especial, como no sólo te interesa mostrar un gráfico en pantalla, sino guardar cambios en ese gráfico es mejor que uses un bitmap DIB a 24 bits por pixel para evitar perder información si el usuario cambia de una menor profundidad de color a una mayor.
108
« en: Lunes 10 de Septiembre de 2007, 17:18 »
tamaño = ((bits + 7)/8) * ancho * alto; Recomiendo que busques una mejor, por que me a dado problemas para mapas de 24 bits. Hola, Los problemas seguramente son por que el tamaño en bytes de las filas esta alineado a 32 bits: Asi que quedaria mejor: biSizeImage = (biBitCount * biWidth + 31) / 32 * biHeight;
109
« en: Viernes 17 de Agosto de 2007, 01:59 »
Seguramente lo ejecutaste desde el servidor, sin copiar la aplicación a tu máquina local.
110
« en: Viernes 8 de Junio de 2007, 23:45 »
Che, estoy haciendo un programa para manejo de analizis que me pidio un bioquimico, algo bastante sencillo, que se yo. El tema es que me gustaria saber cuales son los cuidados que tengo que tomar para asegurarme que va a andar en cualquier maquina que lo utilizen. Yo tengo un p4 con 1gb de ram y los programas que he hecho hasta ahora me funcionan bien, pero son programas con un monton de detalles agregados para que funcione bien. Digo, es necesario retocar el codigo en la maquina que lo vaya a correr o no. Lo primero es listar todos los prerequisitos que exige la instalación de tu programa, esto por cada dependecia externa que tenga, por ejemplo un motor de base de datos, alguna dll en particular, algun servicio que tenga que estar instalado y corriendo, etc. Una ventaja de correr el programa en maquina virtual con una instalación "fresca" (a la que no hayas agregado nada más) es saber si tu programa necesita que se instale alguna dependencia adicional.
111
« en: Jueves 31 de Mayo de 2007, 00:09 »
Es simple. En informática, a diferencia de las matemáticas 100% teóricas, tienes que considerar también que existen límites de rango y de precision. En este caso el tipo entero que usas es de 16 bits con signo (integer), por lo tanto no puede representar un valor mayor a 32767, luego como 8! es mayor al limite anterior tu programa no funcionará a menos que utilices un tipo de dato aplicable al problema que tenga mayor capacidad, por ejemplo un tipo de numero flotante como double.
Nota: Dependiendo del compilador el tipo integer puede ser de 16 o 32 bits, en este caso claramente es de 16bits.
112
« en: Jueves 31 de Mayo de 2007, 00:00 »
Me han dicho que todos los ejercicios de listas son practicamente iguales,vamos que siguen los mismos pasos, es verdad? Es que ando un poco liada....Gracias. Si son el mismo tipo de listas y no existen restricciones especiales sobre la forma que deben implementarse... seguramente podrás "reusar" algún código. Lo que seguramente no te funcionará directamente es mezclar código de uno con otro.
113
« en: Domingo 27 de Mayo de 2007, 04:11 »
Seria bueno que indiques en que archivo y linea da el error.
114
« en: Martes 22 de Mayo de 2007, 06:33 »
Queria saber si alguien tendra un programa que manipule matrices, que obtenga la traspuesta, la inversa y las operaciones basicas en C#, por fa necesito el programa, de antemano gracias. Pero seguro hay un open source, con genéricos "<T>" bastaría una clase que maneje complejos y otra que maneje matrices de tipos genéricos.
115
« en: Jueves 17 de Mayo de 2007, 21:34 »
El único paradigma que tiene futuro es el que te permita conseguir un buen trabajo. Además el algoritmo es más potente que la ecuación. Dicho de otra forma la programación contiene dentro de sí a la matemática, pero no a la inversa. Es por esto que hasta ahora no es posible utilizar un lenguaje funcional puro al 100% (Que no necesite de "ayuda" de x o z biblioteca) para desarrollar por ejemplo un sistema operativo. Y si algún día lo logran será a costa de sacrificar la "pureza" de la programación funcional agregandole lo que sea necesario para convertirla en una herramienta realmente de propósito general. Coincido que la programación es también arte.
116
« en: Jueves 10 de Mayo de 2007, 21:12 »
Lo más directo es buscar algún código open source para abrir archivos BMP. En si el formato de un archivo BMP es relativamente bastante sencillo y conocido, asi que no deberías tener problemas en buscar el codigo. Tal vez aqui puedas encontrar lo que necesitas: http://www.thefreecountry.com/sourcecode/pascal.shtml
117
« en: Jueves 26 de Abril de 2007, 21:19 »
Lo que te recomiendo es que busques primero un buen ejemplo de como usar sockets en C#, por ejemplo un programa simple de chat. Lo importante es que el ejemplo contemple manejo de errores, excepciones, etc.
118
« en: Miércoles 25 de Abril de 2007, 22:01 »
En todo caso es mejor que profundices tus conocimientos en c# para ver si con eso puedes hacer algo por tu programa y si aún así no encuentras lo que esta afectando el rendimiento es mejor que repienses tu programa. Ahora si consideras que tus conocimientos en ensamblador te permitirán obtener mejores resultados, pues podrías crear un dll usando ensamblador y luego llamar sus funciones desde tu programa en c#.
119
« en: Viernes 20 de Abril de 2007, 23:57 »
Pero... tienes algo en contra de usar los operadores <<, >> ???
120
« en: Lunes 9 de Abril de 2007, 19:38 »
¿Seguro que es el data reader?
Es mejor agregar varios "Console.WriteLine();" para ir escribiendo a manera de log todas las operaciones paso a paso para saber lo que esta pasando, especialmente si por alguna razón no es cómodo utilizar el debug. Si tu aplicación no está en modo consola ejecuta a la aplicación de esta forma: "miaplicacion.exe > log.txt" para que todo lo que pusiste en los Console.Write sea escrito en el archivo de texto.
121
« en: Jueves 15 de Febrero de 2007, 22:48 »
Que no esten documentadas no significa que hagan lo mismo que otras pero mas lento. Por lo tanto sigo esperando UN ejemplo de dos funciones, una no documentada y otra que si, en el cual una de las mismas sea mas rapida. Existe un caso donde podría ser un poco más rápido llamar a la funcion "directa": Si sabes que en determinado estado del sistema puedes llamar directamente a la función "x", la "directa no documentada" por que sabes que no ocurrirá nada anormal. Por que generalmente una función que será de uso público pues tiene que tener una buena protección para evitar que haga alguna barbaridad por que recibió datos que no estaban en el estado esperado.... o peor por que la máquina no estaba en el estado esperado. Eso implica muchas validaciones de estado, control de errores, etc. Lo cual inevitablemente tendrá algún impacto en rendimiento pero es necesario para garantizar que la función no haga algún destrozo. Pero al mismo tiempo recurrir a esos "atajos" puede convertirse en un criadero de bugs si no conoces, si no tienes toda la documentacion de lo que puede pasar si pasas por alto las "protecciones" de la función documentada y usas el "atajo". Para mi en lo personal si microsoft hiciera o por lo menos debiera hacer algo sin "fallar" o "más rápido" es por que debería tener a mano mayor documentación y más detallada (me refiero a todo lo "malo" que puede pasar si ocurre x condición o lo haces de z forma) para no hacerlo de la forma que se supone que no se debería hacer...
122
« en: Martes 13 de Febrero de 2007, 21:57 »
Puede que necesites definir un texto para el "tool tip", si esta en blanco hay problemas y si cambias el tool tip tienes que cargar el icono nuevamente.
123
« en: Martes 6 de Febrero de 2007, 19:47 »
Aqui esta el primer error:
q:=p;
q hace referencia a un pedazo de memoria que reservaste, pero como le asignas otro valor simplemente ya no podrás liberar ese fragmento de memoria por que ninguna otra variable tiene almacenada dicha información.
Por lo tanto el segundo error es:
dispose(q);
Por querer liberar una zona de memoria que ya liberaste puesto que q apunta a la misma zona de memoria que acabaste de liberar con dispose(p);
Si quieres que funcione sin remover "q:=p;" tienes que quitar: new(q); y dispose(q);
124
« en: Lunes 29 de Enero de 2007, 17:04 »
Hola! Este fin de semana publiqué el código fuente de Artes Arcanas en Source Forge. Actualmente está publicado el código del Servidor de juego, el cliente y el editor de mapas. Artes Arcanas es un juego de rol multiusuario ambientado en un mundo mitológico/feudal. Están implementados el sistema de combate, magia, construcción de artefactos, extracción de recursos, clanes, conquista de castillos, comercio con pnjs, grupos de combate, etc. El juego MMORPG está programado en Delphi3 client/server y podrán compilarlo directamente sin instalar ningún componente adicional. Para bajar el código fuente: http://sourceforge.net/projects/artes-arcanasPara bajar los gráficos y sonidos: (Los gráficos son esenciales para correr el cliente y el editor de mapas) http://groups.msn.com/legadodelasartesarcanas
125
« en: Domingo 7 de Enero de 2007, 17:50 »
Si sabes como escribir una linea de texto a la vez lo más simple sería que uses una lista de cadenas a manera de buffer. Cuando todo esté listo simplemente escribes en secuencia la lista de cadenas en el archivo.
Páginas: 1 ... 3 4 [5] 6 7 ... 27
|
|
|