Funcion palíndromo.

Iniciado por ollessor, 16 Septiembre 2008, 18:27 PM

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

ollessor

No se como implementar una función que que me detecte si un array de caracteres es palindromo. ¿Sabe alguien como puedo hacerlo?
Gracias. ;D

byebye

busca que ya se hablo justo de esto.

TheMaker

#2
Crea un array auxiliar, inserta el original en el auxiliar empezando por el final, con esto el auxiliar tendra el original pero "dado la vuelta", comprueba si original y auxiliar son iguales, si lo son, entonces es palindromo.

Tmb puedes pasar de crear un nuevo array, compara posicion 0 con posicion n-1, 1 con n-2, 2 con n-3 ....  siendo n el numero total de caracteres, si todos son iguales entonces palindromo
Gibe money please or I report you

Spider-Net

Esto es una tontería pero bueno...

#include <stdio.h>
#include <string.h>
#define TAMANIO 81

//Declaracion de Funciones***************************************************
void Introducir_frase (char frase[])
{
printf ("introducir una frase: ");
gets (frase); fflush (stdin);
}

int Comprobar_frase (char frase[])
{
int longitud=strlen(frase);
int i=0;
while (i<=longitud/2 && frase[i]==frase[longitud-1-i])
  {
  i++;
  }
if (i>longitud/2)
   return 1;
   else
   return 0;
}

//F.Ppal*********************************************************************
int main (void)
{
char palindroma[81];
Introducir_frase (palindroma);
if (Comprobar_frase (palindroma))
printf ("Dicha frase es palindroma.");
else
  printf ("Dicha frase no es palindroma.");
getchar();
return 0;
}

ҒrεακΠιи∂

Buenas

Particularmente prefiero la respuesta de Spider a la de TheMaker (aunque tambien es valida) con algunas pequeñisimas modificaciones

Salu2, FreakMind
Connoisseurs of C semantics find C++ inferior to ++C

Ragnarok

#5
Cita de: Spider-Net en 17 Septiembre 2008, 01:43 AM
Esto es una tontería pero bueno...

Si es una tontería al menos hazlo un poco bonito, aunque para gustos los colores, pero por ejemplo habría que cambiar el void como argumento (no se pone) y el if innecesario, es como poner if i<j then return true else return false, se pone return i<j y listo. También el for está para algo, si tiene inicialización, comprobación y modificación de las variables inicializadas lo suyo es usar un for.

No es buena práctica que las funciones devuelvan void, pero tengo un poco de prisa, lo demás puedes verlo por ti mismo.

#include <stdio.h>
#include <string.h>
#define TAMANIO 81

//Declaracion de Funciones***************************************************
void Introducir_frase (char frase[]) {
printf ("introducir una frase: ");
gets (frase); fflush (stdin);
}

int Comprobar_frase (char frase[]){
int i, l;
for (i = 0, l=strlen(frase); i<=l/2 && frase[i]==frase[l-1-i]; i++);
return i>l/2;
}

//F.Ppal*********************************************************************
int main (){
  char palindroma[81];
  Introducir_frase (palindroma);
  printf ("Dicha frase %s es palindroma.", Comprobar_frase(palindroma)?"":"no");
  getchar();
  return 0;
}

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

Spider-Net

#6
Cita de: Ragnarok en 17 Septiembre 2008, 11:50 AM
Cita de: Spider-Net en 17 Septiembre 2008, 01:43 AM
Esto es una tontería pero bueno...

Si es una tontería al menos hazlo un poco bonito, aunque para gustos los colores, pero por ejemplo habría que cambiar el void como argumento (no se pone) y el if innecesario, es como poner if i<j then return true else return false, se pone return i<j y listo. También el for está para algo, si tiene inicialización, comprobación y modificación de las variables inicializadas lo suyo es usar un for.

No es buena práctica que las funciones devuelvan void, pero tengo un poco de prisa, lo demás puedes verlo por ti mismo.

Es una tontería, y ese código lo tengo desde que empecé a estudiar programación. Estudio administración de sistemas y esto era uno de los primeros ejercicios que hicimos, así que simplemente lo busqué y lo colgué para ayudar a este compañero. Pero la verdad es que ni lo leí, seguramente se pueda mejorar sí.

PD: No se cual es el problema de poner int main(void) en lugar de int main()
No creo que eso optimice el código pero bueno...
Tampoco sé cual es el problema en que una función no devuelva nada, osea que sea tipo void, yo aprendí a programar así y no entiendo cual es el problema xD.

Pero bueno como tú has dicho, para gustos, los colores...

Saludos!

ҒrεακΠιи∂

Buenas

Creo que para criticar, habria q criticar la actitud del que pidio el programa hecho...

Con respecto a si hay que poner o no void, es cuestion de gustos. Yo personalmente me parece que es mejor aclarar que esa funcion no lleva parametros utilizando void

Con el tema de usar o no void para el valor de retorno estoy entre el si y el no (un depende..). Si bien a veces es muy conveniente, otras no es necesario. Por ejemplo, si en la funcion tirara una excepcion, habria que ver si devolver algun valor es util.

Pero bueno, ya que dejaron el codigo... ahi va el mio XD

Código (cpp) [Seleccionar]

int isPalindromo(char *str)
{
     int       i = 0, len = strlen(str);
     
     while( i <= len && tolower(str[i++]) == tolower(str[--len]) );

     return i > len;
}
Connoisseurs of C semantics find C++ inferior to ++C

Spider-Net

Jejejeej, pero eso es C++, el mío es en C  :P

ҒrεακΠιи∂

Cita de: Spider-Net en 17 Septiembre 2008, 20:00 PM
Jejejeej, pero eso es C++, el mío es en C  :P
C++ ??? donde? Y aunque lo hubiera usado, como te darias cuenta???

Salu2, FreakMind
Connoisseurs of C semantics find C++ inferior to ++C