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 - Serapis

#1781
Programación C/C++ / Re: Analisador Lexico
25 Marzo 2019, 15:12 PM
Un analizador léxico conviene que sea específico a la gramática que deba escanear.
Considera sin embargo, que antes de poder utilizar ningún analizador léxico, primero debes definir la gramática de tu lenguaje. ¿Ya lo tienes?.

Siempre se puede programar uno genérico, pero seguramente adolecerá de falta de rendimiento o incluso ser incompatible si las reglas de tu gramática difieren sustancialmente de lo habitual...

Expón tus avances y tus dudas...

De todos modos, puede consultar el código para Lex (que es un analizador universal bastante óptimo):
http://bxr.su/OpenBSD/usr.bin/lex/
En github:
https://github.com/westes/flex/releases

#1782
El asistente de Office, pudo llegar a ser una buena forma de ayuda interactiva, pero nunca apostaron por llevarlo más allá. No resultaba difícl programar uno, para hacer cosas simples, pero cuando querías hacer algo más complejo, no tenía suficiente apoyo... Lo cierto es que una ayuda interactiva animada (que no humanizada en forma d epersonaje), considero que es la forma más útil de ayudar a un usuario a dominar (sin tener que leerse manuales tochos), la interfaz de usuario que tiene entre manos.

Una molestia era su aparición inoportuna, debiera el usuario poder decidir cuando debería aparecer y cuando no. Esta característica omitida, es lo que se granjeó el odio de muchos...
#1783
Es un algoritmo relativamente sencillo de programar.
Se compone de dos partes:
- En la primera hay dos bucles anidados para rellenar la matriz (bidimensional) cuyo contenido se puede expresar como para cada nodo, la distancia desde dicho nodo a todos los otros (la distancia de un nodo a sí mismo, obviamente siempre será 0). Esta parte viene dado por los pesos de las aristas que unen dos nodos, luego según como se proporcione el origen de datos puedes venir prácticamente sin cambios de origen. Básicamente es una adaptación de los datos de entrada sobre un array bidimensional.

- En la segunda se utiliza dicha matriz en 3 bucles anidados. Los 2 primeros son un recorrido completo, en el 3 se trata de localizar el par menor que es el que se asigna. es decir siempre que se encuentra uno menor, se asigna... ahora la distancia a batir es la recién asignada (similar a la ordenación de burbuja que cuando encuentras uno menor, luego hay que seguir buscando uno menor que el ahora hallado menor).

Ahora para terminar de entenderlo toma lápiz y papel, situa 3 o 4 puntos, dales indices desde 0 a n-1... traza líneas de uno a otro, marca un valor de distancia en cada línea (no importa si es exacta o sini es aproximada, pero ayuda a entenderlo visualmente si dichos valores son aproximados).
Supongamos que tienes 4 puntos 0,1,2 y 3 de 2 a 3 la distancia es 25, el algoritmo, trata de verificar si existe una distancia más corta que 25 para llegar del punto 2 al 3, y cual es esa distancia, que es la que finalmente constará. Natualmente el algoritmo  es para todos los pares de puntos (no solo para uno), pero si primero tratas de generar un algoritmo para dados 1 par de puntos encontrar un acceso entre ellos con una distancia más corta que la directa entre ellos, el siguiente paso es añadir un bucle que envuelva a este para hacer lo mismo pero con cada par de puntos, no solo con un par.

Con esta aclaración y lo anterior debiera serte sencillo generar el algoritmo, es trivial, basta un poco de lógica...
#1784
Pués entonces el Sr. Zapatero, se puede juntar con Iglesias, el 'líder' del partido 'Podemos'... que criticó duramente a un político de derechas (después de toda una vida de trabajo) por adquirir una vivienda al precio de 600.000 euros, y apenas 2 años después, el propio Iglesias también adquiere un chalet de 600.000 euros (cuando él apenas, ha empezado a trabajar)...

En fin, como dice la Biblia: "Por sus hechos los conocereis" ...porque por sus dichos, parecen santos capaces de arreglar cualquier problema...

p.d.:
...pero nos vamos por la ramas.
¿A qué ha ido esta vez 'zarpa de acero' a Venezuela????
#1785
CitarLo que ocurre es que luego de golpear las bolas, éstas se dispersan en lo que debería ser una forma fortuita, de acuerdo con las leyes de la física. Sin embargo, los investigadores lograron hacer que adquirieran su orden original utilizando una computadora cuántica especial.
Es decir, si después de producirse un desorden aleatorio, yo (o cualquiera) logra disponerlas de neuvo en el orden previo... ¿es  volver al pasado?... pués no, eso en todo caso se llama volver a un mismo estado que en el que estuvo en el pasado.

Un ejemplo más sencillo... imaginemos cuando fuimos al cine hace 10, 20, 30 40... años (cada cual según su edad), si en el cine había (pongamos de ejemplo) 100 personas, si hoy decidimos ir al cine los mismos y nos sentamos en el mismo sito y ponemos la misma peli... ¿habremos vuelto el tiempo atrás... o solo habremos recordado un tiempo pasado y simularlo...  ?
#1786
Java / Re: Lista Enlazada
20 Marzo 2019, 12:44 PM
Lo Idela es añadir una función que reclame eliminar el enésimo ítem. También es válido que haya sendas funciones para eliminar el último y/o el primero.

Considera una lista (doblemente) enlazada como los eslabones de una cadena. eliminar un eslabón supone disgregarlo de sus ataduras (anterior y posterior), pero admeás para no fastidiar la cadena  y que  queden suelta en dos partes, deben unirse  sus extremos  nuevamente...
Nótese que anes de soltar el eslabón se usa su 'conocimiento', para conectar sus extremos entre si.

Las operaciones pués son:


funcion Eliminar(entero index)
    nodo = Buscarnodo(index)  // 0 si es el primero, -1 si es el último
   
    //Atar el previo con el siguiente (si no es el primero)
    Si (index <> 0)
        // y si no es también el último (esto es si solo hay 1 quedaría vacía)
        Si (cantidad >1)
            nodo.anterior.siguiente  = nodo.siguiente
        fin si
    sino
        primero = nodo.siguiente   
    fin si

    // Truncamos el índice si se pide eliminar el último indicando su ínndice absoluto
    // Puedes decidir como opcional indicar error si se reclama eliminar un índice no existente
        // (mayor que la cantidad existente), aunque también puede aceptarse como indicación del último.
    Si (index => cantidad) index = -1

    // Atar el siguiente al anterior
    Si (index <> -1)
        nodo.siguiente.anterior = nodo.anterior
    sino
        ultimo = nodo.anterior
    fin si

    //Al llegar aquí a anterior y siguiente están enlazados 2 nodos (si no eran primero ni último)... (ellos entre sí y el nodo a eliminar),
      // ahora se puede romper los enlaces del nodo a eliminar, porque ahora la lista seguirá doblemente enlazada.

    // desatar 'anterior' del nodo (esto es, si no es el primero).
    Si (index>0)
        nodo.anterior = null
    fin si

    // desatar 'siguiente' del nodo (esto es, si no es el último)
    Si (index> -1)   
        nodo.siguiente = null
    fin si

    //Al llegar aquí el nodo está suelto, sin estar sujero a ningún otro, ahora puede eliminarse tranquilamente.
    nodo = null
fin funcion


Las funciones adicionales: buscarNodo, elimianrPrimero, EliminarUltimo...

// Deriva a eliminarIndex
Funcion EliminarPrimero
    llamada a Eliminar(0)
fin funcion

// Deriva a EliminarIndex
Funcion EliminarUltimo
    llamada a Eliminar(-1)
Fin funcion

// Localiza el nodo por el índice que ocupa, recorriendo desde el comienzo o desde el final (lo que quede más cerca).
nodo = funcion Buscarnodo(entero index)
    entero k
    nodo n

    // Desde fuera no es obligatorio saber el índice del último,
    //    pero una vez dentro sí, así asignamos el índice exacto...
    Si ((index<0) o (index > (cantidad-1)))
        index = (cantidad-1)
    fin si   
       
    // se llegaría a él antes, reccorriendo desde el primero o desde el último?
    //     (basta saber si index queda por debajo o encima de la mitad...
    //      se puede expresar de diferentes maneras, aquí forzando un valor positivo o negativo).
    Si ((index - (cantidad/2) ) < 0)   
        n= primero
        hacer mientras (k <> index)
            k +=1
            n = nodo.siguiente
        repetir
    sino
        n = ultimo
        hacer mientras (k<> index)
            k -= 1
            n = nodo.anterior
        repetir
    fin si       

    devolver n   
fin funcion
#1787
Yo aún conservo (grabado en un par de CDs) una base de datos de números telefónicos (fijos) internacionales (mundial), que permitía incluso hacer búsquedas inversas.
Luego cambiaron las leyes con todo el asunto de la seguridad a raíz del 11S y dejaron de estar disponibles... A día de hoy, por supuesto estára en su mayoría desactualizado... por ejemplo en España nos obligaron muchos años atrás a cambiar prefijos para disponibilidad de móviles, etc... y muchos países habrán sufrido politicas similares.

Ahora, eran guías sin restricción, no solo de empresas, también de personas privadas, toda vez que por entonces las guiás telefónicas (páginas blancas) eran no solo legales, sino que solía repartirse anualmente a cada abonado una guía de la provincia de la que era uno (en cada país). Hoy día la ley de protección de datos se comería (supongo) a aquellas guías (auténticos tochos de 2-5 kg. según provincia).
#1788
Jo... que desconfiados...

Y no podría ser simplemente que ha entrado un nuevo tipo a trabajar y que 'sabe' hacer su trabajo y se ha encontrado con que hay gente que uses 3, 4 ó 5 caracteres como contraseña y después de revisar el código se haya dado cuenta que simplemente no hay una política minimamente aceptable tal que haya aconsejado a sus superiores la adopción de unas medidas algo más razonables?.
#1789
El pomo de la puerta de salida está en manos de los venezolanos en realidad.

Es una auténtica lástima que le hayan dado tanto cancha a Maduro, después de Chávez, debió acabar el 'chavismo'... porque no hay nadie más molesto de derrocar que un tipo que se cree el Salvador de no se qué alimentado con dinero y poder para manejar militares y matoenes de barrio. Por haberlo consentido tanto, a estas alturas, no tengo ninguna duda que costará sangre...

Algo que jamás en la Historia ha gustado es que alguien que prentede ayuda, la espere sentado. En general cuando la situación llega al punto en el que ha de haber muerttos sí o sí, para que los de afuera te ayuden primero debes poner la cabeza de tus hijos en el tajo, porque nadie estará dispuesto a poner los suyos siendo ajenos a una situación mientras el afectado se cuida de arriegar la vida de los propios. Esto es elemental...

...hablando más claramente... mientras no se incendie "Roma", sin vuelta atrás, Venezuela no verá ayuda militar. A Rusia y China el satus quo les va bien, a USA y vecinos no les duele tanto como para afrontar una guerra, y si a los que les duele y afecta siguen dormidos y no luchan, nadie se les va a sumar.

¿Cuántos muertos más de hambre o por falta de atención médica necesitan los venezolanos para tomar las armas y recuperar su país de manos de un tirano?.
#1790
Con ayuda de un osciloscopio, se puede rastrear contenido reescrito hasta 7 veces, ahora bien el proceso es muy lento, por lo que acudir a ello solo será porque el contenido valga enromemente más que el precio de realizar el trabajo. Y Ciertamente tampoco se garantiza que se pueda rescatar todo.

Aparte los discos duros tienen un nivel de 'fuerza', con que se escriben los datos en el disco duro, a más fuerza, más permanente, no es una opción que suela estar incluída en software, pero determina en gran medida la capacidad de recuperación.

Para cualquier programador que se precie, es muy asequeible crear un programa que sobrescriba el disco duro al completo, varias veces con contenido pseudoaleatorio. Pero merece la pena perder todo ese tiempo, si realmente no hay nada importante???. Si es que no, basta un formateo a bajo nivel y listo.