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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 49
181  Programación / Programación C/C++ / Re: Como copiar una cadena a otra crarcter por caracter en: 12 Julio 2012, 08:04 am
¡Hola!

Puedes hacerlo con un bucle for. Recorres la primera cadena y vas asignándole cada carácter a la cadena2.

Si tienes alguna duda pregunta  :D

Saludos!
182  Programación / Programación C/C++ / Re: como hacer un generador?? en: 12 Julio 2012, 07:50 am
https://foro.elhacker.net/programacion_cc/brute_force_by_n0body-t278082.0.html
No se muy bien como va eso de recursividad e iteracion, pero tengo entendido por el post que eso es un generador recursivo. En el recopilatorio de sources interesantes hay otro iterativo, creo.

Saludos.

Gracias por el link! Es algo parecido, pero no exactamente igual.

Por cierto, ¡he editado el programa y ya va bien y es más eficiente! Lo que he modificado es la función numeros(). Ya no tiene mil y una condiciones, y el programa va perfecto (al menos por ahora no se me ha calado como otras veces, va escribiendo todo en el fichero correctamente, imprimiendo todo bien por pantalla... Aquí lo dejo:

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

¡A ver si me animo y sigo editándolo para hacerlo aún mejor!

Saludos!
183  Programación / Programación C/C++ / Re: como hacer un generador?? en: 12 Julio 2012, 02:28 am
Mi código no se salta ninguna combinación (aunque, como ya he dicho, se para en un momento determinado por la ineficiencia) y además lo imprime bien  :huh:

EDITO: Además, genera el .txt... Sigo comprobando pero no encuentro errores...
184  Programación / Programación C/C++ / Re: como hacer un generador?? 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!
185  Programación / Programación C/C++ / Re: recursividad C en: 12 Julio 2012, 01:59 am
Bueno, empiezo poco a poco:

Si en main() llamas a la función y le vas a asignar un valor a una variable a partir de esta, la función debe devolver algo, no ser void (a parte, en la función pones "return;", a pesar de que no devuelves nada y la función es void).

El número no va a ser nunca un '\0', no estás trabajando con cadenas de caracteres...

Ah, y en main() debes pasarle como parámetros a funcionRecursiva la variable f, no el número 0.

Respecto al algoritmo para invertir el número... Podrías averiguar cuántas cifras tiene el número (en otra función), dividiendo entre 10 el número int hasta que te de 0. Entonces, una vez tengas eso, se lo pasas por parámetros a la función recursiva. Entonces, sabiendo, por ejemplo, que el número 123 tiene 3 cifras, puedes hacer esto:

resultado = (num % 10) * 10^2;
num/10;

Así, de forma recursiva, invertirás el número. Seguramente haya alguna forma más sencilla de explicar, pero es lo que se me ha ocurrido ahora mismo  :( .

Saludos.
186  Programación / Programación C/C++ / Re: recursividad C en: 12 Julio 2012, 01:36 am
¿Qué has intentado? Es para poder ayudarte con tus dudas  :D

Saludos
187  Programación / Programación C/C++ / Re: Alguna ayuda :D seria agradable ... ( C) en: 12 Julio 2012, 01:18 am
en este caso no podes utilizar strcpy sino se reserva memoria dinamica, ya que nombrearchivo es un puntero. La asignacion es correcta


m4rkk0s no entendi que es lo que queres hacer, si podes dar un mejor ejemplo. Otra cosa esta combinacion "w+a" no es valida ¿¿te compila??


Saludos

Le dije eso porque las dudas que está preguntando son para un trabajo, y por eso en los temas que crea no pone el código entero, y como hace unos días ya le dije que le tenía que asignar memoria dinámica, en el mensaje anterior supuse que ya tenía una función en otra parte del código que lo hiciera.

Saludos!
188  Programación / Programación General / Re: Lenguaje de programacion a estudiar en: 11 Julio 2012, 22:43 pm
Sí, yo creo que PHP + html + CSS tienen mucha salida laboral, ya que hoy en día la mayor parte de las empresas tienen webs, y no solo tienen que hacerlas, sino también tienen que editarlas, mantenerlas, solucionar bugs...

De todas formas que te lo confirme alguien, ya que no estoy muy bien informado sobre este tema.

Saludos.
189  Programación / Programación C/C++ / Re: suprimir espacios en: 11 Julio 2012, 22:22 pm
¡Hola!

No funciona bien porque lías las variables. Pones:

Código
  1. if( texto[i] == ' ' )/* si hay un espacio*/

Sin embargo, en el bucle for de después los espacios se los quitas a palabra, no a texto , por tanto la modificación se hará cuando encuentre un espacio en la cadena original, y no en la que estás editando, y te dará mal. Quedaría así:

Código
  1. for( i = 0 ; texto[i] != '\0' ; i++ )
  2.     {
  3.          if( palabra[i] == ' ' )/* si hay un espacio*/
  4.          {
  5.              for( j = i+1 ; palabra[j] != '\0' ; j++ )
  6.              {
  7.                   palabra[j-1] = palabra[j];
  8.  
  9.              }
  10.        palabra[j-1] = '\0';
  11.          }
  12.  
  13.     }

Saludos!
190  Programación / Programación C/C++ / Re: como hacer un generador?? 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!
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines