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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 ... 3 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 ... 51
171  Programación / Programación C/C++ / Re: Necesito ayuda en "Structs" en C, tengo un error muy gordo en: 14 Enero 2014, 00:01 am
A ver, primer error es que te falta un ';' al final de la declaración del struct:

Código
  1. struct persona
  2. {
  3.    char nombre[20];
  4.    char apellidoP[20];
  5.    char apellidoM[20];
  6.    char rut[10];
  7.    int edad;        
  8. };

Segundo, en C, una vez pasada la declaración de las variables, no se pueden asignar las cadenas de esta manera:

Código
  1. persona1.nombre = "Rodrigo";
  2. persona1.apellidoP = "Saavedra";

En lugar de eso, deberías hacerte alguna función para copiar carácter a carácter o usar, por ejemplo, la función strncpy() de la librería 'string.h'. Quedaría algo así:

Código
  1. #include <string.h>
  2.  
  3. char nombre1[] = "Rodrigo";  // aqui si que se puede porque es en el momento de la declaracion
  4. strncpy(persona1.nombre, nombre1, strlen(nombre1));  // en tiempo de ejecucion hay que hacerlo asi

También puedes inicializar las variables del tipo de tu estructura al momento de declararlas:

Código
  1. struct persona persona1 = {"Rodrigo", "Saavedra", "Pizarro", "ASDF-1", 23};

edito: mirando el código, sería una buena práctica que pasaras un puntero de tu estructura a la función 'desplegarValores' en lugar de la estructura en sí, ya que así evitarías que se hiciera una copia local de ella. Si además no quieres que en la función se modifique el valor de tu estructura, podrías pasarla con el parámetro 'const'. Te quedaría algo así:

Código
  1. void desplegarValores(const struct persona *p)
  2. {
  3.    printf("Nombre: %s\n",p->nombre);
  4.    printf("Apellido paterno: %s\n",p->apellidoP);
  5.    printf("Apellido materno: %s\n",p->apellidoM);
  6.    printf("Rut: %s\n",p->rut);
  7.    printf("Edad: %i\n\n",p->edad);    
  8. }

Y en la función 'main' deberías llamarla así:

Código
  1. desplegarValores(&persona1);

Un saludo.
172  Seguridad Informática / Seguridad / Re: Robo de portátil en: 13 Enero 2014, 23:37 pm
¿Me podéis decir si hay alguna aplicación de geolocalización de IP que diga hasta el piso donde está situado el ordenador, por favor?

Qué miedo si eso fuera posible con una simple herramienta al alcance de cualquiera...
173  Programación / Programación C/C++ / Re: Perdido al crear una función con punteros en: 13 Enero 2014, 21:09 pm
Código
  1. int leeCaracter (char *p1, char *p2)
  2. {
  3.    char a, b;
  4.    int correctos = 0;
  5.  
  6.    // lees los caracteres y verificas si son correctos como haces en el main
  7.    // supon que tienes una variable llamada 'correctos' que es 1 si estan bien
  8.    // y 0 si no lo estan
  9.  
  10.    if (correctos)
  11.    {
  12.        // cosas a hacer si son correctos
  13.        // ...
  14.  
  15.        *p1 = a;  // asignas 'a' al caracter apuntado por p1
  16.        *p2 = b;  // asignas 'b' al caracter apuntado por p2
  17.        return 1;
  18.    }
  19.    else
  20.    {
  21.        // cosas a hacer si no son correctos
  22.        // ...
  23.  
  24.        return 0;
  25.    }
  26. }

Y en el main tendrías que llamarla así:

Código
  1. char c1, c2;
  2.  
  3. //...
  4.  
  5. if (leeCaracter(&c1, &c2) == 1)  // te puedes ahorrar el '== 1'
  6. {
  7.     // caracteres correctos
  8.     // c1 tiene el primer caracter y c2 el segundo
  9. }
  10. else
  11. {
  12.     // caracteres incorrectos
  13. }

En la llamada a la función, lo que haces es pasarle la referencia de las variables a la función; es decir, le pasas su dirección de memoria para poder modificar su valor dentro de la función. En este caso, 'c1' es una variable de tipo 'char', y '&c1' es del tipo puntero a caracter o 'char*', que es lo que ve la función.

Un saludo.
174  Programación / Programación C/C++ / Re: ¿Es correcto este diagrama de flujo? en: 9 Enero 2014, 11:36 am
Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i*i<valor) para ahorrarte muchísimos ciclos en el for. Además el incremento de i lo haría como i+=2, con en valor inicial de 3, ya que sabemos que los primos, con excepción del 2, son impares.

Pues sí, con esa condición aun te ahorras más ciclos en el for, pero yo creo que te dejaste el '=' en ella: (i*i <= valor)

Saludos.
175  Programación / Programación C/C++ / Re: ¿Es correcto este diagrama de flujo? en: 8 Enero 2014, 23:40 pm
leer valor --> i=2 --> (valor%i == 0) --> Sí --> Fin (No es primo)
                                                         --> No --> (i++) --> (i < valor) --> Sí --> Volver a (valor%i == 0)
                                                                                                         --> No --> Fin (Sí es primo)

Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.

Saludos.
176  Programación / Java / Re: Duda con el uso de porcentaje en: 2 Enero 2014, 01:45 am
En enteros, '%' es el operador MOD o resto. Por ejemplo:

Código:
2 mod 4 = 2 -> 2/4 = 0 con 2 de resto
13 mod 3 = 1 -> 13/3 = 4 con 1 de resto

Y como ya sabrás, '/' es el operador de división, pero si se trata de enteros solo se redondea hasta la unidad. Por ejemplo:

Código:
2 / 4 = 0
13 / 3 = 4

Y iendo a tu programa, cuando haces cuenta%13 es porque hay 13 distintos tipos de cartas: A,2,3,...Q,K, por lo que tendrás:

Código:
 cuenta = 0 -> caras[0%13]=caras[0]="As"
cuenta = 1 -> caras[1%13]=caras[1]="Dos"
...
cuenta = 13 -> caras[13%13]=caras[0]="As"
cuenta = 14 -> caras[14%13]=caras[1]="Dos"

Por lo que cada 13 cartas, se repite el ciclo hasta que haya una carta de cada palo, lo que harían las 4x13=52 cartas.

Y para el tema de los palos, a cada pack de 13 cartas le asignas un palo distinto:

Código:
cuenta = 0 -> palos[0/13]=palos[0]="Corazones"
cuenta = 1 -> palos[1/13]=palos[0]="Corazones"
...
cuenta = 13 -> palos[13/13]=palos[1]="Diamantes"
cuenta = 14 -> palos[14/13]=palos[1]="Diamantes"

Espero haberte ayudado, saludos.
177  Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits en lenguaje C. en: 31 Diciembre 2013, 04:28 am
Partiendo de que 1 AND 0 = 0 y que 1 OR 0 = 1, el operador '&' es el AND a nivel de bit y el '|' el OR, y la operación se lleva a cabo entre bits que ocupen la mismas posiciones en los dos operandos. Por si no quedó del todo claro te dejo unos ejemplos:

Código:
num = 1100
num & 0100 = 0100
num & 1111 = num
num | 1001 = 1101
num | 0000 = num

Si quieres profundizar aquí tienes una explicación más detallada: http://c.conclase.net/curso/?cap=018

Un saludo.
178  Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits en lenguaje C. en: 31 Diciembre 2013, 03:58 am
De nada. Pensándolo un poco mejor también se podría hacer con máscaras y operaciones a nivel de bit. Te dejo también el código:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char cadena[]="HoLaPEpe";
  6. int len = sizeof(cadena)/sizeof(cadena[0])-1;
  7. printf("len = %d\n", len);
  8. int i;
  9.  
  10. for (i=0; i<len; i++)
  11. // 0x20 es en binario = 0010 0000
  12. if (cadena[i]&0x20) // devuelve cierto si el bit 5 esta puesto a 1
  13. printf("%c -> minuscula\n", cadena[i]);
  14. else
  15. printf("%c -> mayuscula\n", cadena[i]);
  16.  
  17. // 0xDF es en binario = 1101 1111
  18. for (i=0; i<len; i++) cadena[i]&=0xDF; // pones a 0 el bit 5
  19. printf("En mayusculas: %s\n", cadena);
  20.  
  21. for (i=0; i<len; i++) cadena[i]|=0x20; // pones a 1 el bit 5
  22. printf("En minusculas: %s\n", cadena);
  23.  
  24. return 0;
  25. }

Y su salida:

Código:
xiruko:~$ gcc prueba2.c -o prueba2
xiruko:~$ ./prueba2
H -> mayuscula
o -> minuscula
L -> mayuscula
a -> minuscula
P -> mayuscula
E -> mayuscula
p -> minuscula
e -> minuscula
En mayusculas: HOLAPEPE
En minusculas: holapepe
xiruko:~$

Un saludo.

Edito: que puse al revés las máscaras... ahora ya funciona correctamente.

Felices fiestas.

179  Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits en lenguaje C. en: 31 Diciembre 2013, 03:39 am
También podrías probar a hacerlo con uniones y campos de bit. Por ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. union caracter
  4. {
  5. unsigned char c;
  6. struct c_bits
  7. {
  8. unsigned b0:1;
  9. unsigned b1:1;
  10. unsigned b2:1;
  11. unsigned b3:1;
  12. unsigned b4:1;
  13. unsigned b5:1;
  14. unsigned b6:1;
  15. unsigned b7:1;
  16. } bits;
  17. };
  18.  
  19. int main()
  20. {
  21. union caracter cadena[]={'h','O','L','a'};
  22. int len = sizeof(cadena)/sizeof(cadena[0]);
  23. int i;
  24.  
  25. for (i=0; i<len; i++)
  26. if (cadena[i].bits.b5 == 1)
  27. printf("%c -> minuscula\n", cadena[i].c);
  28. else
  29. printf("%c -> mayuscula\n", cadena[i].c);
  30.  
  31. printf("En mayusculas: ");
  32. for (i=0; i<len; i++)
  33. {
  34. cadena[i].bits.b5 = 0;
  35. printf("%c", cadena[i].c);
  36. }
  37. printf("\n");
  38.  
  39. printf("En minusculas: ");
  40. for (i=0; i<len; i++)
  41. {
  42. cadena[i].bits.b5 = 1;
  43. printf("%c", cadena[i].c);
  44. }
  45. printf("\n");
  46.  
  47. return 0;
  48. }

Y su salida:

Código:
xiruko:~$ gcc prueba.c -o prueba
xiruko:~$ ./prueba
h -> minuscula
O -> mayuscula
L -> mayuscula
a -> minuscula
En mayusculas: HOLA
En minusculas: hola
xiruko:~$

Saludos.
180  Programación / Programación C/C++ / Re: Guardar variables en ficheros C en: 16 Diciembre 2013, 20:45 pm
Citar
Ni si quiera se por ejemplo que tipo de fichero es un ".dat" ni que diferencia tiene almacenar los datos en un fichero de este tipo en vez de un ".txt"

Te propongo algo: cambia la extensión de tu archivo por ".miextension", o por ".quepasasipongoestoasi", y prueba a correr el programa.

Citar
Gracias por  ofrecerme el código hecho con un montón de cosas que no entiendo, pero yo lo único que buscaba es un pequeño empujón o retoque a lo que yo había puesto para así poder aprender y entender por que son así las cosas.

Qué hay mejor para entender las cosas que leerte la teoría a la vez que miras ejemplos? Tú tenías una duda y te di las herramientas necesarias para solventarla. Vale, no te di código, me daba pereza, pero es que había código de sobras en los enlaces.

Citar
De todas formas a base de hace pruebas ya he logrado sacarlo, cambiando la extension del fichero y alguna cosa mas.

Me alegro, esa es la actitud.

Un saludo.
Páginas: 1 ... 3 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 ... 51
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines