elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1]
1  Foros Generales / Foro Libre / Re: ¿Alguien que sepa identificar tipos de piezas de ajedrez? en: 1 Enero 2017, 12:15 pm
No hay ninguna empresa que hagan las piezas con ese diseño y que sea el estandar, cualquiera puede tomar el diseño original y producir copias con ciertas variaciones.

No porque podria tomar trozos de madera y cortarlas con esas medidas pero el resultado no seria piezas Stauton.


Claro, es lo que dice 0xFer, las piezas estándar son esas pero hay muchos ajedrez que tienen distintas formas para cada pieza.

Un saludo.
2  Programación / Programación C/C++ / Compresión RLE Independiente en: 1 Enero 2017, 11:32 am
Buenos días.

Venía a ver si alguno me podría ayudar con un programa en C++ que tengo confuso. Me explico. El ejercicio consiste en hacer un programa de compresión RLE pero totalmente independiente, es decir, introduzcas caracteres o números, debe funcionar el método.

Es decir;

A A B B --> 2 A 2 B.
1 1 2 2 --> 2 1 2 2.

Tengo una clase RLE, que la dejo por aquí:
Código
  1. class RLE
  2. {
  3.  
  4. // La clase RLE no tiene campos.
  5. // Los objetos de la clase sieven para ejecutar los métodos "Codifica"
  6. // y "Descodifica" (esta implementación se diferencia muy poco de escribir
  7. // los dos métodos como funciones globales).
  8.  
  9. private:
  10.  
  11. public:
  12.  
  13. /***********************************************************************/
  14. // Codifica una secuencia de enteros según el código RLE y devuelve
  15. // otra secuencia de enteros codificada.
  16. //
  17. // Recibe: secuencia_descodificada, la secuencia que se va a codificar.
  18. // Devuelve: una nueva secuencia, resultado de codificar según RLE
  19. // la secuencia recibida "secuencia_descodificada".
  20.  
  21. SecuenciaEnteros Codifica (SecuenciaEnteros secuencia_descodificada)
  22. {
  23. // Secuencia resultado de la codificación
  24. SecuenciaEnteros secuencia_codificada;
  25.  
  26. int tope, actual, anterior, iguales_hasta_ahora;
  27.  
  28. // Registrar la longitud de la secuencia
  29. tope = secuencia_descodificada.TotalUtilizados();
  30.  
  31. // Guardar el primer valor de la secuencia
  32. actual = secuencia_descodificada.Elemento(0);
  33.  
  34. iguales_hasta_ahora = 1;
  35.  
  36. for (int pos=1; pos<tope; pos++) {
  37.  
  38. anterior = actual;
  39. actual = secuencia_descodificada.Elemento(pos);
  40.  
  41. if (anterior == actual)
  42.  
  43. iguales_hasta_ahora++; // Continua la serie
  44.  
  45. else {
  46.  
  47. // Añade la pareja (valor, num.repeticiones)
  48. secuencia_codificada.Aniade(iguales_hasta_ahora);
  49. secuencia_codificada.Aniade(anterior);
  50.  
  51. iguales_hasta_ahora = 1; // empezar una nueva serie
  52. }
  53. } // for (int pos=1; pos<tope; pos++)
  54.  
  55. // Añade la última pareja (valor, num.repeticiones)
  56. secuencia_codificada.Aniade(iguales_hasta_ahora);
  57. secuencia_codificada.Aniade(actual);
  58.  
  59. return (secuencia_codificada);
  60. }  
  61.  
  62. /***********************************************************************/
  63. // Descodifica una secuencia de enteros según el código RLE y devuelve
  64. // otra secuencia de enteros descodificada.
  65. //
  66. // Recibe: secuencia_codificada, la secuencia que se va a descodificar.
  67. // Devuelve: una nueva secuencia, resultado de descodificar según RLE
  68. // la secuencia recibida "secuencia_codificada".
  69.  
  70. SecuenciaEnteros Descodifica (SecuenciaEnteros secuencia_codificada)
  71. {
  72. // Secuencia resultado de la descodificación
  73.  
  74. SecuenciaEnteros secuencia_descodificada;
  75.  
  76. // Registrar el número de elementos de la secuencia codificada.
  77.  
  78. int tope = secuencia_codificada.TotalUtilizados();
  79.  
  80. // Ciclo que recorre la secuencia codificada.
  81. // La longitud de la secuencia es par (está formada por parejas) así
  82. // que el número de parejas es justo la mitad del número de elementos.
  83. // Observad que el salto se realiza de 2 en 2 porque en cada iteración
  84. // se procesa una pareja.
  85.  
  86. for (int pos=0; pos<tope; pos+=2) {
  87.  
  88. int num_repeticiones = secuencia_codificada.Elemento(pos);
  89. int valor = secuencia_codificada.Elemento(pos+1);
  90.  
  91. // Cada pareja es (num_repeticiones, valor). Se trata de escribir
  92. // "valor" en la secuencia descodificada "num_repeticiones" veces.  
  93.  
  94. for (int i=0; i<num_repeticiones; i++)
  95. secuencia_descodificada.Aniade(valor);
  96. }
  97.  
  98. return (secuencia_descodificada);
  99. }
  100.  
  101. /***********************************************************************/
  102.  
  103. };
  104.  


Esa implementación funciona perfectamente con números enteros, pero a la hora de tener que tener en cuenta que también pueden introducirse caracteres, me confunde. Se me ocurre hacer una clase SecuenciaParejas y la clase SecuenciaEnteros (ya implementada)

Código
  1. class SecuenciaEnteros
  2. {
  3.  
  4. private:
  5.  
  6. static const int TAMANIO = 200; // Número de casillas disponibles
  7.  
  8. int vector_privado[TAMANIO];
  9.  
  10. //PRE: 0 <= total_utilizados <= TAMANIO
  11. int total_utilizados; // Número de casillas ocupadas
  12.  
  13. public:
  14.  
  15. /***********************************************************************/
  16. // Constructor sin argumentos
  17.  
  18. SecuenciaEnteros() : total_utilizados(0) {}
  19.  
  20. /***********************************************************************/
  21. // Métodos de lectura (Get) de los datos individuales
  22.  
  23. // Devuelve el número de casillas ocupadas
  24. int TotalUtilizados (void)
  25. {
  26. return (total_utilizados);
  27. }
  28.  
  29. // Devuelve el número de casillas disponibles
  30. int Capacidad (void)
  31. {
  32. return (TAMANIO);
  33. }
  34.  
  35. /***********************************************************************/
  36. // Añade un elemento al vector.
  37. // Recibe: nuevo, el elemento que se va a añadir.
  38. //
  39. // PRE: total_utilizados < TAMANIO
  40. // La adición se realiza si hay espacio para el nuevo elemento.
  41. // El nuevo elemento se coloca al final del vector.
  42. // Si no hay espacio, no se hace nada.
  43.  
  44. void Aniade (int nuevo)
  45. {
  46. if (total_utilizados < TAMANIO) {
  47. vector_privado[total_utilizados] = nuevo;
  48. total_utilizados++;
  49. }
  50. }
  51.  
  52. /***********************************************************************/
  53. // Devuelve el elemento de la casilla "indice"
  54. //
  55. // PRE: 0 <= indice < total_utilizados
  56.  
  57. int Elemento (int indice)
  58. {
  59. return vector_privado[indice];
  60. }
  61.  
  62. /***********************************************************************/
  63. // Calcula si dos objetos son iguales: serán iguales si contienen el
  64. // mismo número de elementos, son iguales uno a uno y están en el mismo
  65. // orden.
  66. //
  67. // Recibe: otro, la secuencia con la que se compara el objeto implícito.
  68. // Devuelve: true, si las dos secuencias son iguales; false, en otro caso.
  69.  
  70. bool EsIgualA (SecuenciaEnteros otro)
  71. {
  72. bool son_iguales;
  73.  
  74. if (total_utilizados == otro.total_utilizados) {
  75.  
  76. son_iguales = true;
  77.  
  78. int pos = 0;
  79. bool sigo_comparando = true;
  80.  
  81. // Mientras queden por comparar y sigan siendo iguales
  82.  
  83. while ((pos<total_utilizados) && (sigo_comparando)) {
  84.  
  85. if (vector_privado[pos] == otro.vector_privado[pos]) {
  86. pos++;
  87. }
  88. else {
  89. sigo_comparando = false;
  90. son_iguales = false;
  91. }
  92.  
  93. } // while (sigo_comparando)
  94.  
  95. }
  96. else son_iguales = false; // tienen distinto tamaño
  97.  
  98. return (son_iguales);
  99. }
  100.  
  101. /***********************************************************************/
  102. };
  103.  
  104. /////////////////////////////////////////////////////////////////////////////
  105.  


Una vez teniendo SecuenciaEnteros y SecuenciaParejas, a la hora de que el usuario vaya a introducir los valores, hacer un if para comprobar si está metiendo letras o números.


¿Alguna ayuda?

¡Gracias!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines