[ Foro de Pascal ]
Me compila pero no ejecuta y no se por que.
FUNCTION esPalindromo(s:string):boolean;
var i:integer;resul:boolean;
begin
i:=1 ;
resul:=true;
while (i<=length(s)div 2) do
begin
if s=s[length(s)-i] then
resul:=true
else
resul:=false;
i:=i+1;
end;
esPalindromo:=resul;
end;
¿Cómo que no ejecuta? Si el programa es sólo eso, te falta el cuerpo...
No lo puse aqui, pero el cuerpo del programa es este y me seguia sin ejecutar.... quedaba en negro el terminal, creo que era problema del ordenador
begin
write('inserte la palabras que desee: ');
readln(s);
IF esPalindromo(s)then
writeln('Es palindromo')
else
writeln('No es palindromo');
readln;
end.
No lo puse aqui, pero el cuerpo del programa es este y me seguia sin ejecutar.... quedaba en negro el terminal, creo que era problema del ordenador
begin
write('inserte la palabras que desee: ');
readln(s);
IF esPalindromo(s)then
writeln('Es palindromo')
else
writeln('No es palindromo');
readln;
end.
En mi computador sí corre, pero los resultados no son los esperados. Aunque la estrategia de solución está bien encaminada, el programa tiene errores de lógica, detalles que son muy importantes y hay que tenerlos en cuenta para lograr el resultado esperado.
Antes de comenzar a hablarte sobre esos errores de lógica, tienes que corregir la línea:
if s=s[length(s) - i] then
debería ser:
if s[i]=s[length(s) - i] then
Ahora vamos a comenzar con los errores de lógica. Necesitas hacer una corrida de mesa para que te des cuenta de lo que te diré a continuación. En primer lugar, el programa no compara la primera letra con la última, ni la segunda con la penúltima ni la tercera con la antepenúltima; para que en realidad lo haga, deberías colocar lo siguiente:
if s[i]=s[length(s) - i + 1] then
Haz la corrida de mesa para que te des cuenta.
Por otra parte, con esta modificación, si todas las letras externas de la palabra a examinar son distintas pero las dos letras más internas son iguales (ej: 123345), el resultado será que la palabra es palindromo pero NO LO ES, para evitar esto hay que modificar el if quitándole algunas cosas que no te sirven porque provocarían ese problema.
Begin
i:=1;
result:= true;
While (i<=length(s) div 2) do
Begin
if s[i]<>s[length(s) - i + 1] then
result:= false;
i:= i+1;
End;
esPalindromo:= result;
End;
Espero haberte ayudado.
Saludos.
Muchas gracias, a ver si me podeis ayudar con el ejercicio de de debajo de este!!
¿Cual es "el de debajo de este"? ¿El que has llamado "Problema dificil registros"?
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)