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 ... 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 [368] 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 ... 432
3671  Programación / Programación C/C++ / Re: aparte de sacar el promedio, tambien diga que numeros son pares e impares en: 22 Agosto 2017, 06:03 am
Código:
buleano Impar
entero numero

Impar = (numero and 1)
3672  Programación / Programación C/C++ / Re: Fichero secuencial binario en: 21 Agosto 2017, 15:19 pm
No deja de ser gracioso, que tu no quieras probar tu propio código, porque 'no tienes los ficheros' y en cambio pidas a los demás que lo 'prueben', que ni tienen los ficheros, ni lo hicieron.

Si no tienes ficheros, los creas, con valores ficticios y lo pruebas, como mínimo para asegurarte que no genera errores...
Luego, si altera un dato en una posición incorrecta o no, eso es algo que debes probar con un fichero 'original' (aunque sea una copia, por supuesto).

Aquí nadie tiene forma de saber si 'total' aparece en determinada posición o no.
En principio si tus ficheros contienen (en cada uno) solo registros y nada más que registros y de un solo tipo, no debería ser problemático, no hay que calcular desplazamientos debido a cabeceras ni irregularidades por la desimetría de determinados campos (los char son arrays de tamaño fijo, según declaraste en las estructuras)... así que puedes proceder a probar creando tu mismo unos ficheros, metiendo registros ficticios (pero con valores razonables).

Sólo si tienes errores y no logras localizarlos es cuando compete, reclamar ayuda.... ehmmmm... que tu código, no opera sobre una central nuclear, no requiere una supervisión previa y justificada para que lo pruebes...  :laugh: :laugh: :laugh:
3673  Programación / Programación C/C++ / Re: Enum en: 21 Agosto 2017, 14:09 pm
Si no te entendí mal....

Basta crear dos enumeraciones, cada una comprendiendo los meses que correspondan y empezando la enumeración, en el mes y valor correspondientes.
Código:
Enumeracion MesesCiclo1
    CICLO1_ENERO = 1
    ...
    CICLO1_JULIO = 7
Fin enumeracion

Enumeracion MesesCiclo2
    CICLO2_AGOSTO = 1
    ...
    CICLO2_DICIEMBRE = 5
Fin enumeracion

MesCiclo1 MesA = 2  // que corresponde a CICLO1_FEBRERO
MesCiclo2 MesB = 4  // que corresponde a CICLO2_NOVIEMBRE

Puedes eliminar el prefijo de las enumeraciones (CICLOx_ ), si lo prefieres...

p.d.: Si solo quieres usar una enumeración, la solución que te propone Ivancea96, satisface tus necesidades, por un lado te proporciona el valor de ciclo, y por otra el valor del mes.
3674  Programación / .NET (C#, VB.NET, ASP) / Re: Calcular porcentaje en: 21 Agosto 2017, 13:47 pm
La barra de progreso, siempre va desde el valor mínimo al valor máximo.

Para que vaya del 0 al 100, esos deben ser los valores límites.

Si necesitas que se ajuste a esos límites, una de dos, o pones esos límites y trabajas con los que hay o pones los que hay y formateas esos límites (sin embargo, no tenemos control sobre la presentación, el redibujado del valor, así que exigiría crear tu propio control. y prograsmar un evento 'Changed' (o ValueChanged), que es donde redibujamos el valor y con la ayuda de una propiedad "AjustarSiemprealTantoPorCiento" = TRUE
Como dudo que vayas a crear un control de usuario solo para eso, me remito a la solución sobre el progressbar...

- Puesto el control del 0 al 100: Supongamos que vas a leer 63147 bytes... desde un bucle,
Código:
    Float PorCiento1

    // pgbProgreso, aquíes un control ProgressBar
    pgbProgreso.Min = 0
    pgbProgreso.Max = 100 // en realidad solo llegaremos al 99, pero dejamos 1 más por si los decimales alcanzan el 100, para que no 'cante' error...

    PorCiento1 = (63147 / 100)
    Bucle para k desde 0 a 63146
       // cosas por hacer
       pgbProgreso.Value = (porciento1 * k)
       // otras cosas por hacer
    Fin Bucle

p.d.: No había visto la imagen (hasta enviar la respuesta) y que no usas un control progressbar, si no que muestras el resultado en un simple label... modifico el pseudocódigo previo:

Código:
    Float PorCiento1

    //lblProgreso, sería aquí un label
    PorCiento1 = (63147 / 100)
    Bucle para k desde 0 a 63146
       // cosas por hacer
       // Damos formato al valor para que tenga al menos 2 decimales.
       // OJO:
       //     La barra "\" es una división entera.
       //     INT es una función de conversión donde se elimina los decimales.
       //     ToString, no deja lugar a dudas....
       lblProgreso.Text = (Int((porciento1 * k) * 100) \ 100).ToString & "%"
       // otras cosas por hacer
    Fin Bucle
3675  Programación / Java / Re: Comparar Imagenes y encontrar similitudes. en: 21 Agosto 2017, 06:06 am
Bien, vas avanzando... pero te daré algunas ideas...

1 - Es preferible no considerar el punto central como el punto de cruce entre las líneas que unen los puntos verticales y horizontales, sino, como muestor en el siguiente dibujo, el punto medio entre la distancia que separa los puntos horizontales, e ídem de los puntos verticales, de modo, que con ese centro es equidistante a ambos lados, pudiéndose trazar (si fuera el caso), un círculo o elipse que pase por ellos.
No es del todo obligatorio, pero reduce la cantidad de píxeles a visitar...
Se expone en la siguiente imagen (he desplazado los puntos para que no vengan a coincidir enfrente uno de otro y quede más claro la idea...


2 - Con los 4 puntos, se elige uno como inicio y una dirección (pongamos el de arriba y girando en sentido de las agujas del reloj, ahora nos centramso solo ne ese cuadrante. (son 4 bucles uno de trás de otro, que corresponden a cada cuadrante). Se lanza una línea entre los dos que limitan ese cuadrante... ¿por qué?. ahora vemos con una imagen porqué.
En la imagen se ven 6 variacones de la misma figura. Mira la última, si no corta la figura, implica que esa es la línea que encierra la figura, luego esa sería la solución para ese cuadrante.
Pero miremos a la figura 1, si recorremos los píxeles de la línea, podemos contar cuantas veces corta la figura (recordemos que la figura la tenemos en negro y el exterior en blanco, yo para que se vean con claridad los detalles, he conservado solo el contorno. en la imagen 1, la línea de contorno es interceptada 4 veces, una siempre sale otra que entra, luego podemos deducir que como mínimo hay 2 'picos' salientes. Bien si ahora te fijas en a imagen marcada como 3, verás que el controno se intercepta 10 veces, es decir hay al menos 5 'picos' salientes, se puedne contar bien, he puesto un trazado amarillo en cada saliente.
Pueden ser más pícos que el número dividido entre 2 (la marcada como 4 tiene el propósito de demostrar eso), pero nunca menos.
La 1 la 2, son la misma, en la 1 simplemente he trazado las 4 líneas que unen los 4 puntos, como idea general...
La imagen 5 redunda en lo mismo, ver que aunque el contorno sea retorcido siempre una intercepción entra en la figura y la siguiente sale.
Esos puntos de intercepción del contorno son útiles... nos sirven para saber cuantos picos cabe encontrar como mínimo.



En la siguiente imagen, vamos a analizar más en profundidad la importancia de los puntos de interceción de  contornos. Si miras con detenimiento la siguiente imagen, podrás ver que cada vez que la línea azul, corta el contorno, las veces impares, entra dentro de la figura y las veces pares sale de la figura , esto sucede siempre, da igual lo enrevesado que sea la imagen. De hecho esta característica es la base de rellenar figuras encerradas (o lo opuesto rellenar el exterior) con un color o un patrón, solo recorriendo línea a línea...


Ahora vamos al siguiente paso importante... se muestra en las siguientes imágenes...
Hemos empezado a detectar los picos, para ello se generan dos bucles, uno de recorrido vertical y otro horizontal ... por supuesto son dos bucles anidados, uno de recorrer líneas y el interno para recorrer los píxeles de cada línea.
En el horizontal vamos detectando el borde saliente, cada vez que una línea encuentre lo más a la derecha un contorno, y, en la siguientes líneas (el bucle interno anidado) empezamos (como mínimo) en esa posición, no volvemos cada vez al origen (centro de cordenadas). Esto se muestra en el trazo azul. Si recorriéramos todo, empezaríamos el bucle horizontal siempre desde la línea roja, sin embargo eso solo sucede en la primera línea. Cuando llega al pico 1(ver la marca rosada), ya empieza las siguientes líneas en ese punto. Esto acelera la búsqueda...


Se puede ver también que he trazado unas líneas rojas.... Una vez detectados los puntos salientes, desde el punto final del cuadrante (o desde el punto origen), se trazan líneas a cada uno de esos puntos recién obtenidos.
De entre todas esas líneas, aquella que arroja el ángulo más grande respecto de la línea que trazamos entre ambos puntos originales, es el punto más saliente.
De nuevo desde ese punto, trazamos líneas (la primera al punto de origen del cuadrante) y al resto de puntos obtenidos (más arriba en el eje 'Y', que la posición 'y' que ocupa éste punto), y de nuevo aquella línea que marca el ángulo mayor con respecto a la línea trazada hacia el punto del cuadrante, determina el punto más saliente....
Siguiendo el procedimiento, se obtiene todos esos puntos salientes que encierran la figura en ese cuadrante.
Es trivial, dibujar las líneas de los siguientes (saturaría la vista tantas líneas), se observa fácilmente que desde el punto final del cuadrante, marcado como 0, la línea irá al 1, luego al 3, luego al 5 y finalmente al de origen marcado como 6.


En esta otra imagen, más de  lo mismo. Tiene trabajo, pero es un modo seguro. Zonas redondeadas, pueden dar, líneas muy cortas y próximas entre sí, que pueden 'falsear' luego los ángulos. Pueden 'resumirse'...
Un detalle (en la esquina superior izquierda de la imagen) es ver como en el bucle de recorrido horizontal, se empieza siempre desde la línea del eje, (en este cuadrante desde ahí hacia la derecha).
En azul claro, el trazado necesario para detectar los picos con sus puntos. Hay que notar que el procedimiento descrito solo se 'visitan' desde los bucles (el bucle interno) los píxeles de la zona marcado en ese color cyan, no todos los del cuadrante, ya que el iniio del bucle interno, va fijandose con un valor mayor cada vez que en una línea se detecta uno más saliente.


El resto de cuadrantes es aplicar el mismo sistema, con los cambios que proceden o recurrir a senos y cosenos...

Si te queda alguna duda o las explicaciones no te parecen suficientemente claras, avisa... se puede hacer un pseudocodigo...

Cuando avances más te comento algo sobre los atractores gravitatorios... que resultan muy útiles para detectar similitud de formas con flexibilidad en contornos y en la propia forma.
3676  Seguridad Informática / Análisis y Diseño de Malware / Re: Que lenguaje de programación es bueno para fuerza bruta en: 20 Agosto 2017, 11:13 am
Ni siquiera ensamblador.

La fuerza bruta está ahí, solo para entender, para aprender las cosas, no para ser aplicada como recurso. La excepción es cuando se sabe a fé cierta que un sistema tiene una baja tasa combinatoria (como los 4 dígitos de las tarjetas de crédito) y el sistema no tiene alertas de intrusión.
3677  Foros Generales / Foro Libre / Re: Atentado en las ramblas de Barcelona en: 20 Agosto 2017, 10:42 am
Sólo en el mes de agosto atentados en: Barcelona, Afganistán, Camerún, Egipto, Filipinas, India, Iraq, Kenya, Nigeria, Pakistán, Siria, Somalia, Yemen, Burkina Faso, Tailandia, Mali, Arabia Saudí, Myanmar y Libia.

El terrorismo no es problema exclusivo de occidente...
Seguramente no sea tu intención, pero suena a algo así como: "Joderos y aguantaros que hay más países donde se asesina sin motivos".
Lo cierto es que todos esos países son páises de conflictos religiosos, y salvo La India, todos los demás son de mayoría absoluta musulmana. ¿Casualidad?. No, simplemente se trata de gente demente.
Occidente no es de mayoría musulmana, ni siquiera de minoría musulmana, son de tradición católica, la presencia musulmana es exclusivamente por la inmigración.

Luego cabe admitir que los atentados terroristas (en occidente) de esta gente es totalmente inadmisible. No hay aquí políticas que excluyan a minorías sectarias de musulmanes como pueda suceder en todos esos otros países, ni se aplican persecuciones ni matanzas, ni nada que se le parezca. No hay razón que justifiquen esos actos, ni siquiera 'venganza', porque no hay en origern ninguna causa... otra que la demencia de quienes lo llevna a cabo.

Yo también soy partidario de un extricto control del flujo migratorio, especialmente por Europa por parte de no ya sólo de indocumentados, si no de todos aquellos cuyo origen hasta segundos ancestros no se aprecisamente Europa. La libre circulación por europa es algo bueno y grande pero debería quedar recluído a los propios europeos (o los del tratado Exchengen), y para los no serle exigible un visado tal y como sería lo correcto si vinieran desde sus p`ropios países de origen. Si un egipcio entra en Francia, se le exige un visado y debería ser exclusivo para Francia, no para todo el territorio europeo, si luego quiere ir a Alemania o España, se le deberá exigir igualmente el visado tal y como si viniera desde Egipto. No es admisible que una vez entrado en Europa se 'paseen' por ella...
Si un ciudadano europeo va a Egipto, dudo que pueda por las buenas recorrer toda África sin los debidos visados y control de fornteras ante cada país. Que en europa hayamos llegadoa ciertos acuerdos, deberían quedar limitados para poblaciones cuyas razones de 'movilización' no se satisfacen...
3678  Foros Generales / Dudas Generales / Re: Crear un editor de texto de derecha a izquierda en: 19 Agosto 2017, 14:55 pm
Como te dice Randomize.

Judios y árabes escriben así...

De todos modos en los IDE de Microsoft, los 'textbox y label, suelen tener una propiedad para eso...

Y en cualquier caso, escribir en esa dirección es simplemente posicionar el siguiente carácter en la escritura. Si vas a escribir la palabra "Hola", empiezas con la h en la posición 0, sumas el ancho de la 'H'a, + el espacio entre caracteres y escribes la 'o', sumas el espacio de la 'o' + el espacio entre caracteres y escribes la 'l', etc... la 'a'.
Para escribir a derecha, empiezas al final de la línea (en vez de en la posición 0), - el ancho de la 'H', y escribes la 'H', luego restas el ancho de la 'H', - el de la 'o' - el espacio entre caracteres y escribes la 'o', restas el espacio de la 'o', el de la 'l' y el espacio entre caracteres y escribes la 'l'....

Como ves es solo cuestión de posicionar horizontalemtne el puntero de escritura...
3679  Foros Generales / Dudas Generales / Re: ¿Internet, qué es? en: 19 Agosto 2017, 07:20 am
De entrada hay unos protocolos que definen como ha de funcionar todo, precisamente para que funcione y no sea un caos.

Los ISP, vienen a ser como las 'empresas constructoras de carreteras'. Tiran cables por las ciudades, fibra óptica, colocan antenas o incluso lanzan satélites, o por qué no, colocar estaciones wifi, cada x espacio. Su beneficio principal es la de sus clientes. Los ISP 1 vienen a ser como los gobienros que contratan a las empresas para construir las carreteras. a fin de cuentas internert es una infraestructrua como otroa cualquiera. en cada pási, puede ser muy diferente, en algunos serán empresas privadas que tuvieron su monopolio (telefónica, por ejemplo en España), y en otros serán el gobierno, universidades, o más empresas.

Aunque no te interese la historia, lo cierto es que la mayoría de respuestas están ahí, en la historia... por ejemplo la falta de seguridad de la que adolece internet, parte del diseño inicial pensado para los militares. La idea era que si vas por x sitio y el 'enemigo' te para los pies, no puedes avanzar, o bien si vas por aqwuí, por allí y luego por allá saben que vas a tal sitio o que vbiniste de tal otro. Era requisito del diseño, que ante un 'tapón' pudiera tomarse otro camino, tal como haces tu en una ciudad si una calle está cortada por una avería de las tuverías del agua, por ejemplo. Todo eso favorecía el anonimato, que los espías (informadores), no fueran cazados...

Se utiliza el mismo protocolo, porque ya hemos vivido algunos siglos donde cada ppaís tiene su idioma y es de sobra conocido el problema de no usar un lenguaje común. Si existe un solo 'internet' todos podrmeos hablar el mismo lenguaje y entendernos.
Pero esto no es del todo cierto. al comienzo, había multitud de redes muy diferentes, de hecho a comienzos de los 90, uno de los grande sproblemas es que muchas universidades habína implementado sus propias redes y eran incompatibles con los del resto del planeta... poco a poco se fueron uniendo y dejando hacia dentro la red 'particular', de hecho las LAN, nacieron así... al principio eran la parte de la infraestructura que proveía sus propios protocolos, y donde más allá no se podía llegar. Esto duró hasta poco más o menos mediados de los 90...

Aún hoy puedes estar seguro que debe haber muchos más protoclos de red, restringidos a determinados intereses/gobiernos, etc...  y que tengan su salida a internet, pero que como antaño, de ahí hacia adentro sea una incógnita.
Desde el momento en que los router se universalizaron (ganando unas patentes sobre otras), los protocolos fueron cada vez más adoptados que los sistemas operativos, implementaron... luego quien compraba un sistema informático, ya tenía soluciones y si eran empresas ya tenían esa infraestructura o debían adaptarla si no era compatible...

La 'magia' de los Wan (los ISP), como tu dices reside en unos algoritmos de grafos, para encontrar los caminos entre el origen y el destino. Las IPs, son como las ciudades, el origen y el destino de los datos, la WAN tiene un mapa de qué IPs pertenecen a qué proveedor y dónde se encuentran. Fíjate que incluso podría ser un mapa ciego, del tipo: 'toma esto para tí, pásalo al siguiente', y que te responda 'no, eso queda en la otra dirección' . Si estás pongamos en Noruega y envías una imagen a Sudáfrica, cuando un paquete sale de tu equipo, en un momento dado puede haber varias copias circulando por la red, 3 en Italia, 2 en Marruecos, 5 e turquía incluso puede que 2 en China y 1 en Brasil... cuando llegan a Sudáfrica (los que no se pierdan, que a veces puede ser así), se queda con el primero (correcto) que llega y descarta los siguientes. Y no, no necesariamente la línea recta es la más corta, la densidad del tráfico, es clave, igual que si tu vas a tu casa y hay una manifestación puede que llegues antes si das un rodeo de 1 kilómetro que tratar de recorrer 200 metros contracorriente de la manifestación...

Los ISP, tienes que verlos como empresas de paquetería y mensajería... cuando llega al ISP de destino, es como cuando un paquete o una carta llega a la oficina de tu barrio, el cartero local, conoce los nombres de las calles del barrio y sabe repartirlas. en la distancia, solo importa la 'parte alta' de las IPs... el ISP, es quien conoce bien el destino de la 'parte baja' de las IPs, bajo su concesión.
3680  Programación / Desarrollo Web / Re: ¿Como puedo mejorar esta colisión? JS "canvas" en: 19 Agosto 2017, 06:12 am
No hay mucho de donde mejorarla. Técnicamente es correcta. Aunque es cierto que algo si se puede.

Te comento. Tu estás considerando siempre dos áreas, pero vamos a hacernos una imagen mental, para que sea más fácil entender donde quiero ir a parar.

imagina que tienes una espda y luchas contra otro que también tiene una espada. El área de cada uno, entonces es uno mismo y las dimensiones de la propia espada. es fácil de entender, verdad?

Bien, entonces la cuestión es... a quién le importa, tu espalda o 'su' espalda?. quiero decir, que la intercepción se basará en un punto, y no es preciso un área.

Supongamos que 'el jugador' es This (tu, yo, el que lo lea que se ponga en primera persona) y que el 'enemigo' es el área (rect).... con esto y lo dicho previamente pasemos al pseudocódigo...

Código:
Clase cThis
      entero X, Y, Width, Height
      entero Right, Bottom

      // Asignación de todos los datos del área (se reposiciona y redimensiona)
      Funcion MoverYDimensionar(rect Area) // puedes pasar valores individuales, (x,y,Width,Height) o incluso solo dos puntos de la diagonal principal '\' y calcular como proceda, o bien sobrecargar la función si se usan más que solo una.
          This.x = Area.X
          This.y = Area.Y
          This.Width = Area.Width
          This.Height = Area.Height

          This.Right = (This.X + This.Width)
          This.Bottom = (This.Y + This.Height)
      Fin Funcion

      // Cuando se desplaza (pero mantiene el tamaño):
      //       ('Inc'remento indica si los valores son relativos o absolutos)
      Funcion Mover(entero X, entero Y, buleano Inc)
          Si (Inc = FALSE)
              This.X = X
              This.Y = Y
          Sino
              This.X += X
              This.Y += Y
          Fin si

          This.Right = (This.X + This.Width)
          This.Bottom = (This.Y + This.Height)
      Fin funcion
    
      // Cuando se cambia de tamaño (pero mantiene su posición):
      //       ('Inc'remento indica si los valores son relativos o absolutos)
      Funcion Dimensionar(entero Witdth, entero Height, buleano Inc)
          Si (Inc = FALSE)
              This.Width = Width
              This.Height = Height
          Sino
              This.Width += Width
              This.Height += Height
          Fin si

          This.Right = (This.X + This.Width)
          This.Bottom = (This.Y + This.Height)
      Fin Funcion

// y por fin la detección de la colisión.
      // El detector de colisión, ahora exige menos matemáticas.
      Buleano = Funcion ColisionaCon(cThis cT)
           // si de entrada se aleja horizontalmente, no perdemos tiempo en comprobaciones verticales
          Si ( cT.Rigth > This.X) y (cT.X < This.Right) luego              
              Devolver ( cT.Bottom > This.Y) y (cT.Y < This.Bottom)
          Sino
              Devolver FALSE
          Fin si
      Fin Funcion
Fin clase


Tanto 'nosotros' (player) como el 'enemigo' seríamos instancias de cThis, y se llamaría así:
Código:
Si Player.ColisionaCon(Enemigo) luego
     ...

Funciona y es más rápido, porque:
A - Se calcula una única vez, el valor 'Right y Botton', y se guardan, en lo sucesivo ya no se calculan. Por tanto cada vez que haya que hacer la detección de colisión, nos ahorramos 4 sumas.
B - También contribuye a la velocidad que la comparación la dividimos en dos pasos, primero horizontal y luego vertical, (no importa si fuera al revés, de hecho si fuere más frecuente los movimientos verticales, sería mejor poner delante la comprobación vertical). al dividirlo en dos pasos no forzamos una posterior comprobación si la previa ya falló, pero incluso si es necesario la segunda comprobación también es ligera (no realiza sumas).

En Resumen, la detección ahora solo requiere:
    2 ó 4 comparaciones y 0 sumas
Antes requería:
    4 comparaciones y 4 sumas


Las sumas se hacen una sola vez cuando se establece/modifica el tamaño o se reposiciona, pero no con cada verificación de colisión.
Aunque al final viene a ser lo mismo, sin embargo el momento es diferente, al mover o redimensionar, no suele haber tanta carga de trabajo, luego... deja más tiempo para actualizar valores, en cambio cuando se exige detectar suele haber más trabajo 'pesado' en curso, entonces aligerar de ahí es adecuado.
En resumen, desplazamos la carga de trabajao a momentos menos activos, aligerando los momentos más activos. Aunque siempre va a depender de cada caso concreto...

...pero bueno, lo que pedías es posible...


---------------------
p.d.: Al publicar ya había más respuestas... te comento: asegúrate tras rehacer tu código que funciona en todos los casos... he aquí una imagen de los casos posibles (considera el cuadro rosado como el jugador y los azules como el enemigo), falta el caso de que el jugador esté completamente dentro del área del enemigo (el cuadro rosa dentro de uno azul), en las imágenes quedaba sobrecargado y se prestaba a confusión así que la he evitado.
Páginas: 1 ... 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 [368] 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines