• Sábado 20 de Abril de 2024, 13:43

Autor Tema:  Palíndromo  (Leído 23157 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Palíndromo
« en: Martes 29 de Diciembre de 2009, 12:34 »
0
Buenos días. Mientras me llegaba la respuesta de la traspuesta de la matriz, comencé con la siguiente práctica, en la que se pide realizar un algoritmo que diga si una palabra es o nó un palíndromo (palabra que se lee igual de izquierda a derecha que de derecha a izquierda). He curioseado un poco por internet y es un tema bastante tocado, aunque los códigos fuente que he encontrado, u están incompletos, o usan instrucciones qu eno entiendo por mi escaso nivel.

Os dejo mi código por si veis los fallos u incoherencias para corregirlos. Gracias chicos!

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /*Algoritmo -> PALINDROMO*/
  6. int main (void){
  7.    
  8.     int n=0;                    //contador del tamaño de 'operacion'
  9.     char palabra[100];          //cadena que almacena la palabra
  10.     char operacion[n];          //cadena para realizar la comparacion
  11.     int i, a, c;                //contadores
  12.        
  13.     printf("Escriba la palabra: ");
  14.     memset(&palabra, 0, sizeof(palabra));               //inicializar 'palabra'
  15.     scanf("%s", &palabra);
  16.    
  17.     for(c=0; c<100; c++){                   //guarda la palabra en 'operacion'
  18.         if(palabra[c]!=0){
  19.             operacion[c]=palabra[c];
  20.             n=n+1;                          //da el tamaño a 'operacion'
  21.         }
  22.     }
  23.    
  24.     /*comprueba si es palindromo, si la primera comprobacion falla,
  25.     termina el programa*/      
  26.     for(i=0; i<n; i++){
  27.         for(a=n-1; a>=0; a--){
  28.             if(operacion[i]!=operacion[a]){
  29.                 printf("La palabra %s no es palindromon", palabra);
  30.                 return EXIT_SUCCESS;
  31.             }
  32.         }
  33.     }
  34.    
  35.     printf("La palabra %s es un palindromo", palabra);
  36.    
  37.     return 1;  
  38. }
  39.  

Un abrazo y felices fiestas!

tuflotas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Palíndromo
« Respuesta #1 en: Martes 29 de Diciembre de 2009, 12:38 »
0
para conocer la longitud de un string tienes  tamanho=strlen(string);

para comprar tambien tienes strcmp(char, char); asi puedes comparar el primer caracter con el ultimo que te de la funcion strlen

locazopro

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Palíndromo
« Respuesta #2 en: Martes 29 de Diciembre de 2009, 22:00 »
0
como bien dice el amigo del post anterior, puedes usar las funciones de la librería string. Tu programa tiene mucho código que no es necesario, mira un algoritmo para el palíndromo puede ser el que sigue:

1.- Tomas la palabra y obtienes su largo
2.- En un bucle que recorrala mitad de la palabra, comparas la primera letra con la última y avanzas un contador que parte de 0 y disminuyes un contador que
parte desde el total de palabras menos 1.
3.- Haces la comprobación que tenías en tu algoritmo inicial.

Te dejo un ejemplo:

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /*Algoritmo -> PALINDROMO*/
  6. int main (void)
  7. {
  8.  
  9.     char palabra[100];          /*//cadena que almacena la palabra*/
  10.     int i, a, c;                /*//contadores*/
  11.  
  12.     printf("Escriba la palabra: ");
  13.     memset(&palabra, 0, sizeof(palabra));               /*//inicializar 'palabra'*/
  14.     scanf("%s", palabra);
  15.  
  16.     a = c = strlen(palabra);
  17.  
  18.     for (i=0;i<a;i++,c--) {
  19.         if (palabra[i] != palabra[c-1]) {
  20.             printf("La palabra %s no es palindromon", palabra);
  21.             return EXIT_SUCCESS;
  22.         }
  23.     }
  24.  
  25.     printf("La palabra %s es un palindromo", palabra);
  26.  
  27.     return 1;
  28. }
  29.  

Puedes partir con eso y arreglarlo tú. Espero te sirva.

Saludos!

sanlegas2000

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Palíndromo
« Respuesta #3 en: Miércoles 30 de Diciembre de 2009, 19:53 »
0
este es el codigo para ansi c:
1. no uso la libreria string.h ya que para calcular la longitud lo hago yo mismo.
2. lo hago usando funciones
3. si tienes duda mandame un mensaje

#include<stdio.h>
int palin(char pala[])
{
   int i,j,a;
   for(i=0;pala!='';i++);// te calcula la longitud de la cadena
   a=i-1;
   for (j=0; j<a;j++)
   {
      if(pala[j]!=pala[a])
   printf("no es paln");
      break;
      a--;
   }
      
   if   (pala[j]==pala[a])
      
      
      printf("si es paln");
      
        
   
}
   
   
int main (void)
{
   
   char pala[20];// declaracion de la cadena
   gets(pala);// lees la cadena
   palin(pala);// mandas a la funcion la cadena
      
   return 0;
}

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Palíndromo
« Respuesta #4 en: Domingo 3 de Enero de 2010, 20:57 »
0
Bueno chicos, despues de varias horas de trabajo y mezclar código de todos, por fin tengo mi programilla listo. Os lo mando para que lo leais. Muchas gracias por vuestro tiempo con los que estamos empezando.

Código: C
  1.  
  2. /*Ejercicio 7; Tema3; libro "FundamentosdeInformatica", Jose Joaquin Aguilera*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.      
  8. /*Algoritmo -> PALINDROMO*/
  9. int main (void){
  10.     char palabra[100];                      //cadena que almacena la palabra
  11.     int i, a, c;                            //contadores
  12.     printf("Escriba la palabra: ");
  13.     memset(&palabra, 0, sizeof(palabra));   //inicializar 'palabra'
  14.     scanf("%s", palabra);
  15.    
  16.     a = c = strlen(palabra);
  17.    
  18.     for (i=0;i<a;i++,c--){
  19.         if (palabra[i] != palabra[c-1]){
  20.             printf("La palabra '%s' no es palindromon", palabra);
  21.             return EXIT_FAILURE;
  22.         }
  23.    }
  24.    
  25.    printf("La palabra '%s' es un palindromon", palabra);
  26.    
  27.    return 0;
  28. }
  29.  
  30.  


Me gustaría haceros una pregunta. Ya se que no hay foro de pseudocódigo, pero de que manera puedo declarar la función return EXIT_FAILURE o EXIT_SUCCESS (una que me finalice el programa en ese punto) en un algoritmo escrito en pseudocódigo???

Gracias otra vez. Un saludo!