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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 [335] 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 ... 431
3341  Foros Generales / Noticias / Re: Spotify es demandado con cifra millonaria por derechos de autor en: 5 Enero 2018, 05:38 am
Si no quieren hacer acuerdos, tampoco tendrán derecho a reclamaciones...

...por otro lado, Spotify, hasta donde yo comprobé tiempo atrás, no tiene disponible el contenido de aquellos con los que no tiene acuerdo... Si esto ha cambiado, ya lo ignoro. De hecho años atrás, buscaba discos de Metallica y no encontraba ninguno, después busqué noticias por la red, y era la propia banda que había declinado participar en Spotify... obviamente lo que no podrá evitar Spotify es que tú tengas en tu equipo tal o cual álbum... y que si te permite indexar (y a medida que su catálogo se amplía y hay existencias, se retira el tuyo, en favor del que ellos hospedan (no te lo borran solo cambian la ruta de origen)).

Habrá que ver en el tiempo, explicaciones más claras...
3342  Foros Generales / Noticias / Re: Trackmageddon: Múltiples vulnerabilidades en servicios de localización por GPS en: 5 Enero 2018, 05:29 am
Este año 2018, se prevee como el año de las vulnerabilidades sin fin... si el 2017, ha sido imparable creo que éste va a ser aún más terrible.

3343  Programación / Programación C/C++ / Re: Calcular la diferencia de tiempo en: 3 Enero 2018, 03:20 am
Si lo usas muy a menudo, suele ser deseable tener dos funciones...

Una llamada (por ejemplo) StartTime que toma la hora actual y otra que se llame (por ejemplo) EndTime que toma la hora actual, resta la previa y devuelve el resultado
(lo que te ha puesto engel lex, pero separado en dos funciones)...

Así puedes usarlo fácilmente desde cualquier parte del código.
3344  Programación / .NET (C#, VB.NET, ASP) / Re: copiar, pegar y cortar texto . --ICSharpCode-- en: 3 Enero 2018, 03:12 am
mmm... hablo de memoria... pero en Vs, la mayoría de controles que tienen propiedad Text, tienen también la propiedad SelectedText....

...entonces porqué no pruebas en vez de con:
Clipboard.SetText(TabControl1.SelectedTab.Controls(0).Text)
con:
Clipboard.SetText(TabControl1.SelectedTab.Controls(0).SelectedText)
3345  Programación / .NET (C#, VB.NET, ASP) / Re: copiar, pegar y cortar texto . en: 2 Enero 2018, 16:23 pm
Lo más cómodo de toda la vida es usar el Clipboard.

Cuando no se usa (en apariencia), es porque esa clase no es sino un wrapper de/para dicho clipboard
3346  Foros Generales / Noticias / Re: La bloguera que fingió tener cáncer cerebral y vendió una "cura" tendrá que ... en: 31 Diciembre 2017, 20:06 pm
Es una estafadora como tantos... No hay diferencia entre eso y cualquier otro ladrón. Los procedimientos los ajustan para 'cumplir' sus objetivos y como cualquier otro ladrón, los sentimientos lejos de ser un freno, son para ellos una ventaja d ela que sacar provecho 8o al menos ventaja).

Debería además habérsele impuesto pena de cárcel...
3347  Foros Generales / Noticias / Re: Windows 10 Build 17063 pide tu número de teléfono en: 31 Diciembre 2017, 20:01 pm
No se puede esperar que la gente cede toda su privacidad a google (sobretodo para Android) y que los demás no exijan nada. Así ahora Microsoft, copia la idea.

Yo afirmo que si los usuarios estan autenticados, aumenta la gravedad de la seguridad. mientras sea anónimo, un intruso no sabe con quien se las está viendo, ni si ese es un objetivo 'deseable'... estando autenticados, incluso se puede hacer 'búsquedas'...

La escalada en la gravedad de la seguridad, suma y sigue... Cada vez falta menos para que "1984" sea una realidad absoluta.... (obra basada después de todo en la propia Biblia ("nadie si no aquellos que tenían la marca de la Bestia, podía comprar ni..." )... que ya expresaba el control absoluto de los individuos.
3348  Programación / Programación C/C++ / Re: Maquina Inteligente Hundir la flota (Battleship) código C en: 31 Diciembre 2017, 17:45 pm
No dupliques todo el contenido de un mensaje si no vas a citar nada, si has de referirte a una persona simplemente copia su alias (y lo pones en negrita para llamar con claridad su atención) y responde simplemente... Imagina que ahora yo cito todo tu mensaje, y luego tu otra vez el mío... al anidarse los mensajes sería engorroso y largo (mucho scroll) para llegar al texto que uno escribe.



Ayer, olvide´al final, poner como se llemaba , aunque es claro... aprovecho, para resumir la lógica...
La lógica de un modo escuesta (más claro ahora que se sabe que aplicas la regla de espacio entre barcos):

Resultado solo debeiera tener dos valores: Agua o tocado, luego mejor un buleano para esto. Si ya fue tocado con anteroridad en sucesivas veces esa casilla debe devolver agua.
Como usamos una variable llamada 'tocado' al parámetro lo llamamos agua y entra con TRUe cuando se el resultado es 'agua' y con FALSE, cuando el resutado fue 'tocar la casilla a la que se disparó'.

Código:
buleano = Funcion SiguienteDisparo(buleano Agua, byte x, byte y)  
    Si (agua = FALSE)
        Si (Tocado > 0)             
            Aumentar tocado              // Otra casilla tocada de la nave (o de una nave contigua)          
            Avanzar la cordenada en la que se está  (según cada caso).          
            Si (ConsultarBarcoHundido(Tocado) = TRUE)
                Tocado = 0
                 Devolver FALSE
            Fin si
        Sino                                    // aquí hay un buque (lo acabamos de descubrir)... insistiremos hasta hundirlo.            
            Tocado = 1            
            Orientacion = 1            
            Avanzar cordenada x              
        Fin si      
        Devolver TRUE

    Sino  // agua = TRUE
        Si (Tocado > 0)              // un disparo previo acertó?,                                    
            Orientacion += 1      // cambiamos de orientación a la siguiente
            Cambiar las cordenadas a la casilla adhiacente a la 'arroba' en la orientación actual (que acabamos de saltar).        
            Devolver TRUE          
        Sino        
            Devolver FALSE
        Fin si
    Fin si
Fin funcion

Y la función sería invocada así:

Código:
    buleano agua, seguirPista

    Si (seguirPista = FALSE)
        x = Random(entre 0 y maxColumna)
        y = Random(entre 0 y maxFila)
    //Sino
        // 'x' e 'y', fueron actualizadas en la función SiguienteDisparo, se usan esos valores actualizados.
    Fin si
    agua = Disparar(x, y)
    seguirPista = SiguienteDisparo(agua, x, y)
   
...y para ser más precisos, elegir 'x' e 'y' de forma aleatoria, no debe ser del todo exacto, puede resultar muy costoso, ya que a medida que se juega, ya hay casillas que fueron elegidas, por tanto no tiene sentido volverlas a elegir... cuantas menos queden, más costará tomar al azar una casilla libre... no es nada óptimo.

Aquí la solución, si no la entiendes pregunta...:


1º Mantener datos de las casillas. Se crea un array con el número de casillas totales. y una variable indica cuanto son estas.
  
Al comenzar la partida, se meten todas las casillas en un array, que luego es barajado.
Código:
    ArrayEntero Casillas()
    entero maxCasillas, maxFilas, maxColumnas

    Funcion NuevaPartida(filas, columnas)
        entero k
    
        maxFilas =filas
        maxColumnas = columnas
        maxCasillas = ((filas * columnas) -1)  // -1 aquí, para evitar en todas partes poner -1...

        Alojar espacio para Casillas(0 a maxCasillas)
        Bucle para k desde 0 a maxCasillas
            Casillas(k) = k
        Siguiente
        
        BarajarCasillas        

        ... otras cosas en esta función necesarias antes de empezar la partida (como posicionar las flotas)
    fin funcion

2º La función BarajarCasillas, reordena de forma aleatoria el contenido en el array.
Código:
Funcion BarajarCasillas
    entero k, j, i

    Bucle para k desde maxCasillas hasta 1 hacia atrás
        j = Random(entre 0 y k)
        i = Casillas(j)
        Casillas(j) = Casillas(k)
        Casillas(k) = i
    Siguiente
Fin funcion


3º Elegir una casilla al azar entre las disponibles, luego la última disponible ocupa la posición de la tomada, y se descuenta 1 de las disponibles. Si no hay casillas disponibles daría error, pero eso implica que quedan barcos sin hundir pero se ha disparado a todas las casillas, luego hay un error de lógica en el juego (por ello no se contempla en lafunción que no haya casillas disponbles, el juego debe acabar antes que eso ocurra).

Código:
    entero = Funcion CasillaRandom
        entero z
        z = Random(entre 0 y maxCasillas)   // Elegir una casilla al azar entre las disponibles.

        Casillas(z) = Casillas(maxCasillas-1)  // movemos la última disponible al hueco de la casilla a devolver.
        maxCasillas -= 1                             // una casilla libre menos.

        Devolver z                                     // entregamos la casilla elegida (una libre)
    fin funcion

4º Derivar la casilla a las cordenadas que toque:
Básicamente es convertir un índice de un array unidimensional en los índices de un array bidimensional.
Código:
Funcion GetCordenadasFromCasilla (casilla, x, y)  // 'x' e 'y' son de salida...
    x = (casilla modulo maxFilas)  
    y = (casilla \ maxFilas)   // el '/' es una división entera, o bien una división (flotante) a la que se le retiran los decimales (convenrtido en entero)
Fin Funcion



Y por fin modificamos el fragmento de pseudocódigo de más arriba para elegir al azar casillas, pero solo entre las que aún están libres.
Código:
    buleano agua, seguirPista
    entero casilla

    Si (seguirPista = FALSE)
        casilla =  CasillaRandom
        GetCordenadasFromCasilla(casilla, x, y)
    Fin si

    agua = Disparar(x, y)
    seguirPista = SiguienteDisparo(agua, x, y)
3349  Programación / Programación Visual Basic / Re: SQL SUM() AS .. FROM ... WHERE... que no funciona en: 31 Diciembre 2017, 16:11 pm
A ver... yo te puse eso de "te llevará a la declaración de la variale, si lo es... (aunque es algo que tu debieras saber (los demás no, porque no vemos declaraciones de variables por ningún lado en tu código escueto).", e smás una crítica que otra cosa. Por la mala costumbre de no poner las declraciones y que tengamos que jugar a adivinar que tipo es una variable.

Está claro que es  (o debiera ser) un Recordset, para recibir la asignación de la línea:
Código
  1. inversorx = Rs.Fields.Item(1)

No lo declares como Variant si sabes el tipo que va a recibir. Ralentiza mucho las operaciones con Variant y debe usarse exclusivamente cuando un parámetro ha de recibir diferentes tipos... éste no parece ser el caso.

Luego, como te fallan las comillas, venía decirte que si no estás seguro de si lo has hecho correctamente, una forma de saber si por error, lo tratas como un literal, en vez de como variable, es reclamar su "definición", si la variable está declarada, irá a la línea donde aparece declarada, si no lo está o está descrita como un literal, te indiará que 'no se reconoce como un identificador (nombre de variable, función, propiedad, clase, constante, etc...)

...pero ya te dije que corrigieras las comillas como corresponde... y si no tienes claro donde falla exactamente, ejecuta el programa paso a paso, en la función donde esté ese fragemnto de código (pon una línea de pausa (con F9), al comienzo de ese código, y luego ejecuta paso a paso (con F8), mirando tras la ejecución de cada paso, si las variables contienen el valor que cabe esperar... Y si precisas evaluar una expresión, en vez de una variable suelta, selecciona la expresión 'completa' y con el ratón selecciona "inspección rápida" ( ó SHIFT+F9)... así logras llegar fácilmente al punto donde no está como corresponde.

...en fin, tienes que aprender algo sobre depuración del código usando el propio entorno de programación. VB6 es muy completo al caso.
3350  Foros Generales / Noticias / Re: Tickbox se enfrenta a Netflix, su “caja Kodi”es legal y sus usuarios no violan.. en: 31 Diciembre 2017, 03:17 am
Siempre con las mismas tonterías:

Citar
esta empresa dice que su dispositivo no se vende con ningún contenido no autorizado o ilegal, por lo que los usuarios pueden optar por descargar e instalar programas de terceros a través de los cuales pueden buscar y ver contenidos no autorizados, pero eso no es su culpa. Por tanto, argumenta que TickBox no puede ser considerada responsable bajo la teoría de la infracción contributiva o la inducción a la piratería, ya que, si bien su dispositivo puede ser programado para infringir la ley, es el software de terceros los que hacen todo el trabajo sucio, el producto en sí no tiene nada que ver con ellos.
En efecto, es lo mismo que un coche... que los ladrones prefieran usar una furgoneta para cargar más cantidad de botín en los robos, es absurdo pretender que las 'furgonaetas' inducen al robo...

Es paradójico además el doble rasero con las cuestione slegales en USA. Unarma sirve solo para matar, pero según ellos el peligro no está en el arma, si no en lo que hace la persona, así las armas son legales y solo se condena a los que las usen indebidamente... ¿¿¿no es esto exactamente lo mismo, pero sin el agravante de que nadie muere ????.
Páginas: 1 ... 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 [335] 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines