Jump to content

ayuda codigo C


Recommended Posts

hola, estaba buscando algun código que me sirviera para saber si una palabra es palindrome(palabra que es igual leyendola normal o inversamente) o no:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


main(){
       char pal1[25], pal2[25];
       int x=0,u=0,n,e=0,a=0,p=0;
       char b=' ';
       
       printf("Ingrese la palabra:\n");
       gets(pal1);
       n=strlen(pal1);
       printf("La palabra %s tiene %d caracteres :\n",pal1,n);
   
   for(x=0;x<=n;x++)
   {
      if (pal1[x]==b)
        x++;
      pal2[e]=pal1[x];
      e++;
     }
     
   n=strlen(pal2);    
    for (x=n-1;x>=0;x--)
    {
     if (pal2[x]==pal2[a])
         p++;
    a++;
    }
    if (p==n){
    printf("La Palabra es palindrome\n");
}
      else{
       printf ("La Palabra no es palindrome\n");

    }

   
   system("PAUSE");
    
}

 

if (pal1[x]==b)

 

lo que esta en negrita no lo entiendo se supone que la condición se va a ejecutar si es verdadera, pero la variable 'b' no contiene nada, como se ejecuta esa accion

 

ojala me ayuden

 

saludos

Edited by Leoxz
Link to comment
Share on other sites

b tiene como valor ' ' , eso no es nada, es un espacio, por lo tanto el codigo dice, si el contenido de pal1[x] es igual al ' ' , se salta el espacio y sigue con la siguiente letra.

 

if (pal1[x]==b)

x++;

 

pero eso nunca va a ser igual

 

si por ejemplo, ingreso la palabra oso (palindrome)

 

if(pal1[0]==b) sería falso ya que no es igual y no se ejecutaria el x++

 

 

me estoy confundiendo xd

Edited by Leoxz
Link to comment
Share on other sites

el programa cuando pide que ingrese una palabra, en realidad puedes ingresar una frase como "Hola oso" , en ese caso el programa lo que hace es saltarse el espacio que hay entre hola y oso, pero sino tiene espacio, no es necesario que entre al if, la idea de ese if es saltarse el espacio, nada mas.

 

en realidad el programa verifica si una <"frase"> es palindrome.

 

ejemplo :

1) Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla

 

2) Allí si María avisa y así va a ir a mi silla

 

by wikipedia http://es.wikipedia.org/wiki/Pal%C3%ADndromo

 

PD: intenta con O S O , con espacios, para que veas :P .

Edited by el_caxulo
Link to comment
Share on other sites

el programa cuando pide que ingrese una palabra, en realidad puedes ingresar una frase como "Hola oso" , en ese caso el programa lo que hace es saltarse el espacio que hay entre hola y oso, pero sino tiene espacio, no es necesario que entre al if, la idea de ese if es saltarse el espacio, nada mas.

 

en realidad el programa verifica si una <"frase"> es palindrome.

 

ejemplo :

1) Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla

 

2) Allí si María avisa y así va a ir a mi silla

 

by wikipedia http://es.wikipedia.org/wiki/Pal%C3%ADndromo

 

PD: intenta con O S O , con espacios, para que veas :P .

 

ah ahora me quedo claro

 

muchas gracias amigo

 

Link to comment
Share on other sites

 for(x=0;x<=n;x++)
   {
      if (pal1[x]==b)
        x++;
      pal2[e]=pal1[x];
      e++;
     }

como b tiene asignado el espacio, ' ', como esta entre comillas significa que es un caracter, al leer un espacio entra al if, aumenta el x en 1 y despues al salir del if asigna al char que se esta creando el caracter siguiente al espacio.

Rutea el programa y lo entenderas mejor

Link to comment
Share on other sites

haz una funcion que de vuelta el string

 

luego verificas si el string original y el string original dado vuelta son iguales

eso es muy ineficiente xD

 

lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando.

 

un pseudocódigo sería mas menos así:

 

 

 


boolean palindromo(char *string){

int tope, i;

tope=largo(string);

for(i=0;i<tope;i++) {
    if(string[i] != string[tope]) return false;
    tope--;
}

return true;

}

 

 

Link to comment
Share on other sites

haz una funcion que de vuelta el string

 

luego verificas si el string original y el string original dado vuelta son iguales

eso es muy ineficiente xD

 

lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando.

 

un pseudocódigo sería mas menos así:

 

 

 


boolean palindromo(char *string){

int tope, i;

tope=largo(string);

for(i=0;i<tope;i++) {
    if(string[i] != string[tope]) return false;
    tope--;
}

return true;

}

 

 

tienes un error tope se sale del arreglo , comienzas comparando con algo que está fuera del arreglo , tope es el largo menos 1 .

Link to comment
Share on other sites

haz una funcion que de vuelta el string

 

luego verificas si el string original y el string original dado vuelta son iguales

eso es muy ineficiente xD

 

lo más fácil es con un for recorrer el vector desde el final y desde el principio al mismo tiempo, e ir comparando.

 

un pseudocódigo sería mas menos así:

 

 

 


boolean palindromo(char *string){

int tope, i;

tope=strlen(string);

for(i=0;i<tope;i++) {
    if(string[i] != string[tope]) return false;
    tope--;
}

return true;

}

 

 

tienes un error tope se sale del arreglo , comienzas comparando con algo que está fuera del arreglo , tope es el largo menos 1 .

 

en realidad, no me di cuenta, es que lo hice a la rápida, gracias, quedaría así entonces:

 

 

boolean palindromo(char *string){

 

int tope, i;

 

tope=strlen(string);

 

for(i=0;i<tope;i++) {

if(string != string[tope-1]) return false;

tope--;

}

 

return true;

 

}

Edited by Th3_K4T
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...