Ese algoritmo tiene grades fallos lógicos:
O bien la cadena tiene que ser simétrica con respecto al centro o no puede contener espacios.
Dado que hay palíndromos que contienen espacios y que no son simétricos os dirá que textos que realmente son palíndromos no lo son (ej: Anita lava la tina). Lo de los espacios lo podéis arreglar añadiendo una función que los elimine. De todas todas tenéis que corregir el código.
¡Saludos!
O bien la cadena tiene que ser simétrica con respecto al centro o no puede contener espacios.
Dado que hay palíndromos que contienen espacios y que no son simétricos os dirá que textos que realmente son palíndromos no lo son (ej: Anita lava la tina). Lo de los espacios lo podéis arreglar añadiendo una función que los elimine. De todas todas tenéis que corregir el código.
¡Saludos!
Creo que no, aunque parezca que sí.
Todo nace en la definición de la RAE de palíndromo:
Citar
palíndromo.
(Del gr. πάλιν, de nuevo, y δρόμος, carrera).
1. m. Palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda; p. ej., anilina; dábale arroz a la zorra el abad.
(Del gr. πάλιν, de nuevo, y δρόμος, carrera).
1. m. Palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda; p. ej., anilina; dábale arroz a la zorra el abad.
Por un lado está la definición: que se lea igual de derecha a izquierda.
Pero luego la pifian en el ejemplo que ponen ya que:
Citar
dábale arroz a la zorra el abad <== al derecho
daba el arroz al a zorra elabád <== al revés
Y aplicando en sentido estricto la definición de que se "lea" igual en ambos sentidos lo siento, pero a no ser que empecemos a hablar mal, no se leen igual a la que al a, ni el abad con elabád.
La definición lo pone bien clarito: que se lea igual al derecho que al revés. Y eso no ocurre, a no ser que nos empecemos a sacar reglas como que los espacios no cuentan o se quiten de un lugar y se pongan en otro, pero eso no es lo que dice la definición.
Sencillamente creo que se equivocaron en el ejemplo, por mencionar aunque sea de pasada, no se lee, como dice la definición, igual una letra acentuada que otra que no lo está.
Y si tenemos eso en cuenta los espacios si cuentan, y mucho ya que en el lenguaje hablado vendrían a representar una pausa mayor o menor. Soy tan estricto al respecto que dos espacios en blanco, cuando en el resto del texto se está usando sólo un espacio, podría considerarse una falta de ortografía "digital".
Pero no deja de ser más que una interpretación que hago yo y con la cual muchos disentirán, a pesar de que la definición es bien clara: que se lea igual.
Es más, no estoy de acuerdo ni con la definición ya que creo que debería haber sido que se escriba igual en ambos sentidos, lo que alejaría la incongruencia entre las letras mayúsculas y minúsculas ya que no es lo mismo:
Citar
En León se come bien
El león come bien
La diferencia entre mayúsculas y minúsculas puede cambiar el sentido de las palabras y frases. En el ejemplo que pongo, uno se refiere a un lugar, León, y el otro a un animal, el león. Pero en fin, no tuvieron eso en cuenta y se limitaron a que se lea igual. Si tuviéramos en cuenta este hecho efectivamente un palíndromo debería de ser estrictamente simétrico, como sucede en los números capicúa.
Pero a lo que iba, creo que tanto engelx como yo nos limitamos a palabras palíndrómicas, no a frases de ahí nuestros escuetos códigos .... y además lo hicimos a posta diferenciando mayúsculas de minúsculas, cosa que no es aplicable como ya he comentado, pero todo ha sido un juego en crear el código más cortito.
Aclaro que esto no tene nada que ver con do-while al que tengo por uno de los "maestros" de este foro. Todo lo contrario, es una observación con respecto a la RAE. Nada más lejos de mi intención que meterme con nadie y mucho menos, reitero, con do-while.
Y para frases y tener en cuenta la equivalencia entre mayúsculas y minúsculas, cosa que me horroriza:
Código
#include <stdio.h> #include <ctype.h> int main (){ char text[100]; int i=0,j=0; printf("\nIntroduce un texto: \n"); gets(text); while (text[j++]!='\0'); for(;(toupper(text[i])==toupper(text[j-i-2])) && j/2>i++;); printf (i>j/2 ? "\n Es un palindromo ": "\n No es un palindromo "); return 0; }
Eso sí, sigo firme en lo de los espacios, o coinciden o no se lee igual. Las pausas en la lectura las marcan los espacios, siempre bajo mi criterio, ¿ehh..?, o eso o es una falta "digital" de ortografía, como ya comenté.
¡¡¡¡ Saluditos! ..... !!!!