Programación General > C/C++
palindromo
haddad:
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++ ---#include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h> int main(int argc, char *argv[]){char cad[30];int n=0, cont=0; printf("introduzca una palabran");gets(cad); n=strlen(cad)/2; for(int x=0;x<n;x++){ for(int y=strlen(cad)-1;y>=n;y--){ if(cad[x]==cad[y]){ cont++; } } } if(cont==n) { printf("es palindromen"); } else { printf("no es palindromen"); } getch(); return 0;}
ssaammuu:
Lo podrías simplificar un poquito también
--- Código: C --- #include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h> int main(int argc, char *argv[]){ char cad[30]; int n=0, cont=0; printf("introduzca una palabran"); gets(cad); n=strlen(cad); bool pal=true; for(int x=0;x<n/2;x++) if (cad[x]!=cad[n-x-1]) pal=false; if(pal)printf("es palindromen"); else printf("no es palindromen"); getch(); return 0;}
haddad:
ok, gracias
podrias explicarme teoricamente en que consiste if (cad[x]!=cad[n-x-1])
saludos
ssaammuu:
--- Código: C --- bool pal=true; Empezamos asumiendo que la palabra es un palíndromo
--- Código: C --- for(int x=0;x<n/2;x++)if (cad[x]!=cad[n-x-1]) pal=false; 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[o]nocer == recon[o]cer
x=4 == n/2 -> termina bucle
resultado: si es palíndromo
haddad:
si, eso lo tengo claro. solo que al introducir palabras como aleteetela, me dice q no es palindromo :/
Navegación
[#] Página Siguiente
Ir a la versión completa