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

#511
No estoy seguro de haberte entendido al final... me confunde esto de:
Citar...en este caso serian 12 números a combinar formando combinaciones de 6 que cumplan la condición...

Tal que lo que yo creí haberte entendido de tu primer mensaje es que partiendo de una lista de 6 números,  tu quieres 'desplazar' esa combinación a las que permita el rango al que quede restringido manteniendo la distancia entre los valores de la serie de entrada...

Bien... si es eso lo que pides, entonces el fallo es que la serie de entrada que ofreces, es una arbitraria... no la distancia absoluta al número. La solución es simple, se trata de desplazar la serie entrada (a la serie absoluta)...

Más simplemente explicado... Si tu quieres poner números en la forma:
5,8,12,13,14,15
Eso debe llevarse a un desplazamiento absoluto es decir: resta 4 a cada uno de ellos ...introduce por tanto:
1,4,8,9,10,11

(En el listado de combinaciones), la primera combinación debe empezar siempre por 1 y la última debe acabar siempre en 49-valormayor. Por tanto la lista de valores deben contener la distancia de los valores respecto de un punto absoluto (preferible a una distancia relativa con anterior o posterior), siendo el primero el valor más bajo (el 1), así cada valor es una distancia absoluta, que sirve de suma y simplifica toda la operatoria del programa.

Si no quieres hacer el cálculo manualmente (para eso existe la programación). Añade otro textbox y otro boton, cuando quieras escribirlos libremente usa ese textbox. Cuando pulses el botón asociado, buscará el 'valor de resta', que se consigue buscando el menor de la lista y restándole 1 (en el ejemplo previo: valorResta = 5-1), ahora en un bucle se resta dicho valor a cada uno de los términos y deposita en resultado en el otro textbox, e invoca el botón del otro textbox...

Te adjunto el código del nuevo botón (no olvides añadir encima un botón y un textbox, fíjate en la imagen que adjunto más abajo).
Código (vbnet) [Seleccionar]

' Desplazar una serie arbitraria a la serie absoluta e invocar el otro botón.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim Nums() As String, txt As String
       Dim Valores() As Byte, k As UInt16, j As Uint16 = 255

       txt = TextBox2.Text.Replace(" ", "")
       Nums = txt.Split(",")
       If (Nums.Length = 6) Then
           ' Buscar el menor:
           ReDim Valores(0 To 5)
           For k = 0 To 5
               Valores(k) = System.Byte.Parse(Nums(k))
               If (Valores(k) < j) Then j = Valores(k)
           Next
           ' Hacer la resta:
           j -= 1
           txt = ""
           For k = 0 To 5
               Valores(k) -= j
               txt = (txt & Valores(k).tostring & ", ")
           Next

           ' ahora el textbox1 contiene la serie absoluta (canónica) y por tanto se puede invocar el botón con opera con dicha serie.
           TextBox1.Text = txt.Substring(0, txt.Length - 2)  ' no queremos pasar la última coma.

           ' Llamamos directamente el botón-1
           Call Button1_Click(sender, e)
       Else
           MessageBox.Show("No, no no... Debe haber 6 y solo 6 numeros, separados por 1 coma...")
       End If
   End Sub




(cambio color de letra que se confunde con el texto capturado en la imagen)
Si resulta que no es lo que quieres es que no he terminado de entenderte, redefine tu problema si puedes con 2 o 3 ejemplos específicos completos, de modo que la claridad de la especificación se manifieste en el ejemplo, o bien que donde fallen tus palabras pueda deducirse del ejemplo...
#512
Cita de: Serapis en 29 Abril 2021, 18:05 PM
En la página que abres, solo deja descargar uno a uno cada elemento...
Te recomiendo mejor ... descargar el archivo (que son unos 7Gb.)...
Me reitero... Pulsa dos clicks y dedícate a otra cosa (hasta que se descargue, si lo hubieras puesto ayer, ya lo habrías descargado 3 o 4 veces).

Pero sí, puedes perder el tiempo en hacer un script, tardarás no menos que poner a descargar cada enlace individual y luego asegurarse que esté todo adecuadamente ordenado y no haber olvidado ninguno o sobrescrito accidentalmente otro.
Cada uno pierde el tiempo como prefiere, ahí no se puede decir más.
#513
Claro que las puedes usar... pero no directamente, porque la convención de llamada s de NET es distinta de la convención de llamadas de vb6.

...tienes que crear un wrapper de las funciones que requieres...
1- Debe ser una proyecto de biblioteca de clases.
2 - al añadir el proyecto, ve a a las propiedades del mismo (doble click en 'myproject' en el explorador de soluciones).
3 - Ve a la pestaña 'Aplicación, pulsa el botón información de ensamblado... debajo del GUID, activa la casilla 'Crear ensamblado visible a través de COM'.
4 - En la ficha 'compilar', abajo dle todo, activa la caislla: Registras para interoperabilidad COM'.
5 - Elimina las clases que tenga el proyecto y añade una nueva clase, pero de tipo 'COM Class', esto generará los GUID, para que pueda ser accedido por VB6... (mira la imagen que adjunto). Es decir, vb6 solo verá la funcionalidad de estas clases, puedes tener otras clases si las necesitas, pero serán de NET al 100, y por supuesto puedes usarlas desde esa 'COM Class'... peor para vb6 serán invisibles e inaccesibles. La funcionalidad que quieras acceder tendrá que estar disponible en las 'COM Class' del proyecto.

No puedes usar todo lo que quieras... en las funciones publicas, en las funciones privadas, puedes usar parámetros de NET...
Estos es, los GUID y la clase NEW sin parámetros.
Los constructores con parámetros, son ignorados y las funciones sobrecargadas son renombradas con sufijos numerados. Por ejemplo: Sean 2 funciones llamadas FunX(byval Y as string) y FunX(byval Y as byte)
La 1ª se sigue llamando igual "FunX", la 2ª se renombra como: "FunX_1", es decir esto es lo que se verá por ejemplo desde VB6.0
Así al compilar permite que puedan ser reconocidos por otras plataformas que usan COM.
Explicar cada vericueto es largo y lleva bastante tiempo, lo mejor es que explores por tí mismo...
Una vez que termines el wrapper, compila tu clase/s... y tendrás que registrarla como una clase de NET, pero gracias a los GUID, VB6 ya podrá 'verla' y usarla.

Los errores que cometas en parámetros a llamadas, supondrá volver al código en NET, solucionar el problema, volver a compilar y registrar... y volver a instanciar desde vb6.

#514
Es muy difícil verificar "que tan eficaz es" tu algoritmo comparado con otro para un problema cuya resolución no existe salvo la fuerza bruta.

Si tu algoritmo también sigue el método de ramificación y poda, el rendimiento de tu algoritmo, va a depender casi exclusivamente de la profundidad de conocimiento en el lenguaje usado. En casos así elegir la estructura de datos adecuada, puede suponer una gran diferencia aun cuando otras partes del algoritmo, no sean igual de eficientes.

Considera la eficiacia (para este caso) como la mejor aproximación al resultado real y la eficiencia o rendimiento como el tiempo empleado. Ambos son igual de deseables...
La eficacia en estos casos están basado en heurísticas y ahí es muy dependiente de los ejemplos usados. Es perfectamente posible que un algoritmo arroje mejores resultados con ciertos ejemplos respecto de otro algoritmo y peores resultados con otros ejemplos.

Por otro lado el mayor limitante para verificar la eficacia es el tiempo preciso para encontrar resultados allí donde el tiempo es una premisa mayor... para acotaciones limitadas, siempre podrá modificarse un algoritmo para arrojar mejores resultados, más aproximados a la solución real.
Con la eficiencia, pasa lo mismo. Hay algoritmos que son muy rápidos para un cierto orden y a medida que aumenta el orden, disminuye su eficiencia y viceversa (por ejemplo la 'búsqueda por el método de burbuja' es más eficiente que quicksort, para (por ejemplo) 100 elementos, es comparativamente similar con 1000 elementos, pero es notablemente deficiente con 1.000.000 de elementos). Dado la explosión combinatoria del problema del agente viajero, la eficiacia y eficiencia de un algoritmo frente a otro exige pruebas exhaustivas, precisamente en diferentes órdenes de tamaño, y la que mayor determine la eficacia es prohibitiva en el tiempo, aunque si para pocas es menor y con cada aumento en la complejidad, sigue una curva de menor, parece que no vaya a cambiar la tendencia. Aún así es fácil demostrar esto para la eficiencia, pero no para la eficacia (exactitud en el resultado), ya que no hay forma de valorar una eficacia basada en los resultados que se arrojen.

Si tienes una soluciones (hipotéticas, pongamos) como en la siguiente tabla:

nº de prueba  items en juego   solucion real   tu solucion su solucion
-------------------------------------------------------------------------------
1                 5                   500          500          500     
2                 10                 1800         1800         1800
3                 20                 4723         4723         4723
4                 40                22000        22000        22000
5                 80               110000       109000       109600
6                 160              456000        44000       438000
7                 320             1380000      1350000      1360000
8                 640             9000000      8880000      8879000
9                 1280           25000000     24820000     24840000


Como ves, cuando la cantidad de items es poca, la solución puede ser real, o variar muy levemente, pero a medida que aumenten los valores, y sobretodo dependiente de cada ejemplo, un algoritmo podría arrojar una solución más cercana a la real en un problema concreto y más elejada en otro.. entonce no hay forma de valorarlo con precisión para decidir que uno es más eficaz que otro. Más bien en estos casos, lo que se valoran son las premisas requeridas, en resumen se adapta a las necesidades que la situación exija. Por ejemplo el factor tiempo puede dar más peso... así un sistema que solucione en pongamos 10 segundos aunque el valor real pudiera ser menos preciso, puede ser preferible a otro sistema que arroja una mejor precisión pero que demore 5 minutos en dar dicha solución.
En este problema la precisión (eficacia) y el tiempo (eificnecia) están en contraposición y debe valorarse un equilibrio entre ambos.
#515
En la página que abres, solo deja descargar uno a uno cada elemento... como son chorrocientos, sería además de lento demasiado 'interactivo' y lo más probable es que no te quede adecuadamente organizada la descarga...

Te recomiendo mejor que abras la página del tar, y ahí elijas descargar el archivo (que son unos 7Gb.) luego ya en tu equipo extraes la carpeta deseada con todo el contenido bajo la misma. Y al final si no necesitas más el tar, lo emilinas y listo. Según la velocidad  a la que descargues así tardará, probablemente unas horas... pero al menos solo le dedicas un par de clicks, hasta que se descargue. Paciencia.

https://archive.org/details/termux-repositories-legacy  (despliega 'Tar' a la derecha, es el último de los 4 ficheros)

o pinchando en 'Show all files' en la parte alta al centro, llegas aquí:
https://archive.org/download/termux-repositories-legacy
#516
Scripting / Re: Necesito ayuda
29 Abril 2021, 17:38 PM
No creo que tu profesor pretenda de verdad que resuelvas el tema, sin antes leer la documentación.

El siguiente comando te ilustra sobre las opciones del comando referido:
>wmic logicaldisk /?
En la ruta ...windows\help\ probablemente encuentres el fichero de ayuda: wmic.chm, de no ser así haz una búsqueda por los archivos en tu sistema luego ordénalos por tipo y mira a ver cual es de ayuda: "*wmi*.*"

Código (BNF) [Seleccionar]

Formal WMIC command syntaxThe WMIC command-line BNF:

<WMI Command>  ::=  [<global switch list>] <command> 
<global switch list>  ::=  <global switches> | <global switches> <global switches list> 
<global switches>  ::=  (/NAMESPACE | /ROLE ) [:<namespace>] |
        /NODE [:<computer id list>] |
        /IMPLEVEL [:<ilevel>] |
        /AUTHLEVEL [:<alevel>] |
        /LOCALE [:<locale identifier>] |
        /PRIVILEGES [:<property>] |
        /TRACE [:<option>] |
        /RECORD [:<file path>] |
        /INTERACTIVE
        /USER [:<user id>] |
        /PASSWORD [:<password id>] |
        /? [:<help type>] 
<computer id list>  ::=  <computer id> | <computer id> <computer id list> 
<command >  ::=  (<alias> [ <WMI object>] | [<alias>] <path where>) [<verb clause>] |
        EXIT |
        CLASS [<class path expression >] [<verb clause>] |
        RESTORE [ <restore file path>] 
<path where>  ::=  [PATH (<path expression> | <class path expression> )][ WHERE <where clause>] 
<alias>  ::=  !! name for the alias. The name will be unique in the context of the namespace in which the alias is defined.
        Note CLASS, PATH, WHERE, RESTORE and EXIT cannot be used as alias names as they appear in the same location in the syntax. 
<WMI object>  ::=  <parens> <alias parameters> <parens> | <alias parameters> 
<path expression>  ::=  !! A WMI path expression including a key clause 
<where clause>  ::=  !! A WQL where clause optionally surrounded by parenthesis 
<class path expression >   !! A WMI path expression that does not include a key clause 
<alias parameters>  ::=  !! one or more space delimited literals that will be used as substitutions in the alias' PWhere value. 
<verb clause>  ::=  (<verb> [<verb parameters>] |
<standard verb>) [<verb switches>] 
<verb>  ::=  <property name> | <identifier> |
<method name> 
<verb switches>  ::= 
        /INTERACTIVE |
        /NOINTERACTIVE 
<verb parameter>  ::=  <actual parameter> | <actual parameter> , <verb parameter> 
<standard verb>  ::= 
        <get verb> |
        <list verb> |
        <assoc verb> |
        <call verb> |
        <create-set verb> |
        <delete verb> 
<identifier>  ::=  <idhead> [<idrest>] 
<idhead>  ::=  <letter> 
<idrest>  ::=  <identifier> [<letter> | <digit>] 
<get verb>  ::=  GET [<property list>] [<get switches>] 
<property list>  ::=  <property name> | <property name> , <property list> 
<list verb>  ::=  LIST [<list format>|<list switches>] 
<assoc verb>  ::=  ASSOC [<format specifier>] 
<call verb>  ::=  CALL <method name> [<actual parameter list>] 
<actual parameter list>  ::=  <actual parameter> | <actual parameter , <actual parameter list> 
<create-set verb>  ::=  SET <assign list>| CREATE <assign list> 
<assign list>  ::=  <property name> = <property value> |
<property name> = <property value> <assign list> 
<delete verb>  ::=  DELETE 
<get switches>  ::= 
        /VALUE |
        /ALL |
        /TRANSLATE :<table name> |
        /EVERY :<interval> |
        /FORMAT [:<format specifier>] |
        /DESCRIPTION [:<code page>] 
<interval>  ::=  !! numeric value indicating frequency within which values should be returned 
<format specifier>  ::= 
        :<xsl file name> |
        :TABLE |
        :MOF 
<list format>  ::= 
        BRIEF |
        INSTANCE |
        SYSTEM |
        STATUS |
        FULL |
<user format> 
<list switches>   
        /TRANSLATE |
        /EVERY :<interval>|
        /FORMAT [:<format specifier>] 
<help type>  ::= 
        : BRIEF |
        : FULL 

#517
Cita de: FreeCellnet en 29 Abril 2021, 16:56 PM
pues a tal efecto lo eliminaré coyunturalmente.
No era necesario eliminarlo, solo moverlo a un hilo nuevo. La noticia como tal es verídica, existe...
#518
jajja... esto es como si win7 hiciera una entrada del tipo:
"Si tuvierais que cambiar de novia y pudierais elegir entre la señorita Bierstadt, Grandview, Seeford, Skeena y Tenorita, vosotros a quien eligiríais, sed sinceros?".

Creo que esto es una decisión personal que solo atañe a Mocosoft... ya que la elección es básicamente nula... cuando ya te dan tan limitado entre las que elegir.
#519
Cita de: FreeCellnet en 29 Abril 2021, 16:09 PM
Les han colao un bulo
Al leer tu intervención y visitar el enlace que proporcionas, lo que veo es que tu mensaje induce a error.
Este hilo trata sobre 'amenazas por carta' y de lo que tu hablas es de 'voto por correo'. lo uno no tiene nada que ver  con lo otro. Que Correos aparezca en ambas noticias es meramente coyuntural, no el fondo de la cuestión.

Tu mensaje no encaja aquí, debe ir en otro hilo, y si no hay uno abierto al efecto, pués en el suyo propio.
#520
Al margen de quien enviara esas cartas y con qué propósito...
..yo lo que veo muy extraño es que 'pase' controles digitalizados... eso de que 'es un despiste de un trabajador', no me lo creo. Un trabajador podrá tener un despiste, pero no una máquina... tendría que estar 'metido en el ajo' un trabajador de Correos, lo que en definitiva elimina el 'despiste'.