• Viernes 8 de Noviembre de 2024, 15:41

Autor Tema:  palindromo  (Leído 2186 veces)

haddad

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
palindromo
« en: Viernes 6 de Mayo de 2011, 02:06 »
0
que mas muchachos! aqui les dejo un codigo que imprime si la palabra ingresada es palindrome o no,  tiene algunos errores, como que no tiene en cuenta cuando una palabra no es par o cuando se repite una letra en la mitad.
recibo sugerencias
saludos!

Código: C++
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. char cad[30];
  9. int n=0, cont=0;
  10.  
  11. printf("introduzca una palabran");
  12. gets(cad);
  13.  
  14. n=strlen(cad)/2;
  15.  
  16. for(int x=0;x<n;x++){
  17.         for(int y=strlen(cad)-1;y>=n;y--){
  18.                 if(cad[x]==cad[y]){
  19.                 cont++;
  20.                 }
  21.                 }
  22.         }
  23.   if(cont==n)
  24.   {
  25.              printf("es palindromen");
  26.                }
  27.                
  28.              else
  29.              {
  30.              printf("no es palindromen");
  31.              }
  32.   getch();
  33.   return 0;
  34. }
  35.  
  36.  

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: palindromo
« Respuesta #1 en: Viernes 6 de Mayo de 2011, 02:29 »
0
Lo podrías simplificar un poquito también
Código: C
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     char cad[30];
  10.     int n=0, cont=0;
  11.  
  12.     printf("introduzca una palabran");
  13.     gets(cad);
  14.  
  15.     n=strlen(cad);
  16.  
  17.     bool pal=true;
  18.     for(int x=0;x<n/2;x++)
  19.     if (cad[x]!=cad[n-x-1]) pal=false;
  20.  
  21.     if(pal)printf("es palindromen");
  22.     else printf("no es palindromen");
  23.  
  24.     getch();
  25.     return 0;
  26. }
  27.  
  28.  

haddad

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: palindromo
« Respuesta #2 en: Sábado 7 de Mayo de 2011, 18:39 »
0
ok, gracias
podrias explicarme teoricamente en que consiste if (cad
  • !=cad[n-x-1])

saludos

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: palindromo
« Respuesta #3 en: Domingo 8 de Mayo de 2011, 13:04 »
0
Código: C
  1.  
  2. bool pal=true;
  3.  
  4.  
Empezamos asumiendo que la palabra es un palíndromo

Código: C
  1.  
  2. for(int x=0;x<n/2;x++)
  3. if (cad[x]!=cad[n-x-1]) pal=false;
  4.  
  5.  
comparamos cada caracter desde 0 hasta la mitad con la posición equivalente empezando desde el final de la cadena  y si no son iguales decimos que la palabra no es un pilíndromo.

Es decir, toma por ejemplo "reconocer"
n/2=4.5 -> 4 porque n es int
pal=true;
[empieza bucle]
x=0  [r]econocer == reconoce[r]
x=1  r[e]conocer == reconoc[e]r
x=2  re[c]onocer == recono[c]er
x=3  rec
  • nocer == recon
  • cer

x=4 == n/2  -> termina bucle
resultado: si es palíndromo

haddad

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: palindromo
« Respuesta #4 en: Domingo 8 de Mayo de 2011, 20:38 »
0
si, eso lo tengo claro. solo que al introducir palabras como aleteetela, me dice q no es palindromo :/

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: palindromo
« Respuesta #5 en: Domingo 8 de Mayo de 2011, 22:01 »
0
He probado esa palabra con el código que escribí y dice que si es palíndromo.
En el código que tu posteaste no porque tus bucles están bastante mal. Si te fijas tienes un bucle que recorre todas las letras, y dentro de él, es decir, para cada letra, tienes OTRO BUCLE que hace algo bastante raro.