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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 [299] 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 ... 431
2981  Programación / Programación C/C++ / Re: numeros perfectos con c en: 15 Mayo 2018, 20:13 pm
Lo que en realidad Mafus te está preguntando es si sabes lo que es un número perfecto?.

Un número es perfecto cuando la suma de todos sus divisores es igual al propio número.  Luego se trata de ir buscando los divisores e ir sumándolos, y al final comprobar si esa suma coincide con el número recibido...


Código:
Buleano = Funcion EsNumeroPerfecto(entero numero)
    entero divisor = 2  //el primer divisor... ya sabemos que todo nº es divisible por 1.
    entero n = 1
    entero fin = (numero \2)  // hay un límite de búsqueda. llegando a la mitad, quizás sea divisible por 2, más allá solo es divisible por sí mismo...

    Hacer
        si (numero modulo divisor) = 0)
            n += divisor              
        fin si
        divisor += 1
    repetir mientras (n <= fin)  // fin, porque un  divisor de 2 lo reduce a la mitad.
    
    EsNumeroPerfecto = (n = numero)
fin funcion


p.d.: Si pones un bucle para tratar de cuales son números perfectos empezando por el 1, acota hasta 10.000. Ten en cuenta que a medida que los números aumentan la cantidad de divisores para cada cual también, luego es un problema de naturaleza exponencial... encontrar los primeros es rápido, luego se requiere paciencia... y más allá que lo continúen tus nietos.  :laugh: :laugh:

Hay quien no considera el 1 como número perfecto, para mi lo es pués cumple la premisa.
2982  Programación / Programación C/C++ / Re: programacion c++ en: 15 Mayo 2018, 18:48 pm
Básicamente una letra en una posición horizontal supone una cadena de texto donde todas sus posiciones previas son espacios. Luego moverla a izquierda o derecha, es formar una nueva cadena con un espacio más o menos que antes.

La cuestión vertical, es más de lo mismo... por cada línea previa a la pedida, se escribe el salto de línea... luego subir o bajar es aumentar o reducir en 1 la cantidad de saltos de líneas...

En pseudocódigo:

Código:
funcion PosicionarLetraEnPantalla(char letra, byte X, byte Y)
    string s = espacios(X-1) + letra
    entero k

    borrar pantalla
    bucle para k desde 0 hasta Y-1
        imprimir salto de línea
    fin bucle
  
    imprimir s
fin funcion

NOTA: ten cuidado con los -1 y los tipos de datos, ...puede dar excepción... pero procura siempre usar un tipo de datos que se ajuste a lo razonable que se precisa.

Inicialmente X e Y valen 0, como se quiere mover, implica que hay que recordar la posicion previa... ergo ya tenemos una función que  borra la pantalla y dibuja la letra donde queremos, ahora nos falta una función que 'mueva' la letra una posición cada vez...

Como letra he elegido 's', la serpiente que se mueve... :laugh: :laugh: :laugh:
Código:
char letra = 'S'
byte X = 0
byte Y = 0

funcion Mover(char p)  // p de posición
    seleccionar caso de p
        caso 'l', 'L'  
            Si (X<79)  // suponiendo que 80 es el número máximo de caracteres en línea
                X +=1
                PosicionarLetraEnPantalla(letra, X, Y)
            sino
                mostrar aviso "llegado al extremo derecho"
            fin si
        caso 'J', 'j'
            Si (X>0)  // no se puede mover más a la izquierda, salvo que se permita, ascender una línea e ir al final de la misma.
                x -=1
                PosicionarLetraEnPantalla(letra, X, Y)
            sino
                mostrar aviso "llegado al extremo izquierdo"
            fin si
        caso 'i, 'I'
            idem que 'J' pero para Y (no para X)
        caso 'k', 'K'
           ídem que 'L' pero para Y (no para X), considerando también el número máximo de líneas en la pantalla..
        Otros casos
            beep, o un mensaje de no reconocer la letra, o de mostrar las opciones correctas, o...
    fin casos      
fin funcion



p.d.: Cambiando los comentarios que por copia y pega, no correspondían en su nueva ubicación... aprovecho para...

Aunque las optimizaciones, siempre se deben hacer una vez que ya funciona correctamente... y deberían correr a cargo del interesado... te explico que:
Una opción más competente es crear un texto cuyo contenido sea una línea completa de espacios (del ancho de pantalla)...

Al inicio del programa el primer carácter en ese texto es la letra a imprimir y luego cada vez se trata de remplazar la letra por un espacio en su ubicación actual y luego remplazar un espacio por la letra en la nueva ubicación de la letra ± 1 posición de la previa...
...así la cadena de texto a imprimir se crea una sola vez y se modifica solo cuando cambia el valor de 'x', (que en ese caso se remplazan solo dos caracteres en la cadena " S" por "S ", ó viceversa), y por tanto no se tendrá que reconstruir la cadena al completo cada vez que se 'mueva' la letra...
2983  Programación / .NET (C#, VB.NET, ASP) / Re: Ejecutar programa mediante esto. en: 15 Mayo 2018, 18:21 pm
quiero crear otra aplicacion capaz de leer esos bytes y me lo convierta en un .exe (en este saco el .exe a convertir con esos bytes es el mensaje)entonces al convertir esto 0x64 0x00 que es el mensaje de texto de la aplicacion 1, me lo convierta en una aplicacion sin ver el codigo fuente verdadero de la aplicacion 1 y solo se vea el 0x64 0x00 0x56
Bueno, aunque Elektro se queja (no sin motivo), yo alcanzo a comprender que necesitas justo lo opuesto a lo que te señale... es decir tener de vuelta los bytes desde el formato literal hexadecimal que muestras.

Supongo que no es más que un simple ejercicio... (porque la otra opción es intentar colar algún virus)...

Y para que Elektro no se manifieste protestón, lo pondré en código (por esta vez)...
Cuando alguna funcionalidad la usas con cierta frecuencia (no creo que este vaya a ser el caso, vaya contradición, ¿no?), resulta muy útil, utilizar las extensiones de tipos, y como la gente no acostumbra a usar extensiones, he preferido hacer una versión al caso...

Es una alternativa a la solución que propone Elektro, al caso no he probado (ni voy a perder tiempo en ello), sobre cual ofrece mejor rendimiento...

Omito todo el detalle de leer y guardar a fichero... básicamente he recurrido a un split...
Código
  1. namespace EjemploConversion{
  2.    //Import the extension method namespace.
  3.    using CustomExtensions;
  4.    class Program {
  5.        // en vez de 'main' puede ser el evento 'validate' de un textbox, por ejemplo... yo he tirado de consola para algo rápido...
  6.        static void Main(string[] args) {    
  7.            string kod = " 0x34 0x22 0x4B 0xB2 0xED 0xAB";  // nota el espacio delante del primero...
  8.  
  9.             //aqui tienes el array de bytes. Haz con ello luego lo que precises (cargarlo a memoria, guardarlo a fichero, etc...).
  10.            byte[] by = kod.FromLitHex() ;
  11. }}}
  12.  
  13. namespace CustomExtensions{
  14.    public static class StringExtension{
  15.        // Convierte una cadena de literales en hexadecimal, a  un array de bytes.
  16.        public static byte[] FromLitHex(this string litHex){                    
  17.            string[] sep = {" 0x"};
  18.            // Split, Replace... realmente son funciones costosas en tiempo, acceder al array de caracteres y saltar entre ellos es más eficiente si lo que buscas es velocidad (pero para pequeños ficheros, no se precisa).
  19.            string[] sBytes = litHex.Split(sep, StringSplitOptions.RemoveEmptyEntries );                  
  20.            Int32 j = sBytes.Length;
  21.            Int32 k = 0;
  22.            byte[] gBytes = new byte[j];
  23.            // NOTA: Si no dejaste el espacio delante del primero (es costoso en tiempo de procesado hacerlo después si no se empezó así), no importa, basta que lo trates (suelto) antes del bucle y luego el bucle comience ya en el índice 1.
  24.            for (k = 0; k < j; k++){
  25.                gBytes[k] = Convert.ToByte(sBytes[k], 16);
  26.            }
  27.            return gBytes;
  28.        }
  29.    }
  30. }    
  31.  


NEBIRE, sabes que apoyo y nunca me he quejado de que compartas pseudo-codigos, pero en esta ocasión me parece realmente excesivo viendo lo que sugieres hacer en dicho pseudo-codígo...
Créeme que convertir ese pseudocódigo en código NET, es mucho más breve, precisamente por los métodos que ya posee (NET).

La cuestión del bucle, es porque a priori, habla de "quiero convertir el archivo", en general sin especificar tamaños... yo he deducido que pueda referirse a ejecutables por que dice "leer esos numeros y ejecutarse", eso de ejecutarse, parece delimitar de alguna manera, pero tal como se explicó podría ser cualquier cosa... Por otro lado el propio Microsoft, tiene librerías de 10Mb. y me he encontrado con empresas donde pululan tochos de algún que otro ciento de Mb. luego sugerir una posibilidad, no implica llevarla a cabo, solo tenerla en cuenta, cuando proceda.

También, te señalo que pseudocódigo, no es la forma de los 80, ni los 90, ni de ninguna década, simplemente es la manera universal... de enseñar y comprender las cosas. El lenguaje en realidad es algo por lo que nadie debeiera preguntar en los foros, porque la especificación de cada uno de ellos está recogida en la web de la corporación que mantiene dicho lenguaje.

Los problemas de la gente (lo normal), son dos: Falta de comprensión de como resolver un problema y falta de comprensión de qué usar en un lenguaje para aplicar los conocimientos del problema. Lo primero se resuelve con pseudocódigo, lo segundo con la especificación del lenguaje.
2984  Foros Generales / Foro Libre / Re: Sobre la retirada del articulo "10011011" (o 155) en: 14 Mayo 2018, 21:41 pm
Yo creo que es más de lo mismo... un pulso al poder. un poco ganas de J0D35...

El problema de la intolerancia es que recáe en las personas, que son las intolerantes y hacen gala de ello, así que seguiremos viendo el artículo h9B, presente en alguna ocasión más...
Los trolls son así, o les das un buen varapalo o siguen erre que erre.
2985  Foros Generales / Noticias / Re: El Gobierno quiere que las cabinas y las guías telefónicas dejen de ser un ... en: 14 Mayo 2018, 19:12 pm
Yo tampoco estoy a favor, pero 18.000 cabinas, son demasiadas si no generan ni siquiera para su mantenimiento.

Las guías telefónicas, tampoco las veo prácticas (las 'páginas blancas' pero sí las 'páginas amarillas')... Desde luego, una guía aunque no sea en papel, donde aparece un listado exhaustivo (con posibilidad de ordenarlo de varias maneras) de empresas y negocios, es más justo que 'google' que posiciona según sus 54N705 C0j0N35...
2986  Foros Generales / Noticias / Re: "Pases porno" que se compran en kioscos: una propuesta de Reino Unido para .... en: 14 Mayo 2018, 19:04 pm
Ya... pero esto es lo mismo, que vender alcohol y revistas porno... se requiere ser mayor de edad, pero cada fin de semana en cualquier ciudad se ve a menores borrachos... Cuando yo era adolescente (por ejemplo), en la escuela circulaban montones de revistas porno, y nadie cumplía la edad... pero era requisito en los quiscos presentar documento de identidad ante la (manifiesta) duda sobre la edad...

En realidad, es descargar en otros hombros la 'culpabilidad'... de si los menores tienen acceso a no a contenidos adultos...

En cualquier caos, para que fuere (mínimamente) efectivo, requeriría que todos los países exigieran esas credenciales... sino, los jóvenes británicos, verán páginas porno asíáticas (por ejemplo), en tanto que estarán impidiendo el acceso al porno inglés a gente de procedencia no inglesa (por no poder disponer de esas credenciales que son locales)...


2987  Foros Generales / Noticias / Re: El envío de SMS vuelve a crecer después de 9 años ¿por qué? en: 14 Mayo 2018, 18:50 pm
Creo que el crecimiento es injustificado, falseado e irrelevante...

Los únicos SMS que recibo son de empresas... la mayoría, desde la compañia telefónica... como no les cojo nunca el tlf. para atender spam (añado su número cada vez a contactos y los desvió hacia el buzón de voz ..ergo la papelera), es la única opción de enviar publicidad...

Ciertamente para una empresa de telefónía, los mensajes SMS, eran un auténtico chollo, una gallina d elos huevos de oro... 160 caracteres tenían (tienen aún) un precio cuantificable... simplemente ridículo... ni siquiera, al paso de los años (30 años después), han aumentado esa cifra... el teléfono móvil (celular), desde primeros de los 90 (que es cuando se extendió masivamente a todo el mundo), seguimos con los 160 cochinos caracteres, como si la tecnología no hubiera evolucionado...

Así quede bien, justamente para eso, para autenticación de dos pasos y tal...
2988  Programación / .NET (C#, VB.NET, ASP) / Re: Ejecutar programa mediante esto. en: 14 Mayo 2018, 18:16 pm
Hola, se que se puede pero nose hacerlo soy un poco nuevo en el lenguaje de c# lo que quiero hacer es esto:

quiero convertir el archivo asi 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F(ya lo hice) y quiero crear un form capaz de leer esos numeros y ejecutarse tal cual como si tuviera el codigo fuente
Si es por conversión, simplemente crea un array de 256 valores de tipo string.
Al cargar el programa, genera el array...básicamente es un byte en formato
byteHex = "0x" Hex(valor)  // un literal de byte en formato hexadecimal...
Esto es, cada valor del array es un byte (el mismo cuyo orden ocupa), convertido en hexadecimal, precedido por el prefijo "0x".

Luego cuando cargues un fichero, lo lees (tu ya ves si entero o en tramos según lo largo que sea), y en un bucle vas traduciendo la salida...

Código:
array de Strings = funcion Traducir(array de bytes Buffer() )
    entero k
    array de string s()

    bucle para k desde 0 hasta buffer.Lenght -1
        s(k) = Conv(buffer(k))  // Conv es el array que generamos... al iniciar el programa
    fin bucle

    devolver s
fin funcion

buleano = funcion TraducirFichero(string Ruta)
   array de bytes Buffer()
   entero i, j, k
   constante entera Mb = 2 a la 20 // 1Mb.
   string rSalida  // ruta del fichero de salida

   Si abrirFichero(ruta) = TRUE
       i = tamañoFichero(ruta) // crea un objeto file y pregunta por su propiedad size.
       k = (i  \ Mb) // Bloques: cantidad de megabytes que tiene el fichero (es una división entera).
       j = (i and (mb-1)) // Resto que no alcanza 1Mb.

       Hacer
           rSalida= ElegirRutaSalida(ruta)  // decide una ruta para el fichero de salida. se parte de la ruta de entrada, y como mínimo debería cambiarse al extensión...
       Repetir Mientras Esvalido(rSalida)= FALSE  
       // EsValido sería una función que verifique, que la ruta de salida es adecuada (no tiene caracteres ilegales, no existe ya como fichero (no quieres sobrescribirlo), la unidad existe, etc... etc...). Puedes añadir una opción cancelar, si no el bucle insistirá...
        AbrirFichero(rSalida)

        Si (k>0) //si el fichero tiene 1 o más bloques enteros (Megabytes)
            redimensionar buffer(0 a Mb-1)
            bucle para n desde 0 a k-1
                buffer = leer(ruta)  // se supone que el método usado actualiza el puntero de lectura...  
                escribir(Traducir(buffer)) //ídem con el de escritura...
            siguiente
        Fin si

        Si (j>0)  //si hay algún resto que no encaja en 1mb.
            redimensionar buffer(0 a j-1)
            buffer = leer(ruta)  
            escribir(Traducir(buffer))
        fin si
        devolver TRUE
   Fin si
fin funcion

Con esto ya conviertes un fichero cualquiera sea su contenido (parece que te interesan solo ejecutables) en ese formato de texto legible sin separación entre unidades.

Respecto de la segunda parte:
 
Citar
y ejecutarse tal cual como si tuviera el codigo fuente
Es harina de otro costal... básicamente tendrías que hacer un lenguaje intepretado, para poder 'colar' y ejecutar lo que tú pretendes... (camuflado)...
Para que no te quedes con las ganas pensando que uno no quiere colaborar, te diré que un ejecutable, no se ejecuta al vuelo JAMÁS, primero debe cargarse en memoria, y debe reasignarse las direcciones de memoria REALEs, mientras es fichero, las direcciones dentro del fichero son relativas al propio fichero, solo cuando se carga en memoria, el cargador se encarga de sumar a todas esas direcciones la direccioón real, además, no tod se queda ahí, la reserva de memoria dinámica, tampoco queda incluída en el fichero, esta se asigna solo cuando se solicita y la dirección real es que el S.O. encuentre libre (no la dirección de carga del ejecutable o librería, esto es del código). Luego una conversión de un formato, no puede luego ejecutarse tal cual, con solo 'devolverlo' a su formato original... otra cosa es convertirlo todo de una vez a fichero y mandarlo ejecutar, pero es lo mismo que no haberlo convertido... o bien el método que ofrece Elektro...
Sin embargo recuerda que los antivirus prestan especial atención a los ficheros recién creados, o que abren y ejecutan... ...luego la ocultación (única razón para ese cambio de formato) sería solo 'eficaz' hasta el momento de ejecutarlo... la otra opción es como te dije interpretarlo...

p.d.:
Obviamente huelga decir que esto último no se explica en dos párrafos... y mucho menos si no tienes ni P4J0L354 idea de por dónde empezar algo tan simple como una mera conversión de formato:
valor = cualquier byte
byteHex = "0x" Hex(valor)
Si esa es la primera producción que te expongo (la que se encarga de la traducción), no te cuento todo lo que supone la compilación completa de un lenguaje, que puede llevar algunos cientos de producciones la mayoría más complejas que esa...
 
2989  Foros Generales / Noticias / Re: Millonarios esconden sus criptofortunas de bitcoines en búnkeres subterráneos en: 13 Mayo 2018, 03:15 am
Es una 'noticia' de RT, qué se puede esperar...?

Me hace gracia eso de "un búnker con un servidor desconectado"...
2990  Programación / Desarrollo Web / Re: Duda javascript: desordenar array con bucle en: 13 Mayo 2018, 02:10 am
Solo añadir que el bucle no precisa llegar a 0, cuando solo queda un elemento por ordenar resulta absurdo pedir que elija otro (si solo queda 1), al azar para que ocupe su puesto...

Recuerda que cada lenguaje tiene una forma de activar el generador aleatorio, mediante una semilla, si no, suelen repetirse las secuencias, lo  cual es más notorio, cuando se piden exactamente de cada vez las mismas cantidades de números aleatorios.
Generalmente elegir una semilla adecuada es algo complicado, pero salvo que haya un botón de 'destruir el mundo', basta con usar el timer (los segundos que han pasado desde la medianoche), incluso usar ese valor para elegir un primo de una lista. y con es eprimo 'moduar' ese valor del timer para usarlo como semilla... 
Páginas: 1 ... 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 [299] 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines