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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 [343] 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 ... 430
3421  Foros Generales / Noticias / Re: Las polémicas ‘loot boxes’ de los videojuegos podrían acabar siendo ilegales... en: 23 Noviembre 2017, 04:54 am
Supongo que mas que ilegalizarlos, sería exigirles que se den de alta como 'casa de juegos de apuestas' y/o pagar los impuestos pertienentes por tales recaudaciones, siempre y cuando puedan quedar pperfectamente desglosados los ingresos por las desdichadas 'cajas sorpresa'.

Deberámos llamarlas: 'kinder-box'...
3422  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 23 Noviembre 2017, 04:28 am
Para lo que quieres hay varias formas de hacerlo. 2 relativamente sencillas (siempre que se sepa un mñínimo de programación)...

1 - Añade una interfaz gráfica a tu programa. en el como te dice Okik, usa un control OpenFileDialog, para guiar al usuario a la carpeta deseada y que elija uno o varios ficheros. A la devolución del openfiledialog.show, si hay al menos un fichero (si no se canceló), usas la ruta openfiledialog.filename como ruta para comprimir.
(mira bien los métodos que ofrece (.initdir , .path, .extension, .filter, etc...)

2 - Como te señaló Elektro, añadiendo una shellextensión. A tu nivel, mejor el 'modo cutre' añadiendo alguna clave al registro en las clases "*" (cualquier fichero) incluso en "folder", para comprimir el contenido de toda una carpeta.
en este caso tu programa no precisa una interfaz de usuario, el usuario usa el 'explorador de ficheros' del propio windows, cuando el usuario pincha en un fichero, se muestra el menú contextual (el menú emergente del explorador de ficheros de windows) y si el usuario elige del menú la opción (de ejemplo): "Comprimir con rigorvzla.exe", la shell de windows, enviará un comando a tu programa (el formato del mismo es el que tú le dejes al editar la clave en el registro), es decir tu programa se arrancará y recibirá un comando 8una orden), con al menos 1 parámetro (las ruta del fichero)... ahí tu ya examinas la orden recibida (que tú elegiste poner en las claves del registro) para saber que orden es, qué se debe hacer con ese fichero... y si es comprimir, lo comprimes.

3 - Similar al openFioleDialog, solo que en vez de usar un control para el caso, lo creas tú a tu antojo (no es preciso que sea un control de usuario, puede ser una ventana con toda la funcionalidad exprofeso). al final tendrás un control de tipo lista, donde se ha rellenado con los nombres de los ficheros qwue contenga la carpeta seleccionada, al caso ahí sería acertado seleccionar el/los ficheros deseados yluego pulsar un botón "&Comprimir", que es donde se le dará la orden. el botón solo se activaría cuando la lista tenga ítems seleccionados... etc, etc... (si me enrrollo, corro el riesgo de que tampoco lo leas).

Y sin ánimo de crear polémica, yo también desconozco eso de sombrar o sombrear... técnicamente seleccionar un ítem de una colección, puede o no tener sombra, pués es una cuestión meramente gráfica y a gusto del que lo programe, típicamente se cambia de color el ítem, o se pone en negrita, incluso hay quien lo refleja cambiando el tamaño y/o el tipo de fuente. Si además de seleccionado es el ítem que tiene el foco, lo típico es dibujar una retícula de puntos sobre el ítem. Mi consejo es que si quieres programar-ser programador, uses la jerga de los programadores, para hacerte entender. No puede haber un lenguaje por cada programador, sería como la torre de Babel, ininteligible, jamás nos entenderíamos y se pierde muchísimo tiempo con ello... Si leyeras todo eso que no quieres leer, sin darte cuenta se te 'pegaría' la jerga adecuada...

p.d.: en realidad en la red, hay muchos ejemplos con código para cada caso... pero para encontrarlos, efectivamente hace falta usar las palabras correctas en el buscador.


3423  Programación / Java / Re: Evitar que los elementos se repitan en un array en: 23 Noviembre 2017, 03:44 am
Una modificación del agoritmo de ordenamiento counting, hace lo que quieres...
Ese algoritmo tiene serias limitaciones, porlo que no vale para todos los arrays.
Los límites son:
- Solo números.
- Deben ser enteros (no valen decimales, porque los índices de un array siempre son vaores enteros).
- Valores entre el mínimo y el máximo pequeños (porque precisa un array adicional en memoria de tamaño (valorMaximo-valorMinimo + 1) ).

Si tu array se ciñe a esos límites, puedes usarlo, no existe ninguna implementación más rápida que esta (pero con esas limitaciones).
Código:
array = funcion OrdenarYEliminarRepes( array Ar() )
    entero k, min, max, n
    array temp(), salida()
 
    // recorrer el array para buscar el valor mayor y menor del array
    min = ar(0)
    max = min
    bucle para k desde 1 a ar.count-1
        si (ar(k) < min) luego
            min = ar(k)
        oSi (ar(k) > max) luego
            max = ar(k)
        fin si
    fin bucle

    // OJO: si min es pongamos 20 y máx 100 millones se creará un array de 100 millones-20, aunque tu array de entrada solo tenga 40 valores...
    redimensionar temp(desde 0 hasta max-min)

    // recorrer el bucle otra vez para saber quñe valores aparecen y consignarlos en el array temp.
    bucle para k desde 0 hasta ar.count-1
        si (temp( ar(k)+min ) = 0) luego
            n +=1
            temp( ar(k)+min ) = 1
        fin si
    fin bucle

    redimensionar salida (0 a n-1)
    n = 0
    // recorrer el array temp, para consignar los valores presentes a la salida.
    bucle para k desde 0 hasta max-min
        si (temp( ar(k)+min ) = 1) luego
            salida(n) = temp( ar(k)+min )
            n +=1
        fin si
    fin bucle

    devolver salida
fin funcion

et voilá... ya tienes el array ordenado y con solo una copia de cada valor (sin duplicados). Recuerda que solo vale si el array se atiene a los límitaciones indicadas....
3424  Programación / Programación C/C++ / Re: Necesito ayuda con este programa quiero que me imprima las cartas que almacene en: 23 Noviembre 2017, 03:19 am
Tienes que pensar como un humano, y luego traducirlo a código... porque programar es eso.

Se obvian las funciones que no son precisas para llegar al punto donde explicar el asunto de tu interés.

1º - Debes disponer de una baraja, supongamos que la baraja se compone de 4 palos (y como soy español y no inglés usamos de ejemplo la baraja española y no la francesa (la de póker)).

Código:
array de bytes Baraja(0 a 39) //también podría ser bidimensional (0 a 3, 0 a 9)
entero siguienteCarta   // el índice de la carta que actualmente está arriba en la banca (lista para salir).

// Esta función genera la baraja. Cada carta aparece 1 solo 1 vez.
funcion RellenarBaraja
    entero j, k, i, n

    i = 0
    bucle para k de 0 a 3
        bucle para j de 0 a 9
            Baraja(n) = (i+j)  // basta un solo bucle desde 0 a 39, pero lo hago en 2 bucles
                                      // para que entiendas la equivalencia resuelta con un array bidimensional
                                       // Baraja(k,j) = (i+j)
        fin bucle
        i +=10
    fin bucle

    llamada a Barajar(2)
fin funcion

2º Tras ser generada la baraja (contener las cartas deseadas), debe ser barajada.
Código:
// Esta función baraja las cartas, esto es las cambia de orden.
funcion Barajar(entero veces)
    entero k, j, i, n

    Si (veces<1) luego   // se debe barajaral menos una vez.
        veces = 1
    OSi (veces>9) luego  // tampoco queremos barajar 1000 veces, no es necesario...
        veces = 9
    Fin si

    bucle para j desde 0 a veces-1
        bucle para k desde 39 hasta 1 regresivamente
            //elegir al azar un índice entre 0 y el actual del ciclo
            i = aleatorio(entre 0 y k)
            // intercambiar los valores de los índices de ciclo y elegido al azar  
            n = baraja(i)                
            baraja(i) = baraja(k)
            baraja(k) = n
        fin bucle
    fin bucle

    siguienteCarta  = 0  // el índice la carta actual en la banca es la primera.
fin funcion


Ahora toca repartir las cartas entre los jugadores, pero antes de repartir, vemos la necesidad de tener un alojamiento para los datos de cada jugador, básicamente hará falta una estructura que contenga el array de 'cuales' cartas tiene cada jugador. un valor que indique cuantas le restan válidas en ese array.
Código:
estructura Jugador
    string nombre //un nombre para el jugador, así cuando se pase el turno, se indica su nombre. Esto debe establecerse al iniicio del juego (una única vez)
    array de bytes Cartas(0 a 39) //dijimos que repartimos 5, si un jugador puede tener más cartas que las que se reparten,
                   // el tamaño del array debe aumentarse hasta tal posibilidad, si se ignora, debe ser el mismo tamaño de la baraja.
                   // Prevenimos tal situacion si ya albergamos esa posibilidad. La baraja también podría ser un jugador de nombre "La Banca", con esa misma cantidad de cartas en el array...
                  // Si el tamaño es el de la baraja, basta con crear los arrays al inicio del juego una única vez.
    entero cantidad  //número de cartas que tiene actualmente, esto evita redimensionar el array, porque apunta a la sigueinte (en realidad a la anterior).
    // otros datos que convenga que se mantenga para cada jugador.
fin estructura

Array de jugador jugadores(0 a 3)  //4 jugadores, ó (0 a 4), siendo la banca el jugador 0 y el resto los jugadores en lid.


3º Repartimos... debemos saber cuantos jugadores hay en la partida y cuantas cartas se reparten. Vamos a suponer que no se reparten todas sino, 5 al empezar... por simplicidad, no se comprueba si quedan suficientes cartas por repartir. En teoria si se llega al final, habría que tomar las que haya aún en la anca y barajarlas (solo las que quedan ahí), es fácil modificar la función de barajado para indicar cuantas barajar y tal...
Al parámetro desde se le pasa el valor de siguienteCarta , que se actualiza al retorno de la función.
Código:
// Esta función es la correcta cuando cada reparto sucede que todos los jugadores se han descartado, si no es así, el procedimiento debe variar (se pone debajo una aproximación al caso).
entero = funcion RepartirBorrando(entero numJugadores, entero numCartas, entero desde)
    entero j, k, i, n

    // borra-sobrescribe valores previos.
    bucle para k desde 0 a numJugadores-1 // jugadores
        jugadores(k).tengoAses = 0 // se borran todos los ases que tuviere, si le quedan...
        //realojar espacio para jugadores(k).cartas(0 numcartas -1)
        // pero si el array es del tamaño de la baraja basta hacerlo solo al inicio del juego, no tras cada partida ni reparto de cartas.
        jugadores(k).cantidad = numCartas //esto no es estrictamente necesario, se establece a  
    fin bucle

    bucle para j desde 0 a numCartas-1  //cartas
        bucle para k desde 0 a numJugadores-1 // jugadores
              n= baraja(desde)
              jugadores(k).cartas(j) = n            
              desde +=1
        fin bucle
    fin bucle

    devolver desde // desde lleva la cuenta de cartas gastadas, en la banca.
fin funcion

Función de reparto cuando se puede tener diferente número de cartas, según momentos y jugador durante la partida. alcaso se supone un tamaño de array de cartas para cada jugador del mismo que la baraja, así se evita errores de desbordamiento y hace innnecesario controlar dicho factor...
Código:
entero = funcion Repartir(entero numJugadores, entero numCartas, entero desde)
    entero j, k, i, n

    // OJO: nótese que aquí se ha intercambiado el orden de los bucles (facilidad para el código, el reparto sigue siendo aleatorio, pués las cartas están barajadas y nadie sabe donde ni cuales.
    bucle para k desde 0 a numJugadores-1 // jugadores
        i = jugadores(k).cantidad
        bucle para j desde 0 a numCartas-1  //cartas
              n= baraja(desde)
              jugadores(k).cartas(i + j) = n          
              desde +=1
        fin bucle
        jugadores(k).cantidad += numCartas // suma las que se reparten a las que se tiene actualmente
    fin bucle

    devolver desde // desde lleva la cuenta de cartas gastadas, en la banca.
fin funcion

4º Ahora llegamos al punto donde es el turno de un jugador y se comprueba si tiene un as y por tanto roba una carta (la siguiente o una alazar?) al resto de jugadores...
Recuerda: Se han obviado las funciones que no son precisas para llegar a este punto donde se explica el asunto de tu interés.

Código:
entero funcion SiguienteTurno(entero turno) //, entero indiceCarta para elcaso de que sea el jugador quien decide qué carta se arroja.
    entero j, k , i, n

    k =  jugadores(turno).cantidad -1

    // tomar la siguiente carta:
    si se elige al azar
        i = Aleatorio(entre 0 y k)        
    oSi se toma la siguiente que sigue en secuencia
        i = k        
    oSi decidio el usuario
        i = indiceCarta
    fin si
     // valor de la carta seleccionada
    n = jugadores(turno).cartas( i )

    // Esto solo si elegir la carta supone descartarse de ella.
    Si decidio el usuario // y la carta se debe descartar, esta se pasa atrás... las válidas son las 'cantidad-1' primeras en el array de ese jugador
        jugadores(turno).cartas( i ) = jugadores(turno).cartas( k )  
        jugadores(turno).cartas( k ) = n
    fin si
    jugadores(turno).cantidad -=1  

    
    // evaluar si es un as y que as, es
    si ((n modulo 10) = 0 ) luego  // ¿la carta 'n' es un AS?
        n = (n / 10)  // ¿qué AS, es?  0, 10, 20, 30 // por ejemplo oros, copas, espadas y bastos, respectivamente, tu decides...
        // Si (n = AsPalo) luego ... caso de que deba ser un as especifico y no cualquiera de ellos
            // retirar una carta a cada uno de los jugadores restantes (sin saber que se hace con ellas, se supone que solo se le retira 1 y nada más)
            bucle para j desde 0 a numJugadores-1
                Si (j <> turno) luego //distinto de   //no se puede quitar carta a sí mismo.
                     si  (jugadores(j).cantidad >0) luego
                          jugadores(j).cantidad -=1   //le quitamos la última, si es al azar,
                                    // proceder como más arriba, elegir al azar entre las que reste
                                    // intercambiarla por la última 'válida' y restar una a la cantidad.
                     fin si
                fin si
            fin bucle
        // fin si
    fin si


    devolver ((turno + 1) modulo numJugadores) //0-1-2-3-0-1-2-3-0-1-2--->3--->0
fin funcion

Para entender correctamente el pseudocódigo considera lo siguiente:
- La baraja tiene 40 cartas, una copia por cada carta, que han sido barajadas x veces.
- El array 'baraja' representa la banca.
- La banca cuando reparte cartas, aumenta el índice en tantas cartas como reparte, las de más abajo están en uso, las que restan hasta 39, siguenen la banca.
- Las cartas del jugadores, sigue el orden al revés, dado que no hay forma de saber cuantas cartas tendrá en algún momento, cuando se le retira una, se intercambia de orden con la del final de las que le quedan válidas, y su cuenta se reduce en uno.
- Los valores de las cartas  en la baraja van del 0 al 39. 0-9 las 10 cartas de un palo, 10-19, las de otro, 20-29 otro y 30-39 el último palo. Usar dos barajas es aumentar el array al doble y proceder con la misma idea, solo que se consideran cartas iguales (x y n) si:  
Código:
buleano = funcion Iguales(entero x, entero n)
  devolver ((x modulo 40) = (n modulo 40))
fin funcion
- Observa que la función SiguienteTurno, puede llevar más parámetros, por ejemplo para que el jugadordecida si quiere jugar su AS (como tu reclamas), pasando a la función el índice de la misma....
- Se supone que los turnos, son una vez cada uno. Si no es así, se deb modificar la devolución en la función 'SiguienteTurno'. Para el caso, (por simplicidad y claridad), tampoco se ha previsto el caso de que un jugador esté descartado y por tanto deba ceder el turno a otro.
- La función 'SiguienteTurno', simplemente está evaluando que carta juega el jugador que tiene el turno, y verifica si es un as en cuyo casoretira una carta a cada jugador (pero no se las asigna así mismo, es decir no se apodera de ellas), y da por hecho que jugar una carta supone perderla, descartando por tanto al jugador de esa carta...

...es realmente sencillo, espero que lo entiendas correctamente...
3425  Programación / Ejercicios / Re: Ejercicio de sudoku en java en: 22 Noviembre 2017, 17:53 pm
pero en mi caso yo tengo que crear yo mismo la matriz (el sudoku) de 9*9 y comprobar si esta bien y todo
Exactamente eso es lo que se trata allí... crear el sudoku, permitir al usuario ir rellenando el suyo, e ir comparando las entradas del usuario con lo guardado en memoria, y verificar el resultado final...

pero ustedes en ese caso utilizaron import java.util.Random para generar numeros aleatorios y empezando por ahi ya se hace el ejercicio un tanto diferente.
No importa qué función utilices para obtener los valores al azar.
De hecho otro modo  es empezar con un 9 valores1, 9 valores 2, 9 valores3, etc... y en tal caso lo que se eligiría al azar ahora no serían los valores, si no donde ubicarlos, sabiendo que en cada fila, columna o bloque solo debe contener 1.
No cambia el resultado ni la mayoría de operaciones, tan solo algo el generador de sudokus.

Básicamente se compone de 3 partes:
- Generar el sudoku.
- Interacción con el usuario (la parte de la interfaz)
- Las verificaciones como respuesta a la entrada del usuario.
Aunque no están claramente separadas, si puede resumirse así, incluso podría clasificarse de esa manera, aunque no es estrictamente necesario.

de todos modos, el usuario empezó por lo que tenía al ir avanzando en el tema fue cambiando cosas... tu lee y revisa y codifica y prueba... Si tienes dudas, casi mejor pregunta allí.


3426  Foros Generales / Noticias / Re: Uber ocultó durante más de un año un robo masivo de datos de 57 millones de ... en: 22 Noviembre 2017, 17:39 pm
Aunque Uber, parece una apuesta segura y hasta cierto punto cómoda a pesar de las quejas de los gremios afectados, cada vez queda más claro y fuera de toda duda, que la empresa apesta por los 4 costados y no parece que terminen de sacudirse las pulgas...
3427  Foros Generales / Noticias / Re: La inteligencia española descarta ciberataques del Gobierno ruso durante la ... en: 22 Noviembre 2017, 17:34 pm
Lo gracioso de las agencias de inteligencia, es que nunca puedes creerte nada de ellos, incluso cuando estén realmente diciendo la verdad.
Precisamente porque manejan la verdad y la mentira a partes iguales, no se les puede dar crédito alguno.

Cuando dicen verdades, no las dicen para que 'la gente se entere', si no por alguna oscura razón, cuando dicen mentiras las dicen por exactamente las mismas razones que dicen verdades...
3428  Foros Generales / Noticias / Re: A Intel le crecen los enanos: descubierta otra grave vulnerabilidad en sus ... en: 22 Noviembre 2017, 17:32 pm
El principal problema de seguridad es el hardware. Su mal diseño es lo que permite que prospere el diseño software.

No me cabe ninguna duda que Intel tiene un panfleto de 'reglas del gobierno' que debe seguir a rajatabla con cada nuevo diseño, precisamente para dejar puertas traseras para incursionar en equipos de cualquiera...

Por eso creo interesante la diversificación y competencia entre fabricantes de chips... no todos van a ser de USA y cuando se descubra una grave vulnerabilidad o peor, una conjura (cuando el espionaje está diseñado desde el origen es una conjura), los usuarios pueden optar por otros modelos y el mal fabricante rsentir sus ventas por 'negociar' con los gobienros en contra del pueblo.
3429  Foros Generales / Foro Libre / Google penalizará en su buscador a webs de propaganda y fake news como RT en: 22 Noviembre 2017, 17:10 pm
Citar
...cuando se crea una noticia falsa se tienen dos objetivos: obtener visitas a través de la ignorancia de mucha gente, o intentar influenciar la opinión de la gente...

...Eric Schmidt, presidente ejecutivo de Alphabet (Google) ha afirmado que quiere frenar la propagación de estas noticias falsas, y que van a empezar a penalizar a este tipo de medios en Google. Incluso ha advertido que “no quieren tener que llegar a prohibirlos”. Entre las páginas que mencionó se encuentran Russia Today (RT) y Sputnik, que son utilizadas como propaganda rusa...

A ver si es verdad, porque supone tres retos con los que lidiar:
- Cómo localizar y cuantificar que una web aporta noticias falsas o falsificadas.
- Cómo valorar el aspecto negativo (y hacerlo correctamente en su justa medida), para penalizar a dichas webs.
- Cómo afectará esto a los usuarios del buscador. Esto es cómo resultará de efectivo...

Aunque este último punto parece de menor importancia en su eficacia, lo cierto es que es la razón de la existencia de los dos previos, luego paradójicamente es el más importante de los 3. Presumiblemente, sin que primero los dos previos sean óptimos, valorar este tercero, no tendrá mucho sentido. Luego es más importante centrarse primero en lograr que los otros dos sean óptimos antes de preocuparse de éste.

https://www.adslzone.net/2017/11/21/google-fake-news-rt-sputnik/?utm_source=related_posts&utm_medium=manual
3430  Programación / Programación C/C++ / Re: error al compilar en: 22 Noviembre 2017, 09:45 am
26, 52, 78... son múltiplos.

Obviamente estás sumando cada vez a los valores previos, los actuales.
Debes restablecer a 0 los valores con cada ejecución. Repasa el código que tengas...
Páginas: 1 ... 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 [343] 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 ... 430
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines