Problema con un programa en C (string.h y funciones)

Iniciado por loriik, 11 Marzo 2014, 01:00 AM

0 Miembros y 1 Visitante están viendo este tema.

leosansan

#20
Cita de: do-while en 12 Marzo 2014, 08:56 AM
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!

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.


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 (cpp) [Seleccionar]

#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! ..... !!!!



Yoel Alejandro

Ah bueno leosansan tienes razón, ya eso depende de la interpretación que demos de palíndromo, si bien la definición formal RAE (que es la oficial de nuestro idioma), o bien una definición más relajada.

A veces en determinada ciencia tomamos definiciones más amplias (o más estrictas) que las lingüísticas, y podría ser ese el caso de la informática. Está bien tu aporte y el de todos, porque así contamos con un abanico de soluciones, adaptadas a las distintas interpretaciones del problema.

Un buen proyecto sería construir una función "múltiple", con un argumento option adicional que especifique el tipo de interpretación que será hecho (omitiendo o no los espacios, diferenciando mayúsculas, etc). Así sería más flexible, amplio y práctico  :D.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

leosansan

Cita de: yoel_alejandro en 13 Marzo 2014, 18:12 PM
.........................................................................................

Un buen proyecto sería construir una función "múltiple", con un argumento option adicional que especifique el tipo de interpretación que será hecho (omitiendo o no los espacios, diferenciando mayúsculas, etc). Así sería más flexible, amplio y práctico  :D.

Muy buena idea amigo yoel_alejandro, Ya hay algo en lo que trabajar. :)

¡¡¡¡ Saluditos! ..... !!!!