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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 [295] 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 ... 431
2941  Foros Generales / Foro Libre / Re: "Estad preparados para la guerra", el panfleto que está llegando a todos los hog en: 27 Mayo 2018, 22:00 pm
mmm... mejor que los reparta Putin en Rusia.

Que yo sepa, nadie va a a ir allá (ni ganas) a guerrear... pero si se pasa de listo, puede que suceda así... y a día de hoy, la cosa no se saldraría como en todas las ocasiones previas, donde el frío extremo era un aliado contra las invasiones extranjeras.

La URSS era una potencia. Rusia es un potentado, algo muy ditintio incluso en el terreno militar.
2942  Programación / Programación C/C++ / Re: Proyecto de Estructura de datos.... GRAFOS!!! :c en: 27 Mayo 2018, 21:00 pm
Antes que nada, debes decidir/indicar, si es admisible que se revisite un nodo dos ó x veces, ó solo una como máximo... sino, por ejemplo sería valido la ruta:
A->C, B, D, H, F, C, L  ...Que, como se puede ver, revisita el nodo C dos veces...

Una vez decidido, y dando por supuesto que no se admitite revisitar nodos, puede tratarse como un automata finito determinista (AFD), donde el alfabeto es el conjunto de nodos (A, B, C, D, F, H, L) donde el estado inicial es A y el estado final es L, entonces puede establecerse el resto de nodos como estados de transición entre uno y otro.

Así desde A solo puede accederse a F y a C, lo que por ejemplo tratado como un autómata finito determinista , se señalaría en BNF como:
A = C|F
y desde C, se puede acceder a los nodos
C = A|F|B|L
El resto d eproducciones:
F = A|H
H = F|D
D = H|B
B = C|D
L = C  <--- esta no interesa, se trata de llegar a L, no pasar po él (es el estado final, no un estadode transición)
Como se puede ver, las producciones BNF, son las adyacencias de un nodo, la cantidad de nodos a los que se accede (por ejemplo A|F|B|L) son las aristas que salen de dicho nodo (en el ejemplo del nodo C, en C = A|F|B|L).

Entonces una vez en el estado inicial (A, pongamos estado 1), solo puede transitar hacia un estado 2, y desde un estado 2 a otro estado 2 o al estado de transición 3, si no tiene otro nodo que sea visitable que uno ya visitado, va al estado de error y por tanto ese camino no tiene solución, debe volverse un paso atrás cada vez que esto suceda... el estado de transición 3 (L), es el estado final, y señal de que admite ese 'token', para la gramática del alfabeto propuesto...
Puede tratarse como un automata de pila, porque un nodo no puede visitarse más de una vez...

A diferencia claro, de por ejemplo cuando se hace un compilador que en la entrada viene un texto y se trata de ver si un token pertenerce o no a la gramática, en tu caso haces algo distinto, la entrada es nula y tratas de averguar todas las salidas válidas (para una gramática libre de contexto serían incontables), pero para el caso de un grafo como el del ejemplo, es finito... ...de entrada se sabe que como máximo la longitud de palabra es la del alfabeto (ó menor)...
Por cuestiones de rendimiento, la pila realmente puede ser remplazada por un array de bytes donde cada letra del alfabeto tenga un valor true (no visitado ún, esto es, es Visitable), y una vez usado (pop si fuera una pila) su valor se ponga a false (nodo visitado, no visitable ya)... la velocidad de usar el array sobre una pila, está en el acceso aleatorio. al no exigir tener que extraer lo de encima de la pila... para acceder a un nodo.


Aquí un pseudocódigo casi completo... la función donde ba todo el trabajo lo dejo a tu esfuerzo...
Código:
funcion TodasLasRutasDeUnGrafo(string alfabeto) // sin repetir nodo.
    array bytes pila()  // realmente no es una pila, pero acomoda llamarlo así.
    array string prod= GetProducciones  //las producciones BNF, como un array de strings.

    // Albabeto = ABCDFHL  la primera letra debe ser el estado inicial
    Bucle k desde 2letra de alfabeto hasta última-1 //y la última debe ser el estado final.
        x = alfabeto(k)  //letra enésima del alfabeto
        c= caracter kesimo en alfabeto
        Hacer  
            pila = LlenarPila(alfabeto)   //vuelve visitable todos sus nodos.
            //pila(ASCII(c)) = FALSE // excepto la letra inicial de la que partimos esta vez,
            // pero esto mejor se traslada a la función invocada.            
            token = SiguienteToken(prod, pila, c)
            Si token <> ""
                imprimir "A --> " + token
            sino
                salir del bucle interno    
            fin si
        Repetir //mientras token distinto de nulo
    Siguiente

Código:
// el array es fijo según el grafo, y tal como se indico en las producciones.
// al caso se 'montan' en un array de strings,
array de String = Funcion GetProducciones  
    array de string p(0 a 255)

    //Cada valor está en la casilla cuyo ASCII representa y su contenido son la representación de cada nodo al que se accede desde él,
    // cada letra representa un nodo, al caso se han ordenado alfabéticamente, pero puede seguirse el orden en que aparecen sobre el grafo girando en uno u otro sentido, no importa...
    p(ASCII(A)) = CF
    p(ASCII(B)) = CD
    p(ASCII(C)) = ABLF
    p(ASCII(D)) = BH
    p(ASCII(F)) = AH
    p(ASCII(H)) = DF
    //p(ASCII(L))  
    
    devolver p
fin funcion

Código:
array de bytes = funcion LlenarPila(string alfabeto)
    array de bytes x(0 a 255)
    byte k

    Por cada letra en Alfabeto
        x(ASCII(letra)) = TRUE   //por ejemplo si letra es A: x(65) = TRUE, porque A es el carácter ASCII 65
    siguiente
    devolver X
fin funcion

Y la función final que lleva todo el trabajo, la dejo a tu esfuerzo... pero con algunas anotaciones.
Código:
enumeracion Estados
    ESTADO_ERROR = 0
    ESTADO_INICIAL = 1
    ESTADO_TRANSICION = 2
    ESTADO_FINAL = 3
fin enumeracion

// de entrada sabemos que el estado inicial es 1, y el primer carácter-nodo es A, que puede obviarse.
string = funcion SiguienteToken(array string P(),  array bytes Pila(), char letra)
   Estados  e= ESTADO_INICIAL
   string t = letra // la letra inicial, para esta vez.
  
   letra = siguiente letra en p(ASCII(letra)) // esto exige recursión ya que una producción engloba a otra.
   // Si pila(ASCII(letra)) = TRUE si el nodo de dicha letra es visitable
   //     t += letra
   //     Si letra = "L"
   //         e = ESTADO_FINAL
   //         devolver t
   //     sino
   //         e = ESTADO_TRANSICION
   //         marcar letra no visitable  pila(ASCII(letra)) = False
   //     fin si
   // sino
   //     volver atras, si es recursivo, implica devolver
   // fin si  
  
   // Si un nodo no es visitable, volver atrás, y si ya no quedan más nodos hacia adelante devolver false.  
fin funcion


Finalmente decirte que casi siempre verás una solución con un cuerpo más matemático, tirando de árboles... , la solución (incompleta) que te aporto, es... no más cercana, sino íntima a la programación... pués entra en la parte de la teoría de compiladores. Aunque al caso ha habido una discreta variación... a medias entre un análisis léxico y sintáctico.

Otra solución es recurrir a la combinatoria... generar (ir generando y probando sobre la marcha cada una si es un camino, esto es si el siguiente nodo es accesible desde el actual) todas las permutaciones sin repetición de largo máximo el alfabeto ABCDFHL (menos la letra inicial).
Como algoritmo es mucho más simple, pero es más lento en ejecución, especialmente si el alfabeto fuera mucho más largo, para este cortito, todavía no es significativo.
Código:
    string permutacion, ruta
    array de string p()  // el array de producciones que se generó el en otro pseudocódigo... traer la función aquí.
    por cada permutacion sobre el alfabeto //BCDFHL, nota que retiramos la A, pués siempre es el nodo inicial
      
        ruta = Substring(permutacion, hasta "L")  // obtenemos la subcadena hasta L, lo que tenga detrás sobra
        si EsCamino(ruta, p ) = TRUE
            imprimir "A" + ruta
        fin si
    siguiente

buleano = EsCamino(string ruta, array strings p)  // p son el array de las producciones generadas en el otro pseudocódigo
   char c = ruta(0)
   char n
    //... recorrer todo el string, viendo si desde la letra actual, hay conexión al otro nodo (siguiente letra)
    bucle para k desde 1 hasta largo de ruta
        n = ruta(k)
        si p(ASCII(c)) contiene n
            c = n
        sino
            devolver false
        fin si
    siguiente
    devolver TRUE   // c = "L"
fin funcion

// OJO: Alfabeto aquí deja fuera la letra A, no queremos que cambie de posición porque sabemos que siempre ha de ser el primero, no cabe en otra posición.
// alfabeto = "BCDFHL"
string = SiguientePermutacion(string alfabeto , string permutacion)
   ... calcula y devuelve la siguiente permutacion a la recibida. inicialmente permutacion = alfabeto
fin funcion
 
 
2943  Foros Generales / Dudas Generales / Re: como puedo adivinar apuestas deportivas en: 26 Mayo 2018, 23:02 pm
...una pequeña ayuda ...
...solo queria saber si habra algun truco para poder adivinarlo al 100%

...nada mas...
¿una pequeña ayuda?. ¿Truco?. ¿Adivinarlo al 100%?. ¿Nada más?.

¿Qué edad tienes?. ¿Has ido a la escuela?. No cabe otra posibilidad para semejante ~~~~~~~~~~
2944  Programación / Java / Re: Problemas con los array en: 26 Mayo 2018, 22:55 pm
No está bien pedir que "te miren" el código.

Señala que te falla,que precisa mejora, donde te pierdes, que no te sale, que te falta y  uno se ciñe justo al punto concreto...
2945  Foros Generales / Noticias / Re: BitTorrent,a punto de ser adquirida por el fundador de una de las principales... en: 26 Mayo 2018, 16:54 pm
Es pronto para aventurar nada, más sin detalles, pero "a bote pronto" parece como un movimiento de marketing, para dar vistosidad a su moneda y que así suba su uso (¿como la espuma?), y con ello se revalorice... única y última intención de la operación.
2946  Foros Generales / Foro Libre / Re: VIDEO: Impactantes imágenes del Kilauea, en riesgo de inminente explosión en: 26 Mayo 2018, 16:30 pm
Los pompeyanos no sufrieron, murieron al instante. De todas las formas de morir, aquella que sea instantánea, 'te libra del sufrimiento'. Y después de muerto, poco importa lo que ocurra con tu cuerpo, ya no sufre. Da igual si es calcinado, si es espachurrado por una roca gigante, momificado por adoradores o comido lentamente por termitas...

Otra cosa es que acabaras con quemaduras del volcán, y que sobrevivieras o que acabaras muriendo al tiempo a causa de dichas quemaduras o de la intoxicación de los vapores...
Esto es que es lo que les pasó a los pompeyanos, murieron sin siquiera intentar huir, murieron haciendo lo que estaban haciendo. Sus pulmones colapsaron pero no por la toxicidad sino por la elevada temperatura del ambiente aspirado (cientos de grados), la muerte sobrevino instantánea, 1-3 segundos. Una sola bocanada bastó, y si alguien fue consciente de lo que estaba pasando y se contuviera el respirar moriría abrasado, ese tal vez durara el doble de tiempo en morir y sufriera unos segundos siendo consciente. Muy probablemente antes de morir, perderían la consciencia. 
...no les dió tiempo a decir ni "mu", entre otras cosas por que el calor eliminaría tu lengua y tus cuerdas vocales, antes aún de terminar de abrir la boca del todo para decir "mu".
2947  Programación / .NET (C#, VB.NET, ASP) / Re: Sobre controles creados de forma dinamica en: 26 Mayo 2018, 05:24 am
¿Puedes poner una captura de la ventana?.

Lo explicas un poco engorroso, y resulta difícil seguir que quieres exactamente.
Por alguna de tus explicaciones más clara, concluyo que tienes citas a x horas relacionadas con cada cita, la cita se anula, y tu qieres que el contenido desaparezca y quede libre el tiempo que ocupaba dicha cita.

Bien... la idea de que uses un picturebox por cada cita, resulta exagerado... e innecesario y al final no es acorde. Cuando de un tipo de datos existen muchos, es cuando surgen los arrays, diccionarios, colecciones en general, y no andar con ítems sueltos a mansalva, dífíciles de controlar, de ubicar... las colecciones tieen precisamente métodos para tener controlado todo eso.

----------------------------------------------
- Para mostrar las citas y que el usuario haga click, mouse up, mouse enter, etc... para un proyecto así, lo razonable es tener:
- Una colección que aloje ítems de cita. Preferiblemente que estén ordenados por fecha y hora.
- Un ítem de cita puede ser una estructura, si ha de contener datos simples o una clase si ha de contener datos más complejos.
- Luego en la parte de la interfaz, cualquier tipo de lista de una o más columnas. Que muestren al menos uno o dos campos de la estructura/clase. Razón de la cita y hora, será lo habitual si es de una sola columna, incluso el nombre del citado si tienes más columnas.
- Y unos botones para manipular la lista, al menos estos: Añadir cita, eliminar cita, modificar cita, ver detalles de cita (aunque los detalles podrían ser doble click sobre el ítem en la lista).. Con cada boton se abre una ventana en unos casos para rellenar o para leer, o bien solicitar confirmación (caso de eliminar).
El botón detalles, mostrará otros campos que no aparecen en la lista...
De modo alternativo a los botones, puede ser un menú, o mejor aún un popup-menú sobre la propia lista.
-----------------------------------------------

Aparte puedes poner algún tipo de avisador de la cita que llega a su hora, incluso un checkbox, de 'avísame 5 minutos antes de la cita', en tal caso con un aviso luminoso (por ejemplo cambiando el color del fondo del ítem o del texto alternando entre dos colores).
Y finalmente el timer que escruta las citas. Las colección debería ser ordenada por la fecha-hora de la cita. Así el timer, solo tiene que chequear la primera cita de la lista.

Cuando la cita de la lista vence, mejor que eliminarla del todo, pasarla a otra lista oculta, en orden inverso... y rellenar un campo de tipo: "resultado de la cita", con una valor enumerado: anulado, retrasado a otro día, atendido, etc... mantenerlas quizás un día, una semana antes de eliminarlas definitivamente (mejor que decida el usuario el tiempo que deba pasar antes de eliminarla del todo). Por supuesto un botón de consultar citas pasadas, será necesario, si no no tendría sentido ese otro listado oculto... No porque una cita haya pasado, deja de ser útil sus datos.

Solo con lo comentado entras las dos líneas de rayas, te basta y sobra y será más elegante e intuitivo que lo que me parece entender que estás haciendo, además es sencillo de implementar.
2948  Programación / Programación General / Re: me aparece " Fatal: Syntax error, "." expected but ")" found." en Pascal en: 26 Mayo 2018, 04:41 am
...podemos conocer la declaración de arreglo y de Leerarreglo????.

Como ninguno de dichos identificadores son palabras reservadas, si no declaradas por tí, no es posible concluir donde está el error sin saber qué es cada cosa, y para ello lo mejor es ver la declaración de ambos identificadores.
2949  Foros Generales / Noticias / Re: El grafeno podría ser utilizado para acelerar la transmisión de datos ópticos en: 26 Mayo 2018, 04:30 am
El grafeno es carbono puro, lo mismo que las minas de los lápices...
Lo que lo convierte en 'grafeno', es la misma característica que convierte el carbono en diamante, la cristalización... lograda de forma muy determinada.

De forma casera, lo más que se puede lograr es cenizas, es decir quemado, algunos átomos ya son grafeno, pero en medio de tanta impureza... algo muy parecido es el 'carbón activo'... (cristalográficamente hablando).

Falta ver cuando saldrá del laboratório, a la fabricación en serie.
2950  Foros Generales / Dudas Generales / Re: como editar un correo ya enviado para que aparezca otro texto en: 25 Mayo 2018, 18:01 pm
Hola tengo un problema. Se que no se debe hacer pero mande mal un email con información errada, aunque no importa al destinatario pero si a mi jefe, quiero cambiar el contenido pero al hacerlo no puedo guardar los cambios
Si es cierto como dices, que la info está errada... simplemente se genera otro email con la info correcta y se señala que sustituye al previo que contenía errores... y listo.

Si eso no te satisface, entonces lo que te preocupa es algo distinto de 'información errada', y como dice engel, ya no es ético, ni probablemente legal.
Páginas: 1 ... 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 [295] 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines