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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como hacer un generador??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: como hacer un generador??  (Leído 22,422 veces)
jaime.urizar

Desconectado Desconectado

Mensajes: 4


Ver Perfil
como hacer un generador??
« en: 11 Julio 2012, 08:34 am »

hola amigos

les pido ayuda con algo que vi desde hace mucho, es como realizar un generador que muestre como resultado:

AAAAA
AAAAB
AAAAC
.........
.........
ZZZZZ

y algo mucho mas desafiante que no pude ni encontrar partes en internet y bueno mi conocimiento no es tan amplio pero decearia aprender a poder generar un..


AAAAA00000
AAAAA00001
AAAAA00002
....
....
....
AAAAB00000
AAAAB00001
....
.....
ZZZZZ99999

solo pude sacar cuantos resultados tendre :-( (son 14348907000000 posibles combinaciones)


una ayudita porfavor enserio me mata la curiosidad de aprender a hacer un contador o generador de ese tipo, y gracias de antemano por todo


En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #1 en: 11 Julio 2012, 14:06 pm »

Al ver este tema, me ha parecido interesante y he creado uno del primer tipo que pides (solo con letras).

Por ahora solo tiene todas las posibles combinaciones de cinco caracteres comprendidos entre la 'A' a 'Z'. Después lo mejoraré para que acepte números y para que sea de n caracteres. Eso sí, creo que el programa no es muy eficiente, así que también tengo que corregir este punto.

Código
  1. #include <stdio.h>
  2.  
  3. void PrimeraLetra(char *Letras, int n)
  4. {
  5.    printf("%s\n", Letras);
  6.    Letras[n]++;
  7.    if(Letras[n] <= 90) PrimeraLetra(Letras, n);
  8.    else Letras[n] = 65;
  9. }
  10.  
  11. void SegundaLetra(char *Letras, int n)
  12. {
  13.    PrimeraLetra(Letras, n);
  14.    Letras[n-1]++;
  15.    if(Letras[n-1] <= 90) SegundaLetra(Letras, n);
  16.    else Letras[n-1] = 65;
  17. }
  18.  
  19. void TerceraLetra(char *Letras, int n)
  20. {
  21.    SegundaLetra(Letras, n);
  22.    Letras[n-2]++;
  23.    if(Letras[n-2] <= 90) TerceraLetra(Letras, n);
  24.    else Letras[n-2] = 65;
  25. }
  26.  
  27. void CuartaLetra(char *Letras, int n)
  28. {
  29.    TerceraLetra(Letras, n);
  30.    Letras[n-3]++;
  31.    if(Letras[n-3] <= 90) CuartaLetra(Letras, n);
  32.    else  Letras[n-3] = 65;
  33. }
  34.  
  35. void QuintaLetra(char *Letras, int n)
  36. {
  37.    CuartaLetra(Letras, n);
  38.    Letras[n-4]++;
  39.    if(Letras[n-4] <= 90) QuintaLetra(Letras, n);
  40.    else Letras[n-4] = 65;
  41. }
  42.  
  43. int main()
  44. {
  45.    char Letras[] = "AAAAA";
  46.    QuintaLetra(Letras, 4);
  47.    return 0;
  48. }
  49.  

Si tienes alguna duda pregunta  :D

Saludos.


En línea

SXF

Desconectado Desconectado

Mensajes: 189



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #2 en: 11 Julio 2012, 18:16 pm »

Una pregunta 90 y 65 que indican?¿
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #3 en: 11 Julio 2012, 18:19 pm »

Una pregunta 90 y 65 que indican?¿

Se me olvidó poner un comentario para explicarlo. 65 es el valor ASCII del carácter 'A', y 90 el del carácter 'Z'.

Sé que también se podría poner así:

Código
  1. if(Letras[n] <= 'Z') PrimeraLetra(Letras, n);

Pero he cogido la costumbre de poner el valor en ASCII.
En línea

jaime.urizar

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: como hacer un generador??
« Respuesta #4 en: 11 Julio 2012, 19:09 pm »

Gracias SXF es muy bueno, para agregar los números sería un buen desafío ya que tendríamos que unificar todo el método "LETRA X Número" gracias de nuevo SXF me daba curiosidad saber como genera ese tipo de código, dime algo más vi en algunos códigos que guardan lo que imprimen en pantalla con una extensión ".txt" como hacen eso???
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #5 en: 11 Julio 2012, 19:43 pm »

He editado mi código para que puedas poner todo en un archivo. Aquí te lo dejo:

Código
  1. #include <stdio.h>
  2.  
  3. FILE *fp;
  4.  
  5. void PrimeraLetra(char *Letras, int n)
  6. {
  7.    printf("%s\n", Letras); //Imprimimos
  8.    fputs(Letras, fp);
  9.    fputc('\n', fp);
  10.    Letras[n]++; //Pasamos al siguiente carácter [al siguiente valor ASCII]
  11.    if(Letras[n] <= 90) PrimeraLetra(Letras, n); /*90 es el valor ASCII de  'Z'. Si no se ha superado
  12.                                                                                   ese valor, significa que el nuevo carácter está
  13.                                                                                   comprendido entre la 'A' y la 'Z', y, por tanto, es
  14.                                                                                   un carácter de los que queremos generar. Así, llamamos
  15.                                                                                   a la función de nuevo.*/
  16.    else Letras[n] = 65;
  17. }
  18.  
  19. void SegundaLetra(char *Letras, int n) //Algo similar a la función anterior.
  20. {
  21.    PrimeraLetra(Letras, n);
  22.    Letras[n-1]++;
  23.    if(Letras[n-1] <= 90) SegundaLetra(Letras, n);
  24.    else Letras[n-1] = 65;
  25. }
  26.  
  27. void TerceraLetra(char *Letras, int n)
  28. {
  29.    SegundaLetra(Letras, n);
  30.    Letras[n-2]++;
  31.    if(Letras[n-2] <= 90) TerceraLetra(Letras, n);
  32.    else Letras[n-2] = 65;
  33. }
  34.  
  35. void CuartaLetra(char *Letras, int n)
  36. {
  37.    TerceraLetra(Letras, n);
  38.    Letras[n-3]++;
  39.    if(Letras[n-3] <= 90) CuartaLetra(Letras, n);
  40.    else  Letras[n-3] = 65;
  41. }
  42.  
  43. void QuintaLetra(char *Letras, int n)
  44. {
  45.    CuartaLetra(Letras, n);
  46.    Letras[n-4]++;
  47.    if(Letras[n-4] <= 90) QuintaLetra(Letras, n);
  48.    else Letras[n-4] = 65;
  49. }
  50.  
  51. int main()
  52. {
  53.    char Letras[] = "AAAAA";
  54.    fp = fopen("combinacion.txt", "w");
  55.    QuintaLetra(Letras, 4);
  56.    fclose(fp);
  57.    return 0;
  58. }
  59.  

Las funciones que he utilizado, para que veas cómo lo he hecho, son:

fopen, fclose, fputc, fputs

Cuando vaya editando el código iré poniéndolo, a ver si después lo hago más eficiente y además meto los números.

Saludos.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #6 en: 11 Julio 2012, 21:54 pm »

He terminado el código para que muestre todas las combinaciones posibles desde AAAAA00000 hasta ZZZZZ99999.

El algoritmo está bien, sin embargo, es tan ineficiente que a mitad del programa me sale un mensaje que dice "Generador.exe dejó de funcionar. Windows está buscando una solución al problema", pulso en aceptar y se cierra el programa...

Código
  1. #include <stdio.h>
  2.  
  3. FILE *fp;
  4.  
  5. void numeros(char *Letras, int n)
  6. {
  7.    printf("%s\n", Letras); //Imprimimos
  8.    fputs(Letras, fp);
  9.    fputc('\n', fp);
  10.  
  11.    Letras[n+5]++;
  12.  
  13.    if(Letras[n+2] > 57)
  14.    {
  15.        Letras[n+2] = 48;
  16.        Letras[n+1]++;
  17.    }
  18.    else if(Letras[n+3] > 57)
  19.    {
  20.        Letras[n+3] = 48;
  21.        Letras[n+2]++;
  22.    }
  23.    else if (Letras[n+4] > 57)
  24.    {
  25.        Letras[n+4] = 48;
  26.        Letras[n+3]++;
  27.    }
  28.    else if(Letras[n+5] > 57)
  29.    {
  30.        Letras[n+5] = 48;
  31.        Letras[n+4]++;
  32.    }
  33.    if(Letras[n+1] <= 57) numeros(Letras, n);
  34.  
  35. }
  36.  
  37. void PrimeraLetra(char *Letras, int n)
  38. {
  39.  
  40.    numeros(Letras, n);
  41.    Letras[n]++; //Pasamos al siguiente carácter [al siguiente valor ASCII]
  42.    if(Letras[n] <= 90) PrimeraLetra(Letras, n); /*90 es el valor ASCII de  'Z'. Si no se ha superado
  43.                                                                                   ese valor, significa que el nuevo carácter está
  44.                                                                                   comprendido entre la 'A' y la 'Z', y, por tanto, es
  45.                                                                                   un carácter de los que queremos generar. Así, llamamos
  46.                                                                                   a la función de nuevo.*/
  47.    else Letras[n] = 65;
  48. }
  49.  
  50. void SegundaLetra(char *Letras, int n) //Algo similar a la función anterior.
  51. {
  52.    PrimeraLetra(Letras, n);
  53.    Letras[n-1]++;
  54.    if(Letras[n-1] <= 90) SegundaLetra(Letras, n);
  55.    else Letras[n-1] = 65;
  56. }
  57.  
  58. void TerceraLetra(char *Letras, int n)
  59. {
  60.    SegundaLetra(Letras, n);
  61.    Letras[n-2]++;
  62.    if(Letras[n-2] <= 90) TerceraLetra(Letras, n);
  63.    else Letras[n-2] = 65;
  64. }
  65.  
  66. void CuartaLetra(char *Letras, int n)
  67. {
  68.    TerceraLetra(Letras, n);
  69.    Letras[n-3]++;
  70.    if(Letras[n-3] <= 90) CuartaLetra(Letras, n);
  71.    else  Letras[n-3] = 65;
  72. }
  73.  
  74. void QuintaLetra(char *Letras, int n)
  75. {
  76.    CuartaLetra(Letras, n);
  77.    Letras[n-4]++;
  78.    if(Letras[n-4] <= 90) QuintaLetra(Letras, n);
  79.    else Letras[n-4] = 65;
  80. }
  81.  
  82. int main()
  83. {
  84.    char Letras[] = "AAAAA00000";
  85.    fp = fopen("combinacion.txt", "w");
  86.    QuintaLetra(Letras, 4);
  87.  
  88.    fclose(fp);
  89.    return 0;
  90. }
  91.  

Me parece a mí que la dificultad de este problema está más en la eficiencia... Al menos tenemos ya para que nos haga desde AAAAA hasta ZZZZZ...

Saludos!
En línea

jaime.urizar

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: como hacer un generador??
« Respuesta #7 en: 12 Julio 2012, 01:46 am »

muchas gracias DickGumshoe lo estoy probando, mira yo encontre este codigo dame tu opinion de que tal esta:

{
char a,b,c,d,e,n1,n2,n3,n4,n5;

  for(a = 'A'; a<= 'Z'; a++)
   for(b = 'A'; b <= 'Z'; b++)
    for(c = 'A'; c <= 'Z'; c++)
     for(d = 'A'; d <= 'Z'; d++)
      for(e = 'A'; e <= 'Z'; e++)
       for(n1 = 0; n1 < 10; n1++)
        for(n2 = 0; n2 < 10; n2++)
         for(n3 = 0; n3 < 10; n3++)
          for(n4 = 0; n4 < 10; n4++)
           for(n5 = 0; n5 < 10; n5++)
             printf("%c%c%c%c%c%d%d%d%d%d\n",a,b,c,d,e,n1,n2,n3,n4,n5);
}



y una ultima pregunta como se utiliza para guardar lo que se imprime en pantalla en un ".txt"

probando tu codigo me di cuenta que imprime de esta manera:

AAAAIW:0232
AAAAIX:0233
AAAAIY:0234
AAAAIZ:0235


deberia de imprimir

AAAAIW00232
AAAAIW00233
AAAAIW00234
AAAAIW00235
AAAAIW00236
AAAAIW00237

se salta muchas combinaciones existentes
muchas gracias
« Última modificación: 12 Julio 2012, 02:07 am por jaime.urizar » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: como hacer un generador??
« Respuesta #8 en: 12 Julio 2012, 02:10 am »

Ese código debe salir también, pero yo hice el programa a mi manera porque me pareció muy típico eso de hacer tantos for anidados, y me gustó hacerlo de otra forma, con recursividad.

Eso sí, en ese código las variables n1, n2, n3, n4 y n5 son char, no debes imprimirlas como %d, y en el bucle for no es desde 0 hasta 9, sino que tienes que hacer desde 48 hasta 57 (valor ASCII de 0 y 9, respectivamente).

Para imprimirlo en un .txt tienes que declarar una variable así:

FILE *nombre_variable;

Entonces, para editar el .txt, eliges un nombre y el modo en que lo vas a abrir:

nombre_variable = fopen ("nombre_archivo.txt", "w");

En este caso es un .txt, pero también puedes poner .dat o la extensión que quieras. El modo en que abrimos el archivo es "w", (write, escritura). Pero hay muchos más. Para conocerlos, puedes ver el enlace que te pasé en un mensaje anterior con la función fopen() explicada.

Ya usas la función fputs() para poner una cadena en el fichero (también te pasé el enlace a cómo usarla).

Y para cerrar el fichero, poner:

fclose(nombre_variable);

A ver si conseguimos que nos salga (aunque el algoritmo mío está bien, pero no llega a terminar, no sé por qué, a ver si alguien me puede comentar por qué...)

Saludos!
En línea

jaime.urizar

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: como hacer un generador??
« Respuesta #9 en: 12 Julio 2012, 02:25 am »

probando tu codigo me di cuenta que imprime de esta manera:

AAAAIW:0232
AAAAIX:0233
AAAAIY:0234
AAAAIZ:0235


deberia de imprimir

AAAAIW00232
AAAAIW00233
AAAAIW00234
AAAAIW00235
AAAAIW00236
AAAAIW00237

se salta muchas combinaciones existentes ademas no genera el .txt
muchas gracias
En línea

Páginas: [1] 2 3 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como hago para crear un generador de claves
Programación Visual Basic
trueno74 2 2,114 Último mensaje 27 Abril 2006, 00:06 am
por Hendrix
hacer un generador de id con muestras
Ingeniería Inversa
robertofd1995 4 4,846 Último mensaje 31 Octubre 2013, 15:13 pm
por robertofd1995
Como conseguir un generador de digito de control
Ingeniería Inversa
wiredbob 3 2,862 Último mensaje 22 Julio 2014, 12:02 pm
por wiredbob
***Como hacer un generador de licencias en python « 1 2 »
Scripting
Arn_dj 10 9,465 Último mensaje 22 Diciembre 2014, 16:19 pm
por Arn_dj
MOVIDO: ***Como hacer un generador de licencias en python
Programación General
Eleкtro 0 1,649 Último mensaje 8 Diciembre 2014, 23:17 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines