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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 20
11  Programación / Programación C/C++ / Re: Array de estructuras + funciones en: 3 Enero 2015, 15:22 pm
¿cómo a traves de una función podemos devolver un array de estructuras?
Es decir se supone que yo introduciré tanto la edad para p[0] y p[1] y lo mismo con el nombre... pero como se hace para devolver con la función todo esto y pasarlo a otro array

Puedes hacer algo asi:

Código
  1. typedef struct
  2. {
  3.    int edad;
  4.    string nombre;
  5. } persona;
  6.  
  7. persona* registrarPersonas( persona* datos, int n);
  8.  
  9. int main(void)
  10. {
  11.    persona datos[2];
  12.    persona* info;
  13.  
  14.    info = registrarPersonas(datos, 2);
  15.  
  16.    for(int i = 0; i < 2; i++)
  17.        cout << "Nombre: " << info[i].nombre << "\nEdad: "   << info[i].edad << endl;
  18.  
  19.    return 0;
  20. }
  21. persona* registrarPersonas( persona* datos, int n)
  22. {
  23.    for(int i = 0; i < n; i++)
  24.    {
  25.        cout << "Nombre: ";
  26.        getline(cin, datos[i].nombre );
  27.  
  28.        cout << "Edad: ";
  29.        cin >> datos[i].edad;
  30.        cin.ignore();
  31.    }
  32.    return datos;
  33. }
  34.  

Un Saludo
12  Programación / Programación C/C++ / Re: Necesito una ayuda en C++, muchas gracias de antemano. en: 11 Noviembre 2014, 02:25 am
si tengo algunos fallos decírmelo también, gracias por las molestias.  ;)

Esto mas bien seria una pequeña modificación para obtener mayor eficiencia y rapidez :

Código
  1. for(B = 2; B <= E; B++)
  2. {
  3.    C = 2;
  4.    while (C * C <= B  && B % C != 0) C++;
  5.    if (C * C  > B)
  6.        printf("%6d\n", B);
  7. }

Y respecto a lo que intentas hacer podrías especificar exactamente como quieres imprimirlos

Saludos

13  Programación / Programación C/C++ / Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C) en: 1 Octubre 2014, 05:02 am
Le encontré 2 cosas que se deben cambiar.
Si el operando más a la izquierda tiene menos cifras que el de la derecha, el resultado es erróneo.
456 x 1234
La otra, si el operando más a la derecha tiene más de una cifra, el resultado también falla.-   
456 x 12

Claro yo solo seguí la lógica de tu código asumiendo que el multiplicador seria no mas de un dígito para encarar operaciones del tipo que expones se tendría que hacer importantes modificaciones al código; quedaría un poco mas extenso y complejo

Un Saludo NOB2014
14  Programación / Programación C/C++ / Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C) en: 30 Septiembre 2014, 21:39 pm
pero lo que me trae en este momento y sin ello no puedo seguir es que sintaxis debo utilizar para copiar resultadoInt en resultadoChar[j] y si me pudieran decir si estoy bien rumbeado.-

Inicializar j a 2 para ir almacenando el resultado en la ultima posición del array  e ir decrementandolo sucesivamente, te dejo el código con todas las correcciones en especial la parte de acarreo que no tomaba algunos casos :

Código
  1. int main(void)
  2. {
  3.    char a[] = "914", b[] = "3", mult[4];
  4.    int i, j, result = 0, resto = 0, operUno = 0, operDos = 0;
  5.  
  6.    for(i = j = 2; i >= 0; i--, j--)
  7.    {
  8.        operUno = a[i] - '0', operDos = b[0] - '0';
  9.        result = operUno * operDos + resto;
  10.        if (result >= 10)
  11.        {
  12.            resto = result / 10;
  13.            result -= resto * 10;
  14.        }
  15.        else
  16.            resto = 0;
  17.        mult[j] = result;
  18.    }
  19.    if (resto)
  20.    {
  21.        for( i = 3; i > 0; i--)
  22.            mult[i] = mult[i - 1];
  23.        mult[0] = resto;
  24.    }
  25.    for(i = 0; i < 4 ; i++)
  26.        printf("%d", mult[i]);
  27.  
  28.    return 0;
  29. }
  30.  

Un saludo
15  Programación / Programación C/C++ / Re: Números perfectos (lenguaje C) en: 28 Septiembre 2014, 04:48 am
Estoy de acuerdo y con esa modificación los primos están correctos pero los perfectos me parece que no.-

El problema con el código del compañero es que de igual manera procesa los primos no validos (23, 29) y también mencionar el desbordamiento de enteros producido, he aquí un ejemplo que calcula los ocho números perfectos :

Código
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <limits.h>
  4.  
  5. typedef enum { FALSE = 0, TRUE = 1 } BOOL;
  6.  
  7. BOOL is_prime( int p )
  8. {
  9.    if( p == 2 ) return TRUE;
  10.    else if( p <= 1 || p % 2 == 0 ) return FALSE;
  11.    else
  12.    {
  13.        BOOL prime = TRUE;
  14.        const int to = sqrt(p);
  15.        int i;
  16.        for(i = 3; i <= to; i+=2)
  17.            if (!(prime = p % i))
  18.                break;
  19.        return prime;
  20.    }
  21. }
  22.  
  23. BOOL is_mersenne_prime( int p )
  24. {
  25.    if( p == 2 )
  26.        return TRUE;
  27.    else
  28.    {
  29.        long long unsigned m_p = ( 1U << p ) - 1;
  30.        long long unsigned s = 4;
  31.        int i;
  32.        for (i = 3; i <= p; i++)
  33.        {
  34.            s = (s * s - 2) % m_p;
  35.        }
  36.        return s == 0;
  37.    }
  38. }
  39.  
  40. int main(int argc, char **argv)
  41. {
  42.    const int upb = log2l(ULLONG_MAX)/2;
  43.    int p;
  44.  
  45.    for( p = 2; p <= upb; p++ )
  46.    {
  47.        if( is_prime(p) && is_mersenne_prime(p) )
  48.            printf(" %llu\n", (long long unsigned)(1U << (p - 1)) * ((1U << p) - 1));
  49.    }
  50.    printf("\n");
  51.  
  52.    return 0;
  53. }
  54.  

Puedes comprobarlo aquí :

http://www.vaxasoftware.com/doc_edu/mat/numperfe_esp.pdf

Un saludo
16  Programación / Programación C/C++ / Re: Números perfectos (lenguaje C) en: 27 Septiembre 2014, 23:52 pm
Blaster seguro que solo con los primos de mersenne?

entonces la secuencia da
no están el 2, 5, 13, 17,23... sin embargo son tomados en la secuencia de los perfectos... así que creo que la teoría es incorrecta

Con el algoritmo que propuse por supuesto se obtienen esa secuencia de primos menos el 23 el cual no forma parte de la secuencia de números perfectos en ves debes incluir el tres. Estoy utilizando la prueba de Lucas-Lehmer :

http://es.wikipedia.org/wiki/Test_de_Lucas-Lehmer

Para descartar todos los primos no valido, por otra parte en la función es_primo en tu código tienes un pequeño error la condición del for debe quedar así

Código
  1. prueba*prueba <= numero

Debido a esto validaba el nueve como un primo


17  Programación / Programación C/C++ / Re: Números perfectos (lenguaje C) en: 27 Septiembre 2014, 22:17 pm
Para generar los cinco números perfectos conocidos (6, 28, 496, 8128, 33550336) con la formula de  Euclides es necesario trabajar con los primos de mersenne (2, 3, 5, 7, 13)  aquí un ejemplo :

Código
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <limits.h>
  4.  
  5. typedef enum { FALSE = 0, TRUE = 1 } BOOL;
  6.  
  7. BOOL is_prime( int p )
  8. {
  9.    if( p == 2 ) return TRUE;
  10.    else if( p <= 1 || p % 2 == 0 ) return FALSE;
  11.    else
  12.    {
  13.        BOOL prime = TRUE;
  14.        const int to = sqrt(p);
  15.        int i;
  16.        for(i = 3; i <= to; i+=2)
  17.            if (!(prime = p % i))break;
  18.        return prime;
  19.    }
  20. }
  21.  
  22. BOOL is_mersenne_prime( int p )
  23. {
  24.    if( p == 2 )
  25.        return TRUE;
  26.    else
  27.    {
  28.        unsigned m_p = ( 1U << p ) - 1;
  29.        unsigned s = 4;
  30.        int i;
  31.        for (i = 3; i <= p; i++)
  32.            s = (s * s - 2) % m_p;
  33.        return s == 0;
  34.    }
  35. }
  36.  
  37. int main(void)
  38. {
  39.    int p;
  40.  
  41.    for( p = 2; p <= 13; p += 1 )
  42.        if( is_prime(p) && is_mersenne_prime(p) )
  43.           numero_perfecto(p);
  44.           /*printf("%d ", p);*/
  45.    printf("\n");
  46.  
  47.    return 0;
  48. }
  49.  

Un Saludo
18  Programación / Programación C/C++ / Re: Números perfectos (lenguaje C) en: 25 Septiembre 2014, 23:36 pm
La consulta es, ¿sabe alguien otra manera de hacerlo?, mi computadora si bien es un poco vieja (2gb de ram) me parecería que tendría que mostrarlo al instante, pero no es así.-

Aquí tienes un código bastante interesante, que a mi parecer es bastante rápido :

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. char bits[65536];
  7.  
  8. typedef unsigned long ulong;
  9. ulong primes[7000], n_primes;
  10.  
  11. typedef struct
  12. {
  13.    ulong p, e;
  14. } prime_factor;
  15.  
  16. void sieve(void)
  17. {
  18.    int i, j;
  19.    memset(bits, 1, 65536);
  20.    bits[0] = bits[1] = 0;
  21.    for (i = 0; i < 256; i++)
  22.        if (bits[i])
  23.            for (j = i * i; j < 65536; j += i)
  24.                bits[j] = 0;
  25.    for (i = j = 0; i < 65536; i++)
  26.        if (bits[i]) primes[j++] = i;
  27.  
  28.    n_primes = j;
  29. }
  30.  
  31. int get_prime_factors(ulong n, prime_factor *lst)
  32. {
  33.    ulong i, e, p;
  34.    int len = 0;
  35.  
  36.    for (i = 0; i < n_primes; i++)
  37.    {
  38.        p = primes[i];
  39.        if (p * p > n) break;
  40.        for (e = 0; !(n % p); n /= p, e++);
  41.        if (e)
  42.        {
  43.            lst[len].p = p;
  44.            lst[len++].e = e;
  45.        }
  46.    }
  47.    return n == 1 ? len : (lst[len].p = n, lst[len].e = 1, ++len);
  48. }
  49.  
  50. int ulong_cmp(const void *a, const void *b)
  51. {
  52.    return *(const ulong*)a < *(const ulong*)b ? -1 : *(const ulong*)a > *(const ulong*)b;
  53. }
  54.  
  55. int get_factors(ulong n, ulong *lst)
  56. {
  57.    int n_f, len, len2, i, j, k, p;
  58.    prime_factor f[100];
  59.  
  60.    n_f = get_prime_factors(n, f);
  61.  
  62.    len2 = len = lst[0] = 1;
  63.    for (i = 0; i < n_f; i++, len2 = len)
  64.        for (j = 0, p = f[i].p; j < f[i].e; j++, p *= f[i].p)
  65.            for (k = 0; k < len2; k++)
  66.                lst[len++] = lst[k] * p;
  67.  
  68.    qsort(lst, len, sizeof(ulong), ulong_cmp);
  69.    return len;
  70. }
  71.  
  72. int main(void)
  73. {
  74.    int j;
  75.    ulong fac[10000], n, sum;
  76.  
  77.    sieve();
  78.  
  79.    for (n = 2; n < 33550337; n++)
  80.    {
  81.        j = get_factors(n, fac) - 1;
  82.        for (sum = 0; j && sum <= n; sum += fac[--j]);
  83.           if (sum == n)
  84.              printf("%lu\n", n);
  85.    }
  86.    return 0;
  87. }
  88.  

Fuente : http://rosettacode.org/wiki/Factors_of_an_integer#Prime_factoring

Solo le hice una pequeña modificación en el main para adaptarlo a tu propósito

Un Saludo
19  Programación / Programación C/C++ / Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C) en: 18 Septiembre 2014, 02:25 am
Haciendo uso de qsort podríamos ir ordenando sucesivamente los elementos generados, mas o menos así :

Código
  1. int comparar(const void * x, const void * y)
  2. {
  3.    return ( *(int*)x - *(int*)y );
  4. }
  5.  
  6. void generar(void)
  7. {
  8.    int guardar[6], numero = 0;
  9.    int i, hora = time(NULL);
  10.  
  11.    srand(hora);
  12.  
  13.    for (i = 0; i <= 6; i++)
  14.    {
  15.        numero = rand() % 46;
  16.  
  17.        guardar[i] = numero;
  18.  
  19.        qsort(guardar, i, sizeof(int), comparar);
  20.    }
  21. }
  22.  

Un Saludo
20  Programación / Programación C/C++ / Re: Duda C (While)Asteriscos en: 17 Septiembre 2014, 03:49 am
Pero por mas que intento no puedo generar la mitad derecha, alguien me podría ayudar a darme una idea o alguna pista de que tengo que hacer para generar la mitad derecha?

Puedes generar la figura completa de la siguiente manera :

Código
  1. int i = -5, j = 0;
  2.  
  3. while(i <= 5)
  4. {
  5.     j = -5;
  6.     while( j <= 5)
  7.    {
  8.         printf("%c", abs(i) <= abs(j) ? '*' : ' ');
  9.         j++;
  10.    }
  11.     putchar('\n');
  12.     i++;
  13. }

Usando la función abs con la cual vamos dibujando las dos figuras juntas al mismo tiempo..

Un Saludo
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines