|
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 - rfog
151
« en: Miércoles 17 de Septiembre de 2008, 13:36 »
Todo correcto, pero este no es precisamente un foro sobre ajedrez...
152
« en: Martes 16 de Septiembre de 2008, 15:25 »
Si adaptas tu codigo a lo que pareciera los mas razonable (si te sacan el rey el juego termina), entonces la ultima pieza que te puede quedar, es necesariamente el rey como dijo moskito. ¿Y si lo que quiere es validar si realmente la partida ha sido correcta? Ten en cuenta que lo más seguro se trata de un ejercicio sintético. Sinceramente pienso que no es una enunciación de lo más correcta, pero ya sabemos de qué pie cojean los profes... Los que nos ganamos la vida programando vemos esos ejercicios como artificiales, pero por algún lado han de empezar los aprendices.
153
« en: Martes 16 de Septiembre de 2008, 12:31 »
Pues si lo que quieres es, a partir de la lista de jugadas, saber qué piezas quedan en el tablero, ve reconstruyendo los movimientos o mejor, hazte una lista con las piezas de cada jugador, recorre los movimientos y cuando veas una captura, eliminas la pieza capturada.
154
« en: Martes 16 de Septiembre de 2008, 12:04 »
Os complicáis la vida... ¿Por qué no empiezas por el bit más alto y lo haces al revés? Un saludo. Entonces tendría que invertir la cadena resultante, o empezar en la posición correcta, lo que en principio no es trivial. La solución óptima es lo que ya dije: trabajar con cadenas de caracteres o en BCD o bien pasar el número decimal a una cadena en hexadecimal y luego traducir directamente los nibbles a binario. Así tendrá el número decimal convertido a hex y a binario a la vez. También vale en octal.
155
« en: Martes 16 de Septiembre de 2008, 10:51 »
¿por que pones 14 en el bucle? En principio, ese número debe ser tan largo como el mayor número binario que puedas crear (así como el tamaño del array contenedor).
Quitar los ceros de la derecha no es una tarea trivial si quieres hacerlo a la vez que generas el número, pero si no te importa hacerlo después puedes crear un nuevo array de caracteres y copiarlo pero sin ceros. Algo así: ten un índice inicalizado a cero y nuevo array. Entra en un bucle sobre el array viejo empezando por la izquierda y ve saltando hasta que encuentres el primer uno. Cuando llegues a él, copia el resto del array en el nuevo.
NOTA: Existen funciones en la RTL para hacer esas cosas, como strchr, strrchr, strcpy, strncpy etc, pero como parece ser que la cosa va de copiar arrays etc, lo mejor es que lo hagas tu a mano.
156
« en: Lunes 15 de Septiembre de 2008, 23:26 »
Es fácil. Lo lees como una cadena de caracteres. Una cadena de caracteres es un array de la forma (por ejemplo) char cad[20]; Como es un array, puedes recorrerlo elemento a elemento: int numero=0; int valorIntermedio; for(int i=0;i<20;i++) { valorIntermedio=cad[i]-'0'; numero=+valorIntermedio*pow(10,i); }
La primera línea del bucle te convierte un caracter ASCII en un número, ya que al restarle el valor '0' se queda en el número, ya que '0', '1', '2', '3' son números consecutivos dentro del ASCII. En la segunda línea pow(10,i) obtiene 10 elevado a i, que se multiplica por valorIntermedio. Si valorIntermedio es 0, el resultado es 0, pero si es 1, el resultado será 1*10^i, que es la forma de convertir un dígito binario en decimal por posición .
157
« en: Lunes 15 de Septiembre de 2008, 22:40 »
A ver, no estoy siguiendo el hilo por completo, pero la mejor forma de hacer todo lo que quieres es trabajar con cadenas. Es decir, cuando tu preguntes por un número binario, acepta una cadena que sólo tenga unos y ceros. Luego esa cadena la puedes convertir al tipo adecuado mediante las funcionoes de C y C++ como atoi (ASCII to Integer), etc.
Lo mismo cuando sean otros números en otras bases. Cuando tengas la cadena, la recorres a ver si contiene dígitos válidos (por ejemplo, no aceptar nada mayor a 7 cuando pidas una cadena en octal, etc).
Y si tienes ganas, defines un formato, por ejemplo: "101001b2" sería un número en base 2, "877AF3b16" en hexadecimal, etc. E incluso podrías adelantarte y hacer un parser matemático completo. Por ejemplo: "toDec(10100b2)". y cosas así.
158
« en: Lunes 15 de Septiembre de 2008, 21:00 »
A ver, tienes al menos dos errores:
El primero está aquí:
while(reng!=col||reng>6);
Ahí no estás haciendo nada por el punto y coma final, que es lo que hará el while. Pero como reng es menor que 6, ni siquiera hace un bucle. Y tampoco sé para qué haces ese bucle, la verda.
El segundo es que, efectivamente, no inicializas ni n ni m, es decir, n y m valdrá lo que quiera que haya en la posición de memoria que representan.
for(i=0;i<n;i++) for(j=0;j<m;j++) { if(i==j) aux+=mat[j]; }
Date cuenta que en lugar de n y m deberían estar col y reng, que son las variables que tomas del tamaño de la matriz, o bien deberías asignar m y n a col y reng o viceversa.
159
« en: Lunes 15 de Septiembre de 2008, 20:41 »
Supongo que habrás puesto a cero aux, porque en C++ las variables locales no se inicializan de forma automática... y que controlas que M y N valgan el valor que has introducido por teclado y no estés sumando la matriz de 5x5 haya lo que haya en donde no has introducido números.
160
« en: Miércoles 10 de Septiembre de 2008, 11:55 »
A ver, lo primero de todo, ¿en qué estás trabajando? ¿C++ o C#? Porque la forma en que preguntas tiene toda la pinta de estar haciéndolo en C#. Además, la pregunta que has hecho en los foros del Guille también lo dice así. Si es en C#, la respuesta correcta está en la clase String del .NET. La solución podría ser similar a esta: txtbox4.Text=txtbox1.Text.Trim()+txtbox2.Text.Trim()+txtbox3.Text.Trim();
Si estás hablando de C++/CLI (el C++ del .NET), la respuesta sería: txtbox4->Text=txtbox1->Text->Trim()+txtbox2->Text->Trim()+txtbox3->Text->Trim();
Y si finalmente lo estás haciendo en C++ puro y duro, la respuesta es demasiado larga para como escribirla de memoria, pero tienes que enviar un mensaje a cada uno de los campos de edición para que te devuelvan el texto contenido, y luego concatenar los tres textos enviándolos de nuevo al nuevo campo de edición mediante un nuevo mensaje (WM_GETTEXT y WM_SETTEXT). Y finalmente, si lo estás haciendo en C++ con MFC, la solución, suponiendo que txtbox fueran variables DDX, CString s,cadena; txtbox1.GetWindowText(s); cadena=s.Trim(); txtbox2.GetWindowText(s); cadena=cadena+s.Trim(); txtbox3.GetWindowText(s); cadena=cadena+s.Trim(); txtbox4.SetWindowText(cadena);
161
« en: Sábado 30 de Agosto de 2008, 10:46 »
También se os olivdó
scanf("%i",&a,b);
que debería ser
scanf("%i %i",&a,&b);
para que coja DOS enteros.
PS: Je, je, qué curioso, desde que aprendí C no he vuelto a usar esa función. :-)
162
« en: Jueves 28 de Agosto de 2008, 21:51 »
Ojito, el Instant C++ ese no te pasa de C# a C++, sino a C++/CLI, que es otro lenguaje más de la plataforma .NET (es decir, como C++/CLI no tiene punteros, etc).
La ventaja del C++/CLI sobre otros lenguajes .NET es la destrucción determinista, el interop IJW y la posibilidad de mezclar código en C++ con C++/CLI.
Te pondría algunos enlaces, pero como todavía no puedo ponerlos por ser novato aquí, así se queda la cosa. Si quieres ver algo sobre C++/CLI busca en Google RFOG (que soy yo) y la palabra C++/CLI. En castellano, que yo sepa, sólo está lo que yo he escrito sobre el tema.
163
« en: Jueves 21 de Agosto de 2008, 10:41 »
Okis, gracias.
:-)
164
« en: Miércoles 20 de Agosto de 2008, 11:02 »
Hola a todos. Pues eso, que he intentado añadir la firma que suelo poner en todos mis mensajes de correo pero me dice que no estoy autorizado. En la FAQ no dice nada sobre ello, pero supongo que existen una reglas no escritas para alcanzar el nivel o los requisitos para poner una firma... ¿Me informa alguien de esto?
165
« en: Miércoles 20 de Agosto de 2008, 10:48 »
Chuidiang, la solución de asignarlo en un bloque no es tan "chapuza" como te imaginas. Ciertamente no es la más didáctica ni la más correcta en cuanto a estilo (y posiblemente sea más lenta que el acceso con doble índice -todo dependerá de cómo trate el compilador a ese "fila*20" o incluso de qué valor sea el multiplicador-), pero a veces es la mejor.
¿Por qué? Pues para evitar la fragmentación del montículo local, y para forzar tener cada subarray de forma contigua (quizás porque luego nos interese pasarlo como un puntero a algún lado).
El tema más delicado sería el de la fragmentación del montículo. Imagina que empiezas a asignar y liberar memoria de forma indiscriminada sobre ese (y otros arrays). Y luego supón un programa con múltiples hilos asignando y liberando memoria sobre dicho montículo. Terminarías con un montículo bien fragmentado en el que la asignación de memoria sería cada vez más lenta e ineficiente... Y eso sin entrar en el tema del tamaño de página de Windows (o Linux), etc.
|
|
|