[ Foro de Pascal ]

FUNTION esPalindromo

07-Jan-2015 12:53
Alberto Rilo Mosteiro
6 Respuestas

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;




07-Jan-2015 15:51
Nacho Cabanes (+83)

¿Cómo que no ejecuta? Si el programa es sólo eso, te falta el cuerpo...


07-Jan-2015 16:02
Alberto Rilo Mosteiro

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.   




07-Jan-2015 16:02
Alberto Rilo Mosteiro

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.   




07-Jan-2015 23:53
Luis Torres (+18)

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.


08-Jan-2015 00:01
Alberto Rilo Mosteiro

Muchas gracias, a ver si me podeis ayudar con el ejercicio de de debajo de este!!


08-Jan-2015 00:25
Nacho Cabanes (+83)

¿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.)