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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 [2] 3 4
11  Programación / Ejercicios / Re: Ejercicios con arrays en: 5 Junio 2009, 06:01 am
¡¡¡Buenas!!!

El algoritmo de euclides solo tiene que calcular el MCD de dos enteros, no tienes porque guardar los restos sucesivos a no ser que luego te pidan los coeficientes de la Identidad de Bezout.

Te planteo dos soluciones, una iterativa y otra recursiva:

Iterativa:
Código
  1. int mcdEuclides(int a, int b)
  2. {
  3.    int aux,resto;
  4.  
  5.    if(a<0)
  6.        a*=-1;
  7.    if(b<0)
  8.        b*=-1;
  9.  
  10.    if(a<b)
  11.    {
  12.        aux=a;
  13.        a=b;
  14.        b=aux;
  15.    }
  16.  
  17.    if(b==0)
  18.        return a;
  19.  
  20.    do{
  21.        resto=a%b;
  22.        a=b;
  23.        b=resto;
  24.    }while(b!=0);
  25.  
  26.    return a;
  27. }
  28.  

y recursiva:
Código
  1. int mcdEuclides(int a,int b)
  2. {
  3.    int aux;
  4.  
  5.    if(a<0)
  6.        a*=-1;
  7.    if(b<0)
  8.        b*=-1;
  9.    if(a<b)
  10.    {
  11.        aux=a;
  12.        a=b;
  13.        b=aux;
  14.    }
  15.  
  16.    if(b==0)
  17.        return a;
  18.  
  19.    return mcdEuclides(b,a%b);
  20. }
  21.  

Espero que os sea util.

¡¡¡Un saludo!!!
12  Seguridad Informática / Seguridad / Re: Nueva encuesta: Mejor Antivirus en: 4 Junio 2009, 09:15 am
¡¡¡Buenas!!!

Aunque vaya como una rata en formol, tengo que decir que odio el McAfee, porque en este momeno y cada vez que intento meterme en este foro (estoy en el ordenador de mi compañero de piso), me dice que este foro es cosa mala, y no termino de creermelo, yo creo que le tiene envidia (GForce II) juas, que chiste mas malo. :)

¡¡Un saludo a todo el mundo!!
13  Programación / Ingeniería Inversa / Re: ¿Como es un ejecutable? en: 30 Mayo 2009, 13:56 pm
Muchas gracias popr la informacion.

Ahora le echare un ojo a ver que cuenta y aver si lo entiendo.  ;D

¡¡¡Un saludo!!!
14  Programación / Ingeniería Inversa / Re: que disasembler usais para los driver Windows XP? en: 29 Mayo 2009, 02:16 am
Ok, pues seguire como hasta ahora.  ;D
Gracias!
15  Programación / Ingeniería Inversa / ¿Como es un ejecutable? en: 29 Mayo 2009, 00:46 am
Bueno, ahi va la idea, es mas una proposicion al moderador, que una pregunta directa.

Esta bien para los que nos iniciamos en el cracking, empezar con ejemplos, ver como  donde se ponen breackpoints en saltos, mensajes, apis, memoria... para ir llegando a donde nos interesa, pero me parece que tambien estaria bien, aunque sea por culturilla (no se si guardara relacion con el tema), saber con que estamos tratando.

es decir, lo que es un ejecutable, que partes tiene, como funcionan...

Igual es mucho pedir o es demasiada informacion o lo mismo no apete hacerlo, o no viene cuento, o por cualquier otra cosa no se hace, pero pienso que estaria bien entender con que estamos tratando.

¡¡¡Un saludo!!!
16  Programación / Ingeniería Inversa / Re: que disasembler usais para los driver Windows XP? en: 29 Mayo 2009, 00:39 am
Ok.

Y a la hora de hurgar en los ejecutables y dll-s es mejor utilizar un debugger Ring0, Ring3 o es indiferente?

(supongo que la respuesta sera el Ring0, pero me gustaria saber porque) jejeje
17  Programación / Ingeniería Inversa / Re: que disasembler usais para los driver Windows XP? en: 28 Mayo 2009, 18:56 pm
Buenas!!!!!!!

Hum un depurador Ring0, hace poco, nose donde lei algo a cerca de eso. Tiene que ver con lo capaz que es el depurador de trastear a bajo nivel o algo asi ¿no?

Yo utilizo el OllyDBG. ¿Hay algun otro que funcione mejor o tenga mayor funcionanlidad?

Un saludo!!!!!!!!
18  Programación / Ejercicios / Re: Ejercicios Básicos en: 28 Mayo 2009, 09:27 am
Ahi va la solucion:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(int argc,char* argv[])
  6. {
  7.    unsigned long fact1=1,fact2=1,i=1;
  8.    char num1[50],num2[50];
  9.    int difCifras; /*no creo que un unsigned long tenga tantas cifras :P*/
  10.  
  11.    do{
  12.        printf("Introduce la diferencia de cifras entre dos factoriales consecutivos: ");
  13.        fflush(stdin);
  14.        scanf("%d",&difCifras);
  15.    }while(difCifras<0);
  16.  
  17.    do{
  18.        fact1*=i;
  19.        fact2=fact1*(i+1);
  20.  
  21.        sprintf(num1,"%lu",fact1);
  22.        sprintf(num2,"%lu",fact2);
  23.  
  24.        i++;
  25.        if(i==13) /*13! excede la capacidad de un usigned long*/
  26.            break;
  27.    }while(strlen(num2)-strlen(num1) < difCifras);
  28.  
  29.    i--;
  30.  
  31.    if(i!=12)
  32.        printf("%d! y %d! se diferencian en %d cifras\n"
  33.        "%d!=%lu\n"
  34.        "%d!=%lu\n",i,i+1,difCifras,i,fact1,i+1,fact2);
  35.    else
  36.        printf("No se dispone de tanta capacidad de calculo.\n");
  37.    system("PAUSE");
  38.  
  39.    return 0;
  40. }
  41.  

Espero que sirva de algo!!

Un saludo!!!!!
19  Programación / Ejercicios / Re: Ejercicios Básicos en: 28 Mayo 2009, 08:46 am
Huy, vaya rayada con el primer problema. jejejeje. Lo he entendido y mal y lo he puesto patas arriba.   :-[

A ver si lo corrijo qu la solucion no es tan matematica   :silbar:
20  Programación / Ejercicios / Re: necesito saber como ingresar 1 nº entero >0 y <=100 luego contar sus digitos.... en: 28 Mayo 2009, 08:24 am
Y aun otra forma mas divertida de hacerlo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 10000
  5.  
  6. struct NodoEntero
  7. {
  8.    unsigned char cifra;
  9.    NodoEntero* Enlace;
  10. };
  11. typedef struct NodoEntero NodoEntero;
  12. typedef NodoEntero* ptrNodoEntero;
  13.  
  14. void push(ptrNodoEntero* Base,unsigned char valor);
  15. unsigned char pop(ptrNodoEntero*);
  16. char pila_vacia(ptrNodoEntero);
  17.  
  18. int main(int argc,char* argv[])
  19. {
  20.    int numero,numcifras=0,potenciaDiez=1;
  21.    ptrNodoEntero basePila=NULL;
  22.  
  23.    do{
  24.        printf("Introduce un numero entre 1 y %d (ambos incluidos): ",MAX);
  25.        fflush(stdin);
  26.        scanf("%d",&numero);
  27.    }while(numero<0 || numero>MAX);
  28.  
  29.    do{
  30.        push(&basePila,numero%10);
  31.        numero/=10;
  32.        numcifras++;
  33.    }while(numero!=0);
  34.  
  35.    printf("El numero tiene %d cifras\n",numcifras);
  36.  
  37.    do{
  38.        numero += potenciaDiez * pop(&basePila);
  39.        potenciaDiez*=10;
  40.    }while(!pila_vacia(basePila));
  41.  
  42.    printf("El numero invertido es: %d\n",numero);
  43.  
  44.    system("PAUSE");
  45. }
  46.  
  47. void push(ptrNodoEntero* Base,unsigned char valor)
  48. {
  49.    ptrNodoEntero NuevoNodo;
  50.  
  51.    NuevoNodo=(NodoEntero*)malloc(sizeof(NodoEntero));
  52.    NuevoNodo->cifra=valor;
  53.    NuevoNodo->Enlace=(*Base);
  54.    (*Base)=NuevoNodo;
  55. }
  56.  
  57. unsigned char pop(ptrNodoEntero* Base)
  58. {
  59.    ptrNodoEntero Aux;
  60.    unsigned char ret;
  61.  
  62.    Aux=(*Base);
  63.    ret=(*Base)->cifra;
  64.    (*Base)=(*Base)->Enlace;
  65.    free(Aux);
  66.  
  67.    return ret;
  68. }
  69.  
  70. char pila_vacia(ptrNodoEntero Base)
  71. {
  72.    return (Base==NULL ? 1 : 0);
  73. }
  74.  

Jejeje, a ver si cae otra forma....

¿Se nota que me aburro?

Un saludo!!!!!!!!!!!!!
Páginas: 1 [2] 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines