Autor
|
Tema: Como saber todas las combinaciones posibles de letras y numeros? (Leído 29,427 veces)
|
peterfly
Desconectado
Mensajes: 94
|
Hola y espero que me puedan ayudar...
Hoy me he encontrado con un problema...
Quisiera saber el número de combinaciones que se pueden generar con las 27 letras del alfabeto + los 10numeros (del 0 al 9) y cuales son esas combinaciones.
Es decir, todas las combinaciones posibles de de las letras mayúsculas + letras minúsculas + los numeros.
He pensado que podría hacer un programa en C que me hiciera esta función... pero la verdad es que después de mirar un poco mis apuntes no tengo nada parecido...
Bueno, si alguien fuera tan amable de guiarme un poco en mi proyecto a seguir le estaría eternamente agradecido.
Y bueno si alguien conoce otra forma o algun programa que haga esto... igualmente me vale, no hace falta que lo programe yo necesariamente xD
Muchas gracias de antemano.
|
|
|
En línea
|
|
|
|
DickGumshoe
|
¡Hola! Precisamente estos días hemos estado tratando un tema muy parecido en el foro. Es este: http://foro.elhacker.net/programacion_cc/como_hacer_un_generador-t366597.0.html¿Lo que quieres es que en cada combinación aparezcan todas las letras del abecedario, tanto en mayúsculas como en minúsculas y los números del 1 al 9? El programa en sí no sería complicado de hacer, pero tardaría mucho en finalizar la ejecución del programa (ten en cuenta que son 26 * 2 + 9 caracteres, es decir, 61 caracteres en total, y en cada secuencia también hay 61 caracteres. Por lo tanto hay 8,03748056 × 10 108 combinaciones posibles...). *Digo 26 caracteres porque no cuento la 'ñ'. Aquí te dejo un código que genera todas las combinaciones posibles desde AAAAA00000 hasta ZZZZZ99999: #include <stdio.h> FILE *fp; void numeros(char *Letras, int n) { int i; for(i =0;i <100000;i ++)printf("%s%.5d\n",Letras , i ); } void Generador(char *Letras, int n) { int count, resta=1, llamada; while(llamada != 5) { numeros(Letras, n); count = n; Letras[n]++; llamada = 0; while(count >= 0) { if(Letras[count] > 90) { Letras[count] = 65; Letras[count-1]++; llamada++; } count--; resta++; } } } int main() { char Letras[] = "AAAAA"; fp = fopen("combinacion.txt", "w"); Generador(Letras, 4); return 0; }
No obstante, en el tema que te he pasado encontrarás el planteamiento y las soluciones de otros usuarios (algunas de ellas son geniales!), así que te vendrá muy bien pasarte por allí para que te vayas haciendo una idea de cómo hacer tu código. Saludos!
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Tambien, cuando veas esa tema, te daras cuenta de que si quieres almacenar todas esas combinaciones en archivos necesitaras varios cientos de TB. Saludos. PD: Si esa era tu intencion, siento decepcionarte
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
peterfly
Desconectado
Mensajes: 94
|
muchas gracias amigos... pero una duda.. con el código sacado del enlace que me pasaste: #include <stdio.h> FILE *fp; void numeros(char *Letras, int n) { int i; for(i=0;i<100000;i++) { printf("%s%.5d\n",Letras, i); fprintf(fp, "%s%.5d\n", Letras, i); } } void PrimeraLetra(char *Letras, int n) { numeros(Letras, n); Letras[n]++; //Pasamos al siguiente carácter [al siguiente valor ASCII] if(Letras[n] <= 90) PrimeraLetra(Letras, n); /*90 es el valor ASCII de 'Z'. Si no se ha superado ese valor, significa que el nuevo carácter está comprendido entre la 'A' y la 'Z', y, por tanto, es un carácter de los que queremos generar. Así, llamamos a la función de nuevo.*/ else Letras[n] = 65; } void SegundaLetra(char *Letras, int n) //Algo similar a la función anterior. { PrimeraLetra(Letras, n); Letras[n-1]++; if(Letras[n-1] <= 90) SegundaLetra(Letras, n); else Letras[n-1] = 65; } void TerceraLetra(char *Letras, int n) { SegundaLetra(Letras, n); Letras[n-2]++; if(Letras[n-2] <= 90) TerceraLetra(Letras, n); else Letras[n-2] = 65; } void CuartaLetra(char *Letras, int n) { TerceraLetra(Letras, n); Letras[n-3]++; if(Letras[n-3] <= 90) CuartaLetra(Letras, n); else Letras[n-3] = 65; } void QuintaLetra(char *Letras, int n) { CuartaLetra(Letras, n); Letras[n-4]++; if(Letras[n-4] <= 90) QuintaLetra(Letras, n); else Letras[n-4] = 65; } int main() { char Letras[] = "AAAAA"; fp = fopen("combinacion.txt", "w"); QuintaLetra(Letras, 4); fclose(fp); return 0; } como puedo acer para que se mezclen los numeros y las letras??? me refiero a que no esten los numeros por un lado y las letras por otro, sino todo en uno...
|
|
|
En línea
|
|
|
|
DickGumshoe
|
Ese código que has puesto fue otro que hice, pero después hice otra versión que no hacía tantas llamadas recursivas (el que he puesto en este tema, en mi primer mensaje).
Para mezclar números y letras tendrías que fijarte en el código ASCII. Empezarías por 00000 (o con tantos caracteres como desees), y vas aumentando (tal y como en el código que te pasé). Cuando uno de los caracteres sea mayor que 9, el carácter en ASCII que le sigue es ':', y lo que quieres es que después del 9 salga la A. Por tanto, haces un condicional en el que si un carácter > 9, carácter == 65. A partir de ahí sigues sumando y ya todo sería como en los códigos del tema que puse.
Espero que te hayas hecho una idea.
Saludos!
|
|
|
En línea
|
|
|
|
nb248077
Desconectado
Mensajes: 18
|
resien empiezo a programar en c++ me podrias decir donde iria el condicional y el caracter?
|
|
|
En línea
|
|
|
|
DickGumshoe
|
resien empiezo a programar en c++ me podrias decir donde iria el condicional y el caracter?
¿A qué te refieres? ¿Es de este tema, o de otro? Saludos!
|
|
|
En línea
|
|
|
|
nb248077
Desconectado
Mensajes: 18
|
de este tema... es que no se donde iria el condicional y el caracter que le digiste a peterfly con el codigo de peterfly
|
|
|
En línea
|
|
|
|
DickGumshoe
|
Para empezar tendrías que sustituir char Letras[] = "AAAAA";
Por: char Letras[] = "00000";
Para que la primera combinación fuese la 00000. Y en la función Generador irían las condiciones: void Generador(char *Letras, int n) { int count, resta=1, llamada; while(llamada != 5) { count = n; Letras[n]++; llamada = 0; while(count >= 0) { if(Letras[count] == 58) Letras[count] = 65; if(Letras[count] > 90) { Letras[count] = 48; Letras[count-1]++; llamada++; } count--; resta++; } } }
Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como pasar de letras a numeros
Programación Visual Basic
|
kakinets
|
2
|
2,789
|
2 Julio 2005, 21:05 pm
por maxnet
|
|
|
Mi portatil no muestra todas las letras
Seguridad
|
kmeljess
|
2
|
4,471
|
15 Noviembre 2011, 03:34 am
por kmeljess
|
|
|
Combinaciones con 54 numeros
.NET (C#, VB.NET, ASP)
|
mr_marley
|
3
|
9,591
|
27 Noviembre 2011, 01:56 am
por mr_marley
|
|
|
Programa que entretege todas las combinaciones posibles de letras de una palabra
Programación C/C++
|
freakx
|
0
|
5,584
|
23 Enero 2012, 04:55 am
por freakx
|
|
|
posibles combinaciones de sumas de campos
PHP
|
romanjr
|
0
|
2,162
|
15 Febrero 2012, 20:11 pm
por romanjr
|
|