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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [42] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 ... 122
411  Programación / Programación C/C++ / Re: Problema con un programa en C (string.h y funciones) en: 11 Marzo 2014, 19:03 pm
¡Buenas!

Estaba corrigiendo el código para que tuviese en cuenta los espacios y las eñes, y la parte de los espacios va sobre ruedas, pero por lo menos en Debian no reconoce las eñes, ni introduciendolas como caracteres ni introduciendo sus valores, ni con signo ni sin signo...

¿Alguien puede confirmarmelo?

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. char mayus(char c)
  6. {
  7.    if(c == 'ñ')
  8.        return 'Ñ';
  9.  
  10.    return toupper(c);
  11. }
  12.  
  13. int palindromo(char *s)
  14. {
  15.    int ini = 0 , fin = strlen(s) - 1;
  16.  
  17.    while(ini < fin)
  18.    {
  19.        while(isspace(s[ini]) && s[ini])
  20.            ini++;
  21.  
  22.        while(isspace(s[fin]) && fin > 0)
  23.            fin--;
  24.  
  25.        if(ini < fin && mayus(s[ini]) != mayus(s[fin]))
  26.            return 0;
  27.  
  28.        ini++;
  29.        fin--;
  30.    }
  31.  
  32.    return 1;
  33. }
  34.  
  35. int main ()
  36. {
  37.    char text[100]="dabale\n \t Arroz a      la zorra el abad";
  38.    char texto[100]="   aMa \n ña ÑamA";
  39.    int i=0;
  40.  
  41.    printf("%d %d\n", (unsigned char)'ñ' , (unsigned char) 'Ñ');
  42.  
  43.    printf("%s",text);
  44.    for(;text[i]==text[strlen(text)-i-1] && strlen(text)/2>i++;);
  45.  
  46.    printf (i>strlen(text)/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
  47.    printf(palindromo(text) ? "\n Es un palindromo ": "\n No es un palindromo ");
  48.    printf(palindromo(texto) ? "\n Es un palindromo ": "\n No es un palindromo ");
  49.  
  50.    return 0;
  51. }
  52.  

¡Saludos!
________________________________________________________________________________________________________

PD: Cambiando la condición isspace por !isalnum ignoraréis cualguier cosa que no sea un caracter o un número (incluida la ñ...). Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. int mayus(int c)
  6. {
  7.    if(c == 'ñ')
  8.        return 'Ñ';
  9.  
  10.    return toupper(c);
  11. }
  12.  
  13. int palindromo(char *s)
  14. {
  15.    int ini = 0 , fin = strlen(s) - 1;
  16.  
  17.    while(ini < fin)
  18.    {
  19.        while(!isalnum(s[ini]) && s[ini++]);
  20.  
  21.        while(!isalnum(s[fin]) && fin-- > 0);
  22.  
  23.        if(ini < fin && mayus(s[ini++]) != mayus(s[fin--]))
  24.            return 0;
  25.    }
  26.  
  27.    return 1;
  28. }
  29.  
  30. int main ()
  31. {
  32.    char texto[100]="a man, \n a p\tlan, a canal, panama";
  33.    int i;
  34.  
  35.    printf("%s",texto);
  36.  
  37.    for(;texto[i]==texto[strlen(texto)-i-1] && strlen(texto)/2>i++;);
  38.  
  39.    printf (i>strlen(texto)/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
  40.    printf(palindromo(texto) ? "\n Es un palindromo ": "\n No es un palindromo ");
  41.  
  42.    return 0;
  43. }
  44.  

Lo de la ñ debe ser porque lo considera un caracter multibyte..., ahora investigo un poco mas.

Con la última modificación ha quedado un poco mas compacto pero un poco menos legible XD.

¡Saludos!
________________________________________________________________________________________________________

sizeof('ñ') en Debian, me está diciendo que son 4 bytes...
412  Foros Generales / Noticias / Re: Seis razones para cambiar de móvil en: 9 Marzo 2014, 19:39 pm
Una razón para no cambiar de movil: ¡El mío aún funciona!!
413  Sistemas Operativos / GNU/Linux / Re: opensuse gnome o kde en: 9 Marzo 2014, 17:42 pm
de todas maneras...yo siempre recomiendo gnome, pero esa versión inmunda de gnome3 es un vodrio...pero kde simplemente NO. Te recomiendo MATE, un fork de gnome2, soy de los que les gusta las cosas simples.

Bueno, pues yo te diré que gnome 3 es una maravilla, que lo tienes todo a mano con un solo golpe de raton una vez que lo hayas configurado un poco, y que con el no echaras para nada de menos el escritorio tradicional. De todas formas busca tu entre todo lo que hay y quédate con lo que mas te guste. Nosotros te podemos decir lo que nos gusta, y ya ves que son opiniones muy distintas, pero no podemos decirte lo que te tiene que gustar a ti. Decide por ti mismo.

¡Saludos!

PD: No solo existen gnome o kde. Entre otros, también tienes, xfce, lmde, mate, cinnamon, enlightenment, openbox, etoilé... y un montón mas de entornos de escritorio. ¡¡¡Colecciónalos todos!!! XD
414  Programación / Programación C/C++ / Re: [C] Rombo con asteriscos en: 8 Marzo 2014, 16:58 pm
Otra forma mas. Esta considerando la pantalla una matriz de 20X80 caracteres y dibujando así sobre la matriz el rombo.
Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define MAX_FILAS 20
  7. #define MAX_COLUMNAS 80
  8.  
  9. void dibujar_borde(char pantalla[][MAX_COLUMNAS],int n_filas)
  10. {
  11.    int i;
  12.  
  13.    for(i = 0 ; i < n_filas ; i++)
  14.        pantalla[i][abs(n_filas / 2 - i)] = pantalla[i][n_filas - abs(n_filas / 2 - i) - 1] = '*';
  15. }
  16.  
  17. void rellenar(char pantalla[][MAX_COLUMNAS], int fila, int columna)
  18. {
  19.    if(pantalla[fila][columna] == '*' || fila < 0 || fila >= MAX_FILAS || columna < 0 || columna >= MAX_COLUMNAS)
  20.        return;
  21.  
  22.    pantalla[fila][columna] = '*';
  23.  
  24.    rellenar(pantalla, fila - 1, columna);
  25.    rellenar(pantalla, fila + 1, columna);
  26.    rellenar(pantalla, fila, columna - 1);
  27.    rellenar(pantalla, fila, columna + 1);
  28. }
  29.  
  30. void imprimir(char pantalla[][MAX_COLUMNAS])
  31. {
  32.    int i;
  33.  
  34.    for(i = 0 ; i < MAX_FILAS ; i++)
  35.        printf("%.*s\n",MAX_COLUMNAS - 1 , pantalla[i]);
  36. }
  37.  
  38. void rombo_2(int n_filas)
  39. {
  40.    char pantalla[MAX_FILAS][MAX_COLUMNAS];
  41.    int i;
  42.  
  43.    if(!(n_filas & 1))
  44.        return;
  45.  
  46.    for(i = 0 ; i < MAX_FILAS ; i++)
  47.        memset(pantalla[i],' ',MAX_COLUMNAS);
  48.  
  49.    dibujar_borde(pantalla,n_filas);
  50.    rellenar(pantalla , n_filas / 2 , n_filas / 2);
  51.    imprimir(pantalla);
  52. }
  53.  
  54. int main(int argc, char *argv[])
  55. {
  56.    rombo_2(11);
  57.  
  58.    return 0;
  59. }
  60.  

No es tan corta como las otras pero bueno, primero dibuja el perimetro y luego rellena el interior. Si rellenais el exterior tendreis el dibujo en "negativo".

¡Saludos!

Y ahora complicandolo un poco mas:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_FILAS 20
  6. #define MAX_COLUMNAS 80
  7.  
  8. int correcto(int fila,int columna)
  9. {
  10.    return fila >= 0 && fila < MAX_FILAS && columna >=0 && columna < MAX_COLUMNAS;
  11. }
  12.  
  13. void dibujar_borde(char pantalla[][MAX_COLUMNAS],int n_filas , int fila_centro, int columna_centro)
  14. {
  15.    int i;
  16.  
  17.    for(i = 0 ; i < n_filas ; i++)
  18.    {
  19.        if(correcto(fila_centro - n_filas / 2 + i , columna_centro - n_filas / 2 + abs(n_filas / 2 - i)))
  20.            pantalla[fila_centro - n_filas / 2 + i][columna_centro - n_filas / 2 + abs(n_filas / 2 - i)] = '*';
  21.  
  22.        if(correcto(fila_centro - n_filas / 2 + i , columna_centro + n_filas / 2 - abs(n_filas / 2 - i)))
  23.            pantalla[fila_centro - n_filas / 2 + i][columna_centro + n_filas / 2 - abs(n_filas / 2 - i)] = '*';
  24.    }
  25. }
  26.  
  27. void rellenar(char pantalla[][MAX_COLUMNAS], int fila, int columna)
  28. {
  29.    if(pantalla[fila][columna] == '*' || fila < 0 || fila >= MAX_FILAS || columna < 0 || columna > MAX_COLUMNAS)
  30.        return;
  31.  
  32.    pantalla[fila][columna] = '*';
  33.  
  34.    rellenar(pantalla, fila - 1, columna);
  35.    rellenar(pantalla, fila + 1, columna);
  36.    rellenar(pantalla, fila, columna - 1);
  37.    rellenar(pantalla, fila, columna + 1);
  38. }
  39.  
  40. void imprimir(char pantalla[][MAX_COLUMNAS])
  41. {
  42.    int i;
  43.  
  44.    for(i = 0 ; i < MAX_FILAS ; i++)
  45.        printf("%.*s\n",MAX_COLUMNAS - 1 , pantalla[i]);
  46. }
  47.  
  48. void rombo_3(char pantalla[][MAX_COLUMNAS], int n_filas, int fila_centro, int columna_centro)
  49. {
  50.    int i;
  51.  
  52.    if(!(n_filas & 1))
  53.        return;
  54.  
  55.    dibujar_borde(pantalla , n_filas, fila_centro , columna_centro);
  56.    rellenar(pantalla , fila_centro, columna_centro);
  57. }
  58.  
  59. int main(int argc, char *argv[])
  60. {
  61.    char pantalla[MAX_FILAS][MAX_COLUMNAS];
  62.    int i;
  63.    char cad[] = "QUEDA BONITO";
  64.  
  65.    for(i = 0 ; i < MAX_FILAS ; i++)
  66.        memset(pantalla[i],' ',MAX_COLUMNAS);
  67.  
  68.    rombo_3(pantalla, 11 , 10, 11/2);
  69.    rombo_3(pantalla, 17 , 10 , 11 + 17/2);
  70.    rombo_3(pantalla, 19 , 10 , 28 + 19 / 2);
  71.  
  72.    for(i = 0 ; cad[i] ; i++)
  73.        pantalla[5 + i][50] = cad[i];
  74.  
  75.    imprimir(pantalla);
  76. }
  77.  

¡Saludos!

Y en esta tercera versión, podéis jugar con los caracteres que forman el borde y los rellenos.
Código
  1.  
  2.  
  3. int correcto(int fila,int columna)
  4. {
  5.    return fila >= 0 && fila < MAX_FILAS && columna >=0 && columna < MAX_COLUMNAS;
  6. }
  7.  
  8. void dibujar_borde(char pantalla[][MAX_COLUMNAS],int n_filas , int fila_centro, int columna_centro,char ch)
  9. {
  10.    int i;
  11.  
  12.    for(i = 0 ; i < n_filas ; i++)
  13.    {
  14.        if(correcto(fila_centro - n_filas / 2 + i , columna_centro - n_filas / 2 + abs(n_filas / 2 - i)))
  15.            pantalla[fila_centro - n_filas / 2 + i][columna_centro - n_filas / 2 + abs(n_filas / 2 - i)] = ch;
  16.  
  17.        if(correcto(fila_centro - n_filas / 2 + i , columna_centro + n_filas / 2 - abs(n_filas / 2 - i)))
  18.            pantalla[fila_centro - n_filas / 2 + i][columna_centro + n_filas / 2 - abs(n_filas / 2 - i)] = ch;
  19.    }
  20. }
  21.  
  22. void rellenar(char pantalla[][MAX_COLUMNAS], int fila, int columna, char relleno)
  23. {
  24.    char actual;
  25.  
  26.    if(!correcto(fila,columna))
  27.        return;
  28.  
  29.    actual = pantalla[fila][columna];
  30.  
  31.    if(relleno == actual)
  32.        return;
  33.  
  34.    pantalla[fila][columna] = relleno;
  35.  
  36.    if(correcto(fila - 1,columna) && actual == pantalla[fila - 1][columna])
  37.        rellenar(pantalla, fila - 1, columna,relleno);
  38.  
  39.    if(correcto(fila + 1,columna) && actual == pantalla[fila + 1][columna])
  40.        rellenar(pantalla, fila + 1, columna,relleno);
  41.  
  42.    if(correcto(fila,columna + 1) && actual == pantalla[fila][columna + 1])
  43.        rellenar(pantalla, fila, columna + 1,relleno);
  44.  
  45.    if(correcto(fila,columna - 1) && actual == pantalla[fila][columna - 1])
  46.        rellenar(pantalla, fila, columna - 1,relleno);
  47.  
  48.    pantalla[fila][columna] = relleno;
  49. }
  50.  
  51. void imprimir(char pantalla[][MAX_COLUMNAS])
  52. {
  53.    int i;
  54.  
  55.    for(i = 0 ; i < MAX_FILAS ; i++)
  56.        printf("%.*s\n",MAX_COLUMNAS - 1 , pantalla[i]);
  57. }
  58.  
  59. int main(int argc, char *argv[])
  60. {
  61.    char pantalla[MAX_FILAS][MAX_COLUMNAS];
  62.    int i;
  63.    char cad[] = "QUEDA BONITO",interior = '*', exterior = ' ';
  64.  
  65.    for(i = 0 ; i < MAX_FILAS ; i++)
  66.        memset(pantalla[i],' ',MAX_COLUMNAS);
  67.  
  68.    dibujar_borde(pantalla, 11 , 10, 11/2 , interior);
  69.    rellenar(pantalla,10,11/2,interior);
  70.  
  71.    dibujar_borde(pantalla, 17 , 10, 10 + 17/2, interior);
  72.    rellenar(pantalla, 10 , 10 + 17 / 2, interior);
  73.  
  74.    dibujar_borde(pantalla, 11 , 10, 26 + 11 / 2, interior);
  75.    rellenar(pantalla, 10 , 26 + 11 / 2 , interior);
  76.  
  77.    rellenar(pantalla,0,0,exterior);
  78.  
  79.    for(i = 0 ; cad[i] ; i++)
  80.        pantalla[5 + i][50] = cad[i];
  81.  
  82.    imprimir(pantalla);
  83.  
  84.    return 0;
  85. }
  86.  

¡Saludos de nuevo!
415  Programación / Programación C/C++ / Re: [C] Rombo con asteriscos en: 7 Marzo 2014, 01:09 am
¡Buenas!

Como aun no había ninguna solución recursiva, aquí os dejo una  ;D
Código
  1. #include <stdio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. /* n == numero total de filas del rombo (no puede ser par) y el segundo parametro siempre es cero:
  6.    ejemplos: rombo(3,0);
  7.              rombo(11,0);
  8. */
  9. void rombo(int n,int paso)
  10. {
  11.    char *str = malloc(n / 2 + paso + 4);
  12.  
  13.    if(!(n & 1))
  14.        return;
  15.  
  16.    memset(str,' ',n / 2 - paso + 1);
  17.    memset(str + n / 2 - paso + 1 , '*' , 2 * paso + 1);
  18.    memcpy(str + n / 2 + paso + 2 ,"\n\0",2);
  19.  
  20.    printf("%s",str);
  21.  
  22.    if(paso == n / 2)
  23.    {
  24.        free(str);
  25.        return;
  26.    }
  27.  
  28.    rombo(n,paso+1);
  29.  
  30.    printf("%s",str);
  31.  
  32.    free(str);
  33. }
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37.    rombo(5,0);
  38.    rombo(4,0);
  39.    return 0;
  40. }
  41.  
416  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux en: 5 Marzo 2014, 11:01 am
Por cierto, que me puedes decir respecto a la antigüedad de los libros y la existencia de manuales del estilo más actualizados.

Sobre la antigüedad, ni idea, nunca los he usado ni los conozco. Y manuales de estilo tampoco ni idea. Aplica sentido comun. Indenta los bloques de codigo, los cuerpos de los bucles, cuerpos de las funciones, los campos de los struct o miembros de clases... da nombres coherentes a las variables y funciones. Vamos, que mas que llamarlo estilo se debería de llamar sentido comun para que tu código se pueda leer y entender tanto por ti como por otros.

¡Saludos!
417  Programación / Programación C/C++ / Re: Bug en String.h y getline( Eternal Idol, Littlehorse alguien)que opinan? en: 2 Marzo 2014, 21:43 pm
XD

Mira, haz este experimento:

Código
  1. string cad;
  2. int n;
  3.  
  4. cin >> n;
  5.  
  6. getline(cin, cad);
  7.  
  8. cout << n << endl;
  9.  
  10. cout << cad;
  11.  

Y cuando toque leer datos escribes un numero y una cadena con lo que se te ocurra.

Veras que te lee el número y luego la cadena. Es decir, después de leer el numero no descarta el resto de la linea que introduzcas, sino que solo descarta el número leído así que después de leer el numero no se quedará esperando a que introduzcas alguna cosa y pulses intro, sino que terminará de leer lo que había, que es lo que pasa en tu programa.

Lo mismo pasaría si utilizases cin para leer una cadena. Solo leería hasta el primer caracter en blanco (un espacio, un tabulador...) y dejaría el resto (esto creo que puedes modificarlo especificando otro delimitador para que cin termine de leer...).

Así que cuando utilices cin, acuérdate siempre de terminar de leer lo que pueda quedar en el flujo de entrada. Como ya sabes que la entrada termina con un \n, lo unico que tienes que hacer es while(cint.get() != '\n');

¡Saludos!
418  Sistemas Operativos / GNU/Linux / Re: Problema Instalar en KALI en: 2 Marzo 2014, 21:27 pm
man gzip y para los tar: man tar

Dudo bastante de que esa distribución no tenga esas herramientas.

¡Saludos!
419  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux en: 2 Marzo 2014, 21:05 pm
Gracias por la respuesta tan escueta. Ya me di cuenta de eso pero falla aunque ponga puntero_db.

 :D puntero_db no era un dato de tipo puntero (a no se que DB sea un typedef de un puntero de algun tipo de dato), asi que para acceder a la función de puntero_db no puedes utilizar el operador flecha, tienes que utilizar el operador punto.

¡Saludos!
420  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux en: 1 Marzo 2014, 21:10 pm
¡Buenas!

Tu no tienes un problema con GNU-Linux. El  problema lo tienes con la programación. Y el error te lo describe muy bien el compilador:
abrir_db2.c:37:5: error: expected identifier or ‘(’ before ‘->’ token

Eso mismo. Se espera un identificador antes de '->', y no miente, has puesto un tipo de dato, no el identificador de una variable.

Lee bien los mensajes de error.

¡Saludos!
Páginas: 1 ... 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [42] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 ... 122
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines