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


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 93
81  Programación / Java / Re: Sistema de reservaciones de una aerolínea en: 13 Noviembre 2017, 14:22
Aparte de leer el ejercicio y copypastearlo aquí, ¿has hecho algo más?
Suponiendo que sí, concretamente ¿cuál es el problema en el que te ahogas?.
82  Foros Generales / Noticias / Re: Gearbox cree que las cajas de botín crean adictos y se deben evitar en: 13 Noviembre 2017, 01:38
Curiosa determinación del CEO... el "pay for win", no le gusta.
Yo voy un poco más lejos y digo que es hacer trampas y debería ser ilegal.

Es fácil entenderlo, imaginando el siguiente ejemplo: un equipo de fútbol paga a un árbitro por solucionarle el partido... el otro equipo podría hacerlo mismo, pero al final acaba como una puja, ganará quien más pague.
Si en los deportes reales es ilegal, es delito, no sé por qué en los videojuegos debe ser tolerado.
83  Foros Generales / Dudas Generales / Re: tengo un problema con un programa, pueden modificar parte de el?? en: 11 Noviembre 2017, 17:11
Localiza a algún programador local (solvente), lo llevas al negocio de tu padre y le haceis una demostración explicando todo el asunto, como funciona el actual y como necesitais que funcione, luego le encargais un programa completamente nuevo basado en ese (si soluciona vuestras necesidades) o cambiando los requisitos y que os lo haga desde cero.

...seguramente lleve menos tiempo, dé menos problemas y seguro que salga más barato que los pagos que os exijan... ...por lo menos será un único pago, no un pago mensual durante ...toda la vida.
84  Foros Generales / Noticias / Re: El oscuro secreto que esconden algunas televisiones 4K baratas en: 11 Noviembre 2017, 16:31
Antes se daban casos muy aislados, ahora con los chinos, la falsificación de las prestaciones están a la orden del día...

Sin ir más lejos tengo un móvil chino, que supuestamente tiene 4Gb. de RAM, pero da igual cuanto lo uses ni que uses, porque cuando miras la RAM usada siempre señala entre 1'3Gb. y 1'4Gb. y si a propósito cargas dos programas intensivos para intentar ver un cambio que debe producirse sí o sí, se cuelga... por lo que he acabado asumiendo que en realidad solo tiene 2Gb. de RAM. No quiero ni mirar el resto de prestaciones para no desmoralizarme al ver son pocas las que en realidad se cumplen.
85  Foros Generales / Noticias / Re: Agua fría y GPS: Apple suma dos fallos al iPhone X en: 11 Noviembre 2017, 16:24
Soy partidario de que en un terminal diminuto no haya 400 botones, pero me niego rotundamente a que no haya absolutamente ninguno. Si no hay ninguno, básicamente dependes del software, si fue hackeado o si simplemente contiene algún error de software, solo podrás usarlo como pisapapeles.
Yo creo que un terminal del tamaño de un móvil debiera tener entre 3 y 10 botones, más o menos como los pads y joysticks de juego. Unos 3-4 para las funciones básicas más elementales, y algunos para funcionalidad extra o incluso programable por el usuario.
Particularmente me parecería interesante que los 3-4 botones principales estuvieran reflejado en el otro lado, para satisfacer a usuarios diestros y también izquierdos (como soy), que opcionalmente pudiera elegirse el juego activo con un jumper bajo la carcasa y por otro lado sería una buena alternativa al caso de que los botones quedarán dañados.

Prescindir de todo botón físico, quizás genere un producto más barato (lo cual no se refleja en el precio dados esos: 1.159 euros del modelo más barato), pero no mejor. Sin botones podemos decir que aparecerá "el síndrome del pánico ante falta de botones donde pulsar", y es que cuando algo no funciona o esperamos que funcione, nada relaja más al usuario que volver a presionar el botón (con más fuerta o duración que antes, si cabe).

...en fín, los botones físicos, ofrecen 'tranquilidad' y transmiten 'control', ambas cosas se pierden si desaparecen. Pero bueno, los usuarios de Apple, suelen ser a menudo borregos que siguen al pastor ciego por la ostentación económica y la exclusividad absurda.
86  Programación / Java / Re: Buscar elemento k-esimo en un array no ordenado en: 10 Noviembre 2017, 22:13
La partición que haces es la original de Hoare, con la excepción de que Hoare, toma para el caso como pivot, el valor el índice minimo (el parámetro que tu llamas izq). En implementaciones más óptimas se suele tomar como pivot el índice central del rango presente.

El caso es que la partición es ciega, es decir, ni sabe que valores contiene, ni sabe donde está el menor ni el mayor, ni guarda información al respecto.
La partición simplemente divide hacia un lado u otro del pivot los valores mayores o menores del pivot, respectivamente. ...pero solo de los valores en el rango izq-der que recibe el array. No sabes en qué momento el valor késimo está en su sitio, solo tienes garantía de que al terminar de ordenar si lo estará.

Pero es que además, la partición para funcionar y evolucionar en las siguientes fases, DEBE forzosamente intercambiar valores, luego el algoritmo Quicksort se está ejecutando y por ende, el array se está ordenando, te guste o no.

En resumen, así opera el algoritmo QuickSort de Hoare...
Código:
Funcion QuicksortHoare(array Ar(), entero Min, entero Max)
    entero p
    
    si (Min < Max) luego
        p = ParticionHoare(Ar, Min, Max)
        llamada QuicksortHoare(Ar, Min, p)
        llamada QuicksortHoare(Ar, p + 1, Max)
    fin si
fin funcion

entero Funcion ParticionHoare(array Ar(), entero Min, entero Max)
    entero j, k, i, pivot

    pivot = Ar(Min)
    j = (Min - 1)
    k = (Max + 1)
    
    Hacer
        Hacer
            j = (j + 1)
        Repetir Mientras  (Ar(j) < pivot)
        Hacer
            k = (k - 1)
        Repetir Mientras (Ar(k) > pivot)
      
        si (j < k) luego
            i = Ar(j)
            Ar(j) = Ar(k)
            Ar(k) = i
        Sino
            devolver k
        Fin si
    Repetir
Fin Funcion

...y no hay forma de saber* en qué llamada tendrás el késimo valor ordenado en su sitio, excepto al término.

Por ejemplo, aquí un ejemplo, la primera línea es el array desordenado, las siguientes, son el array parcial en la siguiente etapa (he despreciado las etapas donde no cambia nada, para que quede lo más breve posible).
4 1 7 10 5 2 6 0 7 9
-----------------------
0 1 7 10 5 2 6 4 7 9
0 1 2 10 5 7 6 4 7 9
0 1 2
10 5 7 6 4 7 9
9 5 7 6 4 7 10
9 5 7 6 4 7
7 5 7 6 4 9
7 5 7 6 4
4 5 7 6 7
4 5 6 7 7
4 5 6
5 6
7 7

Aunque QuickSort sea muy eficiente, no es una búsqueda binaria (incluso a pesar de que en cierto modo haga particiones binarias), y por tanto no hay información precisa de dónde se haya el késimo valor que resultará ordenado hasta que no termine de ordenarse.
Si lo entiendes o no, es otra historia...


p.d.:
*: Aunque añadas código intermedio para intentar excrutarlo, será del todo ineficiente. Pués basta saber que con recorrer 1 sola vez el array obtienes el menor, para hallar el kesimo te basta recorrerlo k veces y si k es más de la mitad del tamaño, lo buscas desde el mayor hacia atrás. En realidad si k es un valor alto, será más ineficiente que ordenar el array.

Un modo mejor para lograr lo que quieres que con el procedimiento de Selection (que busca el menor en el array, sobre los n elementos no ordenados aún), es operar con grupos de tamaño k. entre sí, es decir si k = 5, ordena el array de 5 en 5 (supongamos 40 elementos); del 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39
Tras ese ordenamiento de los 8 grupos, se trata de hacer otra fase donde se procede a ordenar nuevamente (pero ahora por refundición puesto que ya están pre ordenados), cada dos grupos entre sí, y tras esta primera fase ya puedes descartar del 5-9, 15-19, 25-29, 35-39 (por que los 5 menores de cada grupo 5+5), se han movido al grupo de abajo), luego se sigue refundiendo otros grupos, pero saltanto los excluídos, así se refunde ahora: 0-4 con 10-14, 20-24 con 30-34. igualmente en cada etapa se van descartando la mitad de los elementos con los que se ha operado.
En esa última refundición será el grupo: 0-4 con 20-24 (los 5 menores se dejarán en 0-4, descartando finalmente también el grupo 20-24).
En la última refundición ya tendríamos 0-4 como menores, luego la solución sería miArray(4) (ya que dijimos que k=5)...

Esta solución también va particionando el array en 2, pero de cada vez deshecha (ordenar) la mitad (de los que quedan) que no contiene los deseados. Este método es incluso más óptimo para buscar el késimo elemento (que resultaría una vez ordenado) que por cualquier otro método donde el array no esté ya ordenado.


p.d2: Te pongo un ejemplo desarollado y comentado con éste último método... Si no eres capaz se implementarlo lo señalas y veo de sacar un tiempito y te oriento

El késimo pedido vamos a suponer que es el 5º (k=5), y supongamos el siguiente array aleatorio (de 40 elementos, 8 grupos, por simplicidad al no tener que lidiar con elementos sueltos, ...el propósito es que lo enttiendas):
16 11 12 14 13 20 31 32 42 26 17 28 4 25 15 6 11 2 29 5 8 32 21 25 37 41 1 7 40 30 35 11 0 22 34 3 19 43 38 27
El array separado en grupos de k (k=5 hemos puesto de ejemplo), solo por claridad...
16 11 12 14 13 || 20 31 32 42 26 || 17 28 4 25 15 || 6 11 2 29 5 || 8 32 21 25 37 || 41 1 7 40 30 || 35 11 0 22 34 || 3 19 43 38 27
Ordenando en la priemra fase (cada grupo de k entre sí). Ésta es una fase de ordenamiento previa, usando cualquier algoritmo de ordenamiento, cuando hay muy pocos elementos el más efectivo suele ser InsertionSort):
11 12 13 14 16 || 20 26 31 32 42 || 4 15 17 25 28 || 2 5 6 11 29 || 8 21 25 32 37 || 1 7 30 40 41 || 0 11 22 34 35 || 3 19 27 38 43
Refundimos gada dos grupos de 5 entre sí (y luego tachamos el segundo grupo que ya no se usará en la siguiente etapa):
11 12 13 14 16 || 20 26 31 32 42 || 2 4 5 6 11 || 15 17 25 28 29 || 1 7 8 21 25 || 32 37 30 40 41 || 0 3 11 19 22 || 34 35 27 38 43
En la siguiente, se refunden (y se muestrasn ya refundidos) los k elementos de dos grupos separados ahora por el doble de distancia previa (y tras los tachados de antes, se añade otro grupo de tachados)
2 4 5 6 11 || 20 26 31 32 42 || 12 13 14 16 11 || 15 17 25 28 29 || 0 1 3 7 8 || 32 37 30 40 41 || 21 25 11 19 22 || 34 35 27 38 43  
Finalmente solo quedan 2 grupos por refundir, se queda el bajo y se tacha el alto, con lo cual ya terminamos:
0 1 2 3 4 || 20 26 31 32 42 || 12 13 14 16 11 || 15 17 25 28 29 || 5 6 11 7 8 || 32 37 30 40 41 || 21 25 11 19 22 || 34 35 27 38 43
Y así el késimo será: Ar(k-1) = 4

Nota que segundo grupo tras la refundición no permanece ordenado (como se ve en:  5 6 11 7 8 ), una vez obtenido los k elementos en el 1º grupo, se pasa al segundo los que estaban en el 1º grupo remplazados por los del 2º... y se pasan para mantener la integridad del array (que siga teniendo los mismos elementos a la salida que contenía a la entrada).
87  Programación / Programación General / Re: metodo y funcion en: 10 Noviembre 2017, 17:01
Técnicamente es lo mismo.

Desde un punto de vista más estricto y para comprenderlo, digamos que:
- La función deriva de la idea matemática: f = a_algo, es decir que hace algunas operaciones (que no nos importan) pero devuelve un resultado, que es lo que nos importa.
  por ejemplo, hallar lo que mide un círculo dado su radio:
  m = circulo.MedirPerimetro(Radio), que simplemente dice que m= (2 * pi * radio)
- El método es la idea práctica de: resolver algo, hacer alguna cosa, en ese sentido, se supone que se dan ciertos pasos en un orden concreto, para llevarlo a cabo.
  Por ejemplo ordenar un array: array.Sort(miArray)

En la prácitca son indistinguibles, no hay importancia, nada notable salvo la preferencia personal o incluso que en muchos entornos tienen preferencia por un término u otro. Es común referirse a las procedimientos que posee un objeto como métodos, que se toma como algo más genérico que función. En parte porque muchos tenemos un concepto de 'función matemática', muy arraigado al punto de que se cree conveniento hacer notar una diferencia pero que en realidad no existe como tal.

Incluso la misma wikipedia, aunque recoge un artículo para cada cuestión, adecuadamente se declara una nulidad entre diferencias...
función: https://es.wikipedia.org/wiki/Subrutina
método: https://es.wikipedia.org/wiki/Método_(informática)

88  Foros Generales / Noticias / Re: China abrirá una comisaría sin policías, dirigida por una inteligencia ... en: 10 Noviembre 2017, 16:21
La cacareada 'inteligencia artificial' aún está en pañales.
¿Dejarías algo en manos de un  niño de 2 años?. Pués un niño de 2 años supera en inteligencia a las inteligencias artificiales actuales (síiii, en velocidad y cálculo siempre irán muy por delante, pero eso no es inteligencia artificial). ...además es relativamente fácil trolear a dicha inteligencia artificial, y si lo es por parte de los usuarios (ya se ha demostrado en varias ocasiones), también prodría serlo hackeándolo...
89  Programación / Java / Re: Buscar elemento k-esimo en un array no ordenado en: 10 Noviembre 2017, 15:39
Ya, pero es que si usas QuickSort, ya estás ordenando el array, porque Si o Sí debe hacer intercambios.
Entonces que al final no esté completamente ordenado el array, porque queden algunos intercambios por hacer, es trivial... (quedaría completamente ordenado si te pidieran el elemento 0º)

Con la parte primera del enunciado, sin el asunto de QuickSort, puedes solventarlo así (sería equivalente al procedimiento para un ordenamiento SelectionSort):

Código:
entero = BuscarKEsimo(entero ksimo, array Ar())
    entero menor

    // 1º: Buscar el mnor del array
    menor = BuscarMenor(ar, 0, ar.count -1)

    // 2º buscar el que sigue al menor hallado hasta el momento.
    bucle para k desde 1 hasta ksimo  //se supone que ksimo está dentro de los límites del array.
        menor = BuscarMenorSiguiente(ar, 0, ar.count-1, menor)
    fin bucle
    devolver menor
fin funcion

// Esta función busca el menor en un array.
entero = funcion BuscarMenor(array Ar(), entero desde, entero hasta)
    entero v
   
    v = ar(desde)
    Hacer mientras (desde <= hasta)
        Si (Ar(desde) < v) luego
            v = Ar(desde)
        fin si
        desde += 1
    repetir
   
    devolver = v
fin funcion

// esta función busca el menor en un array mayor que 'exige'.
entero = funcion BuscarMenorSiguiente(array Ar(), entero desde, entero hasta, entero exige)
    entero v
   
    v = ar(desde)
    Hacer mientras (desde <= hasta)
        Si (( Ar(desde) < v) y ( Ar(desde) > exige)) luego  // esta es la diferencia de la función previa: y ( Ar(desde) > exige)
            v = Ar(desde)
        fin si
        desde += 1
    repetir
   
    devolver = v
fin funcion

Nota: Que si el array tiene elementos repetidos (para el valor que se pide o anterior), no lo resuelve, queda a tu esfuerzo solucionarlo, así como pasar el pseudocódigo al lenguaje deseado.

90  Foros Generales / Noticias / Re: Estas son las nuevas obligaciones en privacidad de la futura normativa de ... en: 8 Noviembre 2017, 17:18
Muy bien, pero no aclara en qué países se impondrá dichas leyes.

Bueno sería, que fuera consensuado en todo el planeta, aunque luego sabemos que cada cual hará lo que le venga en gana, porque una vez en su poder tus datos, quién va a verificar que se cumple todo... más aún ni siquiera hay garantías de que los propios gobiernos que aprueben tales leyes, las apliquen ellos mismos.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 93
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines