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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 [121] 122
1201  Seguridad Informática / WarZone / Re: Criptografia - Basico en: 14 Diciembre 2009, 16:36 pm
Jajaja! Pues si que lo tenia bien descifrado y la respuesta era la que pensaba, pero no se porque, ayer no me la aceptaba y hoy si.

Es posible que sea por algun porblema que tengo con la conexion, pero por si acaso doy el aviso. Introduciendo la resppuesta correcta, la respuesta que recibi ayer fue: Muahahaha! (o algo asi)

Saludos!
1202  Seguridad Informática / WarZone / Criptografia - Basico en: 13 Diciembre 2009, 21:08 pm
Hola a todos!

La respuesta a criptografia-basico es el mensaje descifrado, o algo que tiene que ver con numero o palabra descrito en el mensaje descifrado?

¿O lo he descifrado mal?

Estoy desorientado, no pido la resolucion, solo saber si voy por buen camino...

Saludos!
1203  Seguridad Informática / WarZone / Re: primos.wz en: 10 Diciembre 2009, 05:59 am
En este momento lo tengo en 28 (de la 0 hasta la 27) lineas, y creo que puedo rebajar una mas de momento, pero me estoy volviendo loco con los saltos  :rolleyes:,

Despues de cuadrarlo en 27 lineas a ver si puedo seguir haciendo pinitos con el code.

Por cierto, podiais poner una instruccion mul [registro] [registro] :P asi si que me cuadraria todo.

Jajajaja.

Un saludo y un ejercicio magnifico. Felicidades al que lo haya ideado.

PD: Este es mi mensaje 101... Por el culo te la h**co... Jajajajaja!
1204  Seguridad Informática / WarZone / primos.wz en: 9 Diciembre 2009, 01:46 am
Buenas, tengo un pseudocodigo que traducido al codigo ensamblador de la maquina virtual me da resultado que se quiere, pero como no tenia ni idea de ASM, usando el sentido comun me sale un codigo de mas de 25 lineas de codigo.

No pongo aqqui el code, porque seria ponoer "la solucion" para todo el mundo. Solo queria preguntar si hay algunas pautas basicas que se puedan seguir para compactar el codigo.

Si hace falta enviaros el codigo a algun sitio oficial para tratar estos temas, me lo decis y lo envio, (se que he visto por ahi alguna direccion de correo electronico...)

¡¡¡¡Saludos!!!!
1205  Programación / Ejercicios / Re: por favor alguien me puede ayudar con estos ejercicios en c gracias.. en: 8 Diciembre 2009, 06:16 am
el-pollo, no sea malo con los nuevos, que luego dejan el maravilloso mundo de la programacion por lad facilidades de conseguir porno que hay en internet...

La 1 es obviamente C.

Un saludo!
1206  Programación / Programación C/C++ / Re: Para que dejeis de preguntar de una vez por los menus en: 5 Diciembre 2009, 08:18 am
Ok. Pues, de momento asi lo dejo. Ahora me queda algun detalle sobre la presentacion (alineacion delos textos) y pulir los flags, que los puse a ultima hora.

Hasta luego!

Bueno, creo que mas o menos ya esta. Si hay alguna idea, bienvenida sea.

Hasta luego!

EI: juntando mensajes.

¡Hola a todos!

Despues de la ultima modificacion, la funcion mostrarMenu, producia un error en tiempo de ejecucion, devido a un error que cometi. Ya esta corregido, y el codigo es funcional.

¡Hasta luego!
1207  Programación / Programación C/C++ / Re: Para que dejeis de preguntar de una vez por los menus en: 5 Diciembre 2009, 03:07 am
bueno, ya estan los cambios, he incluido un header y un fichero fuente mas, porque ahi esta la funcion que evita el fflush(stdin) antes de la lectura de un dato entero. (a parte creo que tambien hay funciones que pueden resultar utiles...) Tambien he eliminado las llamadas a system, ahora no queda tan bonito, pero esportable.

EI, si quieres completar el codigo con la compilacion condicional... yo desconozco las ordenes equivalentes en otros systemas operativos, asi que sirectamente evito utilizarlas, y tampoco he utilizado la compilacion condicional mas que para comprobar errores con printf's para ver los valores de las variables. :silbar:

Asi contribuimos a mejorar el codigo un poco entre todos.

¡Hasta luego!

He eliminado los dos ficheros añadidos. (por una sola funcion era meter demasiado codigo que no venia a cuento)

Ultima modificacion:
Código
  1. #ifdef WINDOWS
  2.   system("CLS");
  3. #elif defined UNIX
  4.   system("clear");
  5. #endif
  6.  

¿Es correcto?

Para los mac's y otros sistemas operativos no conozco analogos, pero sigo buscando.
1208  Programación / Programación C/C++ / Re: Para que dejeis de preguntar de una vez por los menus en: 5 Diciembre 2009, 02:29 am
Jajajaja!

Lo de la portabilidad ya lo estaba pensando, al codigo ya tiene algunos mesecillos y ultimamente he estado pensando en la portabilidad.

Lo de system("PAUSE"), tiene facil solucion, para lo del fflush(stdin) ya tengo una alternativa y una solucion, pero lo de limpiar la pantalla... me parece que no hay ningun equivalente estandar para limpiarla, ¿no?

Le hecho un vistazo y a ver que sale.

¡Hasta luego!
1209  Programación / Programación C/C++ / Para que dejeis de preguntar de una vez por los menus en: 3 Diciembre 2009, 19:58 pm
MODIFICADO

Añadido:
----------
- portabilidad
- texto centrado


Ya se que todo el codigo que viene a continuacion es una morcilla de las de Burgos, pero si mirais el ejemplo que hay al final, vereis como se simplifica todo a la hora de utilizar los menus.

Menu.h
Código
  1.  
  2. /*
  3.  
  4. IMPORTANTE: Cuando el menu ya no sea util, ultilizar siempre la funcion finalizarMenu
  5.  
  6. */
  7.  
  8. #ifndef MENU_H
  9. #define MENU_H
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. /*
  16. * Para compilar en UNIX desactivar la definicion de WINDOWS y activar la de UNIX
  17. * Para otros SO desactivar ambas.
  18. */
  19.  
  20. #ifndef WINDOWS
  21.    #define WINDOWS
  22. #endif
  23. /*
  24. #ifndef UNIX
  25.     #define UNIX
  26. #endif
  27. */
  28.  
  29. #define MENU_OK                   0L
  30. #define MENU_ERROR                1L
  31. #define MENU_MEMORIA_INSUFICIENTE 2L
  32.  
  33. #define MENU_MODO_NORMAL      0L
  34. #define MENU_MODO_ULTIMA_CERO 1L
  35.  
  36. struct Menu
  37. {
  38.    char*         titulo;
  39.    char*         texto;
  40.    char**        opciones;
  41.    int           numOpciones; /* numero de opciones */
  42.    int           maxlen;
  43.    unsigned long lFlags;
  44. };
  45. typedef struct Menu Menu;
  46.  
  47. void inicializarMenu(Menu* menu,char* titulo, char* texto, char* opciones[]);
  48. int mostrarMenu(Menu* menu,int modo);
  49. void finalizarMenu(Menu* menu);
  50.  
  51. #endif /* MENU_H */
  52.  

menu.c
Código
  1. #include "menu.h"
  2.  
  3. void inicializarMenu(Menu* menu, char* titulo, char* texto, char* opciones[])
  4. {
  5.   menu->lFlags = MENU_OK;
  6.  
  7.   if(titulo == NULL)
  8.      menu->titulo = NULL;
  9.   else
  10.   {
  11.       if((menu->titulo = (char*) malloc(strlen(titulo) * sizeof(char) + 1)))
  12.           strcpy(menu->titulo,titulo);
  13.      else
  14.      {
  15.         menu->lFlags |= MENU_ERROR | MENU_MEMORIA_INSUFICIENTE;
  16.         menu->texto = NULL;
  17.      }
  18.   }
  19.  
  20.   if(texto == NULL)
  21.      menu->texto = NULL;
  22.   else
  23.   {
  24.      if((menu->texto = (char*) malloc(strlen(texto) * sizeof(char) + 1)))
  25.         strcpy(menu->texto,texto);
  26.      else
  27.      {
  28.         menu->lFlags |= MENU_ERROR | MENU_MEMORIA_INSUFICIENTE;
  29.         menu->texto = NULL;
  30.  
  31.         if(menu->titulo)
  32.         {
  33.            free(menu->titulo);
  34.            menu->titulo = NULL;
  35.         }
  36.      }
  37.   }
  38.  
  39.   if(opciones == NULL)
  40.      menu->opciones = NULL;
  41.   else
  42.   {
  43.      menu->numOpciones = -1;
  44.  
  45.      while(opciones[ ++(menu->numOpciones) ][0]);
  46.  
  47.      if((menu->opciones = (char**) malloc(menu->numOpciones * sizeof(char*))))
  48.      {
  49.         int i=0;
  50.  
  51.         menu->maxlen = 0;
  52.  
  53.         for(i=0 ; i < menu->numOpciones ; i++)
  54.         {
  55.            if
  56.            (
  57.               (menu->opciones[i] =
  58.               (char*) malloc(strlen(opciones[i]) * sizeof(char) + 1))
  59.            )
  60.            {
  61.               strcpy(menu->opciones[i],opciones[i]);
  62.  
  63.               if(strlen(menu->opciones[i]) > menu->maxlen)
  64.                  menu->maxlen = strlen(menu->opciones[i]);
  65.            }
  66.            else
  67.            {
  68.               int j;
  69.  
  70.               for(j=0 ; j<i ; j++)
  71.                  free(menu->opciones[j]);
  72.  
  73.               free(menu->opciones);
  74.  
  75.               menu->opciones = NULL;
  76.               menu->numOpciones = 0;
  77.  
  78.               if(menu->texto)
  79.               {
  80.                  free(menu->texto);
  81.                  menu->texto = NULL;
  82.               }
  83.  
  84.               if(menu->titulo)
  85.               {
  86.                  free(menu->titulo);
  87.                  menu->titulo = NULL;
  88.               }
  89.  
  90.               menu->lFlags |= MENU_ERROR | MENU_MEMORIA_INSUFICIENTE;
  91.            }
  92.         }
  93.      }
  94.      else
  95.      {
  96.         menu->lFlags |= MENU_ERROR | MENU_MEMORIA_INSUFICIENTE;
  97.         menu->opciones = NULL;
  98.  
  99.         if(menu->texto)
  100.         {
  101.            free(menu->texto);
  102.            menu->texto = NULL;
  103.         }
  104.  
  105.         if(menu->titulo)
  106.         {
  107.            free(menu->titulo);
  108.            menu->titulo = NULL;
  109.         }
  110.      }
  111.   }
  112. }
  113.  
  114. int mostrarMenu(Menu* menu,int modo)
  115. {
  116.   int i=0, opcion=0;
  117.  
  118.   if(menu->numOpciones)
  119.   {
  120.       do{
  121.  
  122.          #ifdef WINDOWS
  123.             system("CLS");
  124.          #elif defined UNIX
  125.             system("clear");
  126.          #endif
  127.  
  128.          if(menu->titulo)
  129.          {
  130.             for(i=0 ; i<80 ; i++)
  131.                 printf("=");
  132.  
  133.             printf("%*s\n", 40 + strlen(menu->titulo) / 2, , menu->titulo);
  134.  
  135.             for(i=0 ; i<80 ; i++)
  136.                 printf("=");
  137.          }
  138.  
  139.          if(menu->texto)
  140.              printf("%-*s%s\n\n",40 - menu->maxlen / 2 - 8, " ", menu->texto);
  141.  
  142.          for(i=0 ; i < menu->numOpciones ; i++)
  143.          {
  144.             if(modo == MENU_MODO_ULTIMA_CERO && i == menu->numOpciones - 1)
  145.             {
  146.                if(menu->numOpciones > 10)
  147.                   printf("%*s 0. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", 40 + menu->maxlen / 2,
  148.                                            menu->opciones[i]);
  149.                else
  150.                   printf("%*s0. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", 40 + menu->maxlen / 2,
  151.                                           menu->opciones[i]);
  152.             }
  153.             else
  154.             {
  155.                if(modo != MENU_MODO_ULTIMA_CERO)
  156.                {
  157.                   if(menu->numOpciones >= 10)
  158.                   {
  159.                      printf("%*s%2d. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", i+1,
  160.                                                40 + menu->maxlen / 2, menu->opciones[i]);
  161.                   }
  162.                   else
  163.                   {
  164.                      printf("%*s%d. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", i+1,
  165.                                               40 + menu->maxlen / 2, menu->opciones[i]);
  166.                   }
  167.                }
  168.                else
  169.                {
  170.                   if(menu->numOpciones > 10)
  171.                   {
  172.                      printf("%*s%2d. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", i+1,
  173.                                                40 + menu->maxlen / 2, menu->opciones[i]);
  174.                   }
  175.                   else
  176.                   {
  177.                      printf("%*s%d. %-*s\n", 40 - menu->maxlen / 2 - 4, " ", i+1,
  178.                                               40 + menu->maxlen / 2, menu->opciones[i]);
  179.                   }
  180.                }
  181.             }
  182.          }
  183.          printf("%-*s>", 40 - menu->maxlen / 2 - 8, " ");
  184.  
  185.         if(!scanf("%d", &opcion))
  186.         {
  187.            while(getchar() != '\n');
  188.            scanf("%d", &opcion);
  189.         }        
  190.  
  191.       }while
  192.       (
  193.          (
  194.             (modo != MENU_MODO_ULTIMA_CERO) ? (opcion < 1) : (opcion < 0)
  195.          )
  196.          ||
  197.          (
  198.             (modo != MENU_MODO_ULTIMA_CERO) ?
  199.                (opcion >  menu->numOpciones)
  200.                :
  201.                (opcion >= menu->numOpciones)
  202.          )
  203.       );
  204.  
  205.       return opcion;
  206.   }
  207.  
  208.   return -1;
  209. }
  210.  
  211. void finalizarMenu(Menu* menu)
  212. {
  213.   if(menu->texto)
  214.   {
  215.      free(menu->texto);
  216.      menu->texto = NULL;
  217.   }
  218.  
  219.   if(menu->opciones)
  220.   {
  221.       int i=0;
  222.  
  223.       for(i=0 ; i < menu->numOpciones ; i++)
  224.       {
  225.           if(menu->opciones[i])
  226.           {
  227.               free(menu->opciones[i]);
  228.               menu->opciones[i] = NULL;
  229.           }
  230.       }
  231.       free(menu->opciones);
  232.       menu->opciones = NULL;
  233.   }
  234.  
  235.   menu->numOpciones = 0;
  236. }
  237.  

ejemplo: (tener en cuenta que menu.h y menu.c tienen que estar en el mismo directorio donde este el fichero con la funcion principal)
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "menu.h"
  5. #include "menu.c" /* solo si no se va crear un proyecto*/
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    Menu menu;
  10.    char *opciones[] = {"Continuar","Salir",""}; /* la ultima opcion siempre es una cadena vacia*/
  11.    int opcion;
  12.  
  13.    inicializarMenu(&menu,"MENU DE PRUEBA","Escoger una opcion:",opciones);
  14.  
  15.    do{
  16.        opcion=mostrarMenu(&menu,MENU_MODO_ULTIMA_CERO);
  17.  
  18.        switch(opcion)
  19.        {
  20.            case 1:
  21.                printf("Has escogido continuar.\n");
  22.                break;
  23.            case 0:
  24.                printf("Has escogido salir.\n");
  25.                break;
  26.        }
  27.    }while(opcion!=0);
  28.  
  29.    /* ¡¡¡¡¡IMPORTANTE!!!!! */
  30.    finalizarMenu(&menu);
  31.  
  32.    return 0;
  33. }
  34.  

En lo que es el menu, me gustaria completar alguna opcion mas, pero el codigo ya es funcional.

Si el codigo no funciona, avisad, ya que es una adaptacion del codigo que realmente tengo guardado. Lo he puesto asi para evitar incluir mas headers y mas codigo.

El codigo de ejemplo lo he imprivosado sobre la marcha. Si hubiese algun error revisad el codigo, que no creo que haya darle muchas vueltas.
1210  Programación / Ejercicios / Re: Multiple Exponeciacion y Modulacion en: 4 Octubre 2009, 15:33 pm
Hola.

Si tienes que a = x mod(n) tendras que a^k = x^k mod(n), ya que el conjunto de valores mod(n) de los enteros forma un anillo.

Ahora si tienes a^k donde k=p^m, tendras que:

 si x^k = y mod(n) -> a^k = x^k mod(n) = x^(p^m) mod(n) = (x^p)^m mod(n)

Ahora obtendras que x^p = y mod(n), por lo tanto: x^k = y^m mod(n), y solo tendras que calcular y^m mod(n) = z

resumiendo:

a^(p^m) -> los datos son a,p y m.

calculas x = a mod(n) (Asi reduces la base)
calculas x^p (como la base esta reducida, tardara menos (supongo))
calculas y = x^p mod(n) (Vuelves a reducir la base)
calculas z = y^m mod(n)

y z es el resultado que buscabas.

Espero que esto te simplifique las cosas.

Hasta luego!
Páginas: 1 ... 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 [121] 122
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines