elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 10:16  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  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 3,857 veces)
j retirado

Desconectado Desconectado

Mensajes: 61



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

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

Código
/* Algoritmo que te dice si una palabra es palindromo */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define ES_PALIN printf("\n\nEs palindromo\n\n");
#define NO_PALIN printf("\n\nNo es palindromo\n\n");
#define FALSE 0
#define TRUE !FALSE
typedef int Bool;
 
void es_palindromo(char *a)
{
       Bool b = TRUE;
       int ultPos = strlen(a)-1;
       int i;
 
       for(i=0; i<strlen(a); i++, ultPos--)
       {
               if(a[i] != a[ultPos])
               {
                       b = FALSE;
                       break;
               }
       }
 
       if(b) ES_PALIN
       else NO_PALIN;
}
 
int main()
{
       char *a = (char *) calloc (20, sizeof(char));
       printf("Palabra: "); scanf("%s", a);
 
       es_palindromo(a);
 
       free(a); a=NULL;
 
       system("pause");
       return 0;
}
 

Saludos.


« Última modificación: 28 Junio 2009, 19:43 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 »

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
void descomponer(char *a)
{
       int unsigned tam_actual = strlen(a);
       int unsigned i, j;
       for(i=0; i<(strlen(a)-1); i++)
       {
               for(j=0; j<tam_actual; j++)
                       printf("%c", a[j]);
               printf("\n");
               tam_actual--;
       }
}
 
void descomponer2(char *a)
{
int unsigned tam_actual = 2;
int unsigned i, j;
 
for(i=0; i<(strlen(a)-1); i++)
{
for(j=0; j<tam_actual; j++)
printf("%c", a[j]);
printf("\n");
tam_actual++;
}
}
 
void descomponer3(char *a)
{
int unsigned tam_actual = 2;
int unsigned i, j, x=0;
 
while(x<(strlen(a)-1))
{
for(i=0; i<(strlen(a)-1); i++)
{
for(j=x; j<tam_actual; j++)
printf("%c", a[j]);
printf("\n");
tam_actual++;
}
tam_actual=2;
x++;
}
}
 
El siguiente simplemente redirige la salida en un fichero:
void descomponer4(char *a)
{
FILE *file = fopen("descomponer.txt","w");
int unsigned tam_actual = 2;
int unsigned i, j, x=0;
 
while(x<(strlen(a)-1))
{
for(i=0; i<(strlen(a)-1); i++)
{
for(j=x; j<tam_actual; j++)
fputc(a[j], file);
fputs("\n", file);
tam_actual++;
}
tam_actual=2;
x++;
}
 
fclose(file);
}
 

Saludos.

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


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

h0oke


Desconectado Desconectado

Mensajes: 2.058


Coder ~


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

Muy lindos los ejercicios. Felicitaciones
En línea
Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.561


Shrödingerificado


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

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

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

Mensajes: 2.968


/^$/


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

Código
#include <stdio.h>
#include <string.h>
void cadena_inversa(char cadena[], char cadena2[]);
int main(void)
{
   char cadena[200];
   printf("Cadena : ");
   scanf("%199s", cadena);
   char cadena2[200];
   cadena_inversa(cadena, cadena2);
   if(!strcmp(cadena, cadena2))
   printf("Es palindrome");
   else
   printf("No es palindrome");
   return 0;
}
void cadena_inversa(char cadena[], char cadena2[])
{
/* Se copia la cadena inversa en "cadena2" */
   signed int contador = 0;
   for(signed int i = strlen(cadena)-1; i >= 0; i--)
   cadena2[contador++] = cadena[i];
   cadena2[contador] = 0;
   }
En línea

Código
(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}
 

leorocko13@hotmail.com
https://github.com/leogtzr/
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


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

En Perl:
Código
#!/usr/bin/perl
use strict;
use warnings;
print "Escriba palabra : ";
chomp(my $word = <STDIN>);
if($word eq reverse($word))
{
print "Palindromo";
} else {
print "No palindromo";
}
exit;

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

Código
(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}
 

leorocko13@hotmail.com
https://github.com/leogtzr/
j retirado

Desconectado Desconectado

Mensajes: 61



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

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

Código
#define FALSE 0
#define TRUE !FALSE
typedef int Bool;
 
Bool palindromo(char *a);
void es_ipalindromo(char *a);
void es_dpalindromo(char *a);
 
Bool palindromo(char *a)
{
Bool b = TRUE;
int unsigned i, j;
 
for(i=0, j=strlen(a)-1; i<strlen(a); i++, j--)
{
if(a[i] != a[j]) b = FALSE;
break;
       }
return b;
}
 
void es_ipalindromo(char *a)
{
int unsigned i;
char *b = (char *) calloc (strlen(a)+1, sizeof(char));
for(i=1; i<strlen(a); i++)
b[i] = a[i];
 
if(palindromo(b))
printf("%s \tES i-palindromo\n", a);
else
printf("%s \tNO i-palindromo\n", a);
 
free(b); b=NULL;
}
 
void es_dpalindromo(char *a)
{
int unsigned i;
char *b = (char *) calloc (strlen(a)+1, sizeof(char));
for(i=0; i<strlen(a)-1; i++)
b[i] = a[i];
 
if(palindromo(b))
printf("%s \tES d-palindromo\n", a);
else
printf("%s \tNO d-palindromo\n", a);
 
free(b); b=NULL;
}
 

Saludos.
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.561


Shrödingerificado


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

En python:

Código
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 516 Último mensaje 5 Mayo 2011, 03:21
por Leyer
Ayuda. Programas para reconocer Números palíndromos.
Programación C/C++
theluigy13etv 9 1,138 Último mensaje 24 Enero 2012, 15:40
por Xandrete
Problema extraño con una consulta sencilla: Strings, Like
Bases de Datos
astinx 2 468 Último mensaje 10 Marzo 2012, 16:49
por astinx
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines