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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Problema de strings: Palindromos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de strings: Palindromos.  (Leído 10,093 veces)
j retirado

Desconectado Desconectado

Mensajes: 61



Ver Perfil WWW
Problema de strings: Palindromos.
« en: 27 Junio 2009, 21:31 pm »

Para ver qué es un palindromo, véase Palindromo. Posteen más soluciones.

Código
  1. /* Algoritmo que te dice si una palabra es palindromo */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #define ES_PALIN printf("\n\nEs palindromo\n\n");
  8. #define NO_PALIN printf("\n\nNo es palindromo\n\n");
  9. #define FALSE 0
  10. #define TRUE !FALSE
  11. typedef int Bool;
  12.  
  13. void es_palindromo(char *a)
  14. {
  15.        Bool b = TRUE;
  16.        int ultPos = strlen(a)-1;
  17.        int i;
  18.  
  19.        for(i=0; i<strlen(a); i++, ultPos--)
  20.        {
  21.                if(a[i] != a[ultPos])
  22.                {
  23.                        b = FALSE;
  24.                        break;
  25.                }
  26.        }
  27.  
  28.        if(b) ES_PALIN
  29.        else NO_PALIN;
  30. }
  31.  
  32. int main()
  33. {
  34.        char *a = (char *) calloc (20, sizeof(char));
  35.        printf("Palabra: "); scanf("%s", a);
  36.  
  37.        es_palindromo(a);
  38.  
  39.        free(a); a=NULL;
  40.  
  41.        system("pause");
  42.        return 0;
  43. }
  44.  

Saludos.


« Última modificación: 28 Junio 2009, 19:43 pm por j.rm » En línea

j retirado

Desconectado Desconectado

Mensajes: 61



Ver Perfil WWW
Re: Problema de strings: Palindromos.
« Respuesta #1 en: 28 Junio 2009, 05:47 am »

Un enunciado más complicado del problema:

Citar
Una hilera de letras, o palabra, se llama palindromo cuando tiene más de
una letra y leída de izquierda a derecha y de derecha a izquierda son
iguales, por ejemplo, ababa.

Una hilera se llama i-palindromo cuando quitando el primer carácter de la
izquierda se convierte en palindromo, por ejemplo casa.

Una hilera se llama d-palindromo cuando quitando el primer carácter de la
derecha se convierte en palindromo, por ejemplo amad.

Llamaremos palabras distinguidas a aquellas que son palindromo, ipalindromo
o d-palindromo.

El problema consiste en recibir una palabra y determinar los cortes, si los
hubiera, que la descomponen en dos palabras distinguidas, e indicar para
cada una de ellas de que tipo o tipos es.

Ejemplo 1:
Si la entrada contiene:
azarosos

La salida podría contener:
azar d-palindromo
osos i-palindromo d-palindromo
etc.

Ejemplo 2:
Si la entrada contiene:
amarrar

La salida podría contener:
ama palindromo
rrar i-palindromo
amar d-palindromo
rar palindromo
etc.

Yo hice un par de funciones que descompenen un string en substring (por asi decirlo) y que pueden ayudar un poco en la solución. Pruebenlas y comenten.

Código
  1. void descomponer(char *a)
  2. {
  3.        int unsigned tam_actual = strlen(a);
  4.        int unsigned i, j;
  5.        for(i=0; i<(strlen(a)-1); i++)
  6.        {
  7.                for(j=0; j<tam_actual; j++)
  8.                        printf("%c", a[j]);
  9.                printf("\n");
  10.                tam_actual--;
  11.        }
  12. }
  13.  
  14. void descomponer2(char *a)
  15. {
  16. int unsigned tam_actual = 2;
  17. int unsigned i, j;
  18.  
  19. for(i=0; i<(strlen(a)-1); i++)
  20. {
  21. for(j=0; j<tam_actual; j++)
  22. printf("%c", a[j]);
  23. printf("\n");
  24. tam_actual++;
  25. }
  26. }
  27.  
  28. void descomponer3(char *a)
  29. {
  30. int unsigned tam_actual = 2;
  31. int unsigned i, j, x=0;
  32.  
  33. while(x<(strlen(a)-1))
  34. {
  35. for(i=0; i<(strlen(a)-1); i++)
  36. {
  37. for(j=x; j<tam_actual; j++)
  38. printf("%c", a[j]);
  39. printf("\n");
  40. tam_actual++;
  41. }
  42. tam_actual=2;
  43. x++;
  44. }
  45. }
  46.  
  47. El siguiente simplemente redirige la salida en un fichero:
  48. void descomponer4(char *a)
  49. {
  50. FILE *file = fopen("descomponer.txt","w");
  51. int unsigned tam_actual = 2;
  52. int unsigned i, j, x=0;
  53.  
  54. while(x<(strlen(a)-1))
  55. {
  56. for(i=0; i<(strlen(a)-1); i++)
  57. {
  58. for(j=x; j<tam_actual; j++)
  59. fputc(a[j], file);
  60. fputs("\n", file);
  61. tam_actual++;
  62. }
  63. tam_actual=2;
  64. x++;
  65. }
  66.  
  67. fclose(file);
  68. }
  69.  

Saludos.

EDIT: Aprendí a usar la función GeSHi. Gracias Leo Gutierrez.


« Última modificación: 30 Junio 2009, 12:41 pm por j.rm » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Problema de strings: Palindromos.
« Respuesta #2 en: 28 Junio 2009, 16:00 pm »

Muy lindos los ejercicios. Felicitaciones
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.590


Shrödingerificado


Ver Perfil
Re: Problema de strings: Palindromos.
« Respuesta #3 en: 28 Junio 2009, 18:23 pm »

Código
  1. int esPalindromo(char *s){
  2.  for (int i=0, j=strlen(s)-1; s[i] == s [j] && i < j; i++, j--);
  3.  return i >= j;
  4. }
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Problema de strings: Palindromos.
« Respuesta #4 en: 28 Junio 2009, 18:29 pm »

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. void cadena_inversa(char cadena[], char cadena2[]);
  4. int main(void)
  5. {
  6.    char cadena[200];
  7.    printf("Cadena : ");
  8.    scanf("%199s", cadena);
  9.    char cadena2[200];
  10.    cadena_inversa(cadena, cadena2);
  11.    if(!strcmp(cadena, cadena2))
  12.    printf("Es palindrome");
  13.    else
  14.    printf("No es palindrome");
  15.    return 0;
  16. }
  17. void cadena_inversa(char cadena[], char cadena2[])
  18. {
  19. /* Se copia la cadena inversa en "cadena2" */
  20.    signed int contador = 0;
  21.    for(signed int i = strlen(cadena)-1; i >= 0; i--)
  22.    cadena2[contador++] = cadena[i];
  23.    cadena2[contador] = 0;
  24.    }
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Problema de strings: Palindromos.
« Respuesta #5 en: 28 Junio 2009, 21:06 pm »

En Perl:
Código
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. print "Escriba palabra : ";
  5. chomp(my $word = <STDIN>);
  6. if($word eq reverse($word))
  7. {
  8. print "Palindromo";
  9. } else {
  10. print "No palindromo";
  11. }

En Batch:
Código
  1. @echo off
  2. if exist "file.txt" (del /f /q "file.txt")
  3. setlocal enabledelayedexpansion
  4. :code
  5. set /p "cadena=Cadena : "
  6. if not defined cadena (goto:code)
  7. set "cadena=%cadena: =%"
  8. set "cadena_=%cadena%"
  9. set /a "longitud-=1"
  10. :bucle
  11. set "cadena=%cadena:~1%"
  12. set /a "longitud+=1"
  13. if defined cadena goto:bucle
  14. for /l %%_ in (%longitud%=-1=0) do <nul set /p "=!cadena_:~% style="color: #448888;">%_,1!" >> "file.txt"
  15. for /f "tokens=*" %%_ in (file.txt) do (
  16. if /i "%cadena_%"=="%%_" (echo.Palindrome) else (echo.No palindrome)
  17. )
  18. pause>nul 2>&1
  19. exit /b 0
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
j retirado

Desconectado Desconectado

Mensajes: 61



Ver Perfil WWW
Re: Problema de strings: Palindromos.
« Respuesta #6 en: 30 Junio 2009, 13:31 pm »

Algo más para el segundo enunciado. i-palindromo, d-palindromo:

Código
  1. #define FALSE 0
  2. #define TRUE !FALSE
  3. typedef int Bool;
  4.  
  5. Bool palindromo(char *a);
  6. void es_ipalindromo(char *a);
  7. void es_dpalindromo(char *a);
  8.  
  9. Bool palindromo(char *a)
  10. {
  11. Bool b = TRUE;
  12. int unsigned i, j;
  13.  
  14. for(i=0, j=strlen(a)-1; i<strlen(a); i++, j--)
  15. {
  16. if(a[i] != a[j]) b = FALSE;
  17. break;
  18.        }
  19. return b;
  20. }
  21.  
  22. void es_ipalindromo(char *a)
  23. {
  24. int unsigned i;
  25. char *b = (char *) calloc (strlen(a)+1, sizeof(char));
  26. for(i=1; i<strlen(a); i++)
  27. b[i] = a[i];
  28.  
  29. if(palindromo(b))
  30. printf("%s \tES i-palindromo\n", a);
  31. else
  32. printf("%s \tNO i-palindromo\n", a);
  33.  
  34. free(b); b=NULL;
  35. }
  36.  
  37. void es_dpalindromo(char *a)
  38. {
  39. int unsigned i;
  40. char *b = (char *) calloc (strlen(a)+1, sizeof(char));
  41. for(i=0; i<strlen(a)-1; i++)
  42. b[i] = a[i];
  43.  
  44. if(palindromo(b))
  45. printf("%s \tES d-palindromo\n", a);
  46. else
  47. printf("%s \tNO d-palindromo\n", a);
  48.  
  49. free(b); b=NULL;
  50. }
  51.  

Saludos.
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.590


Shrödingerificado


Ver Perfil
Re: Problema de strings: Palindromos.
« Respuesta #7 en: 22 Julio 2009, 19:43 pm »

En python:

Código
  1. palindromo = lambda s: s[:len(s)//2] == s[:(len(s)-1)//2:-1]
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema enviando Strings por sockets en una multiconexion por Thread
Java
undercode2 1 2,689 Último mensaje 5 Mayo 2011, 03:21 am
por Leyer
Ayuda. Programas para reconocer Números palíndromos.
Programación C/C++
theluigy13etv 9 13,071 Último mensaje 24 Enero 2012, 15:40 pm
por Xandrete
Problema extraño con una consulta sencilla: Strings, Like
Bases de Datos
astinx 2 2,847 Último mensaje 10 Marzo 2012, 16:49 pm
por astinx
Problema con STRINGS
Programación C/C++
kaskull 2 2,233 Último mensaje 28 Diciembre 2012, 19:00 pm
por kaskull
Problema con Palindromos en C
Programación C/C++
CNerd 1 4,359 Último mensaje 23 Mayo 2014, 09:00 am
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines