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

  el_caxulo said:

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_caxulo said:

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

  cañangasñangas said:

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

  Th3_K4T said:

  cañangasñangas said:

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

  lostinspacex said:

  Th3_K4T said:

  cañangasñangas said:

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