elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Palindromo con Pilas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Palindromo con Pilas  (Leído 14,541 veces)
Muffin

Desconectado Desconectado

Mensajes: 1



Ver Perfil
Palindromo con Pilas
« en: 15 Septiembre 2010, 02:50 am »

Codifica en Ansi C un programa que realice lo siguiente:

- Implemente las funciones push, pop y display para una pila dinámica (utiizando listas enlazadas) de caracteres.

- Utilizando las funciones anteriores, el programa debe ser capaz de decir si una cadena de caracteres tecleada por el usuario es palíndrome o no (es palíndrome si se lee igual de izquierda a derecha que de derecha a izquierda).

--------------------------------------------------------------

Ya tengo prácticamente el programa pero no me detecta todos los palindromes, algunos me dice que no son cuando si son en que estoy mal???
Código:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>


struct Pila
{
    char dato;
    struct Pila *Sig;
};

typedef struct Pila *Ap;

void push(Ap*, char);
void display(Ap);
char pop(Ap*);
void Palindromo();
void vGotoxy (int, int);

int main()
{
    Ap top;
    int opc;
    top = NULL;
    char palabra[30];
   
    do
    {
        system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
vGotoxy(40-strlen("Pilas\n\n")/2,2);
printf("Pilas\n\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13);
        printf("\n\n\n\t1. Introducir un palindromo \n\t2. Salir \n\n\n\t\t\tOpcion: ");

opc = getchar();

switch(opc)
{
            case '1':
                system("cls");
                Palindromo();
                break;
               
            case '2':
                system("cls");
                vGotoxy(40-strlen("Adeu!!")/2,10);
                printf("Adeu!!");
                break;
        }
    }while(opc!='2');
   
    getch();
   
    return 0;   
}

void Palindromo()
{
    char frase[30], invert[30], letra[20];
    int j = 0;
    Ap Tope;
    Tope = NULL;
   
    fflush(stdin);
    printf("Escriba un palindromo: \n");
    gets(frase);
   
    for(int i=0; i<strlen(frase); i++)
    {
        if(frase[i] != 32)
        {
            letra[j] = frase[i];
            push(&Tope, frase[i]);
           
            j++;
        }
    }
   
    display(Tope);
   
    for(int k = 0; k<j; k++)
    {
        invert[k] = pop(&Tope);
    }
   
    if(strncmp (letra,invert,strlen(invert)) == 0) //strncmp (letra,invert,strlen(invert)) == 0 || strcmp(letra, invert) == 0
        printf("Si es un palindromo\n");
    else
        printf("No es un palindromo\n");
       
    getch();
}   

void push(Ap *Tope, char pLetra)
{
    struct Pila *x;
    x = new struct Pila;
    x->dato = pLetra;
    x->Sig = *Tope;
    *Tope = x;
}

void display(Ap Tope)
{
    int i = 0;
    struct Pila *temp;
    temp = Tope;

while(temp!=NULL)
{
   printf("Letra %d: %c\n", i++, temp->dato);
   temp = temp->Sig;
}
}


char pop(Ap *Tope)
{
    char a;
   
    if(*Tope == NULL)
    {
        printf("PILA VACIA...");
        return 0;
    }
    else
    {
        a = (*Tope)->dato;
        *Tope = (*Tope)->Sig;           
        return (a);
    }
}

void vGotoxy (int posx, int posy) // Función para centrar en pantalla
{
     HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);
     
     if (INVALID_HANDLE_VALUE !=hConsole) {
        COORD pos={posx,posy};
        SetConsoleCursorPosition (hConsole,pos);
        }
}

Lo siento, está un poco largo.. espero que puedan ayudarme!! Llevo mucho tiempo haciendo esto >.<


En línea

ricardo_b

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Palindromo con Pilas
« Respuesta #1 en: 28 Enero 2011, 02:32 am »

Ya lo tienes todo!.

Solo, en esta parte esta algo mal:

    for(int k = 0; k<j; k++)
    {
        invert[k] = pop(&Tope);
    }

    if(strncmp (letra,invert,strlen(invert)) == 0) //strncmp (letra,invert,strlen(invert)) == 0 || strcmp(letra, invert) == 0
        printf("Si es un palindromo\n");
    else
        printf("No es un palindromo\n");


---------------------------------------------------------------------------------------------

Tienes que evaluar tu frase inversa y la no inversa, si existe alguna letra que no concuerde con esto ya no es un palidromo, si todas las letras concidieron es palidromo, sustituye lo de arriba por algo asi:

   char flag(1);
    for(int k = 0; k<j; k++)
    {
      //Obtiene elemento de la pila
      invert[k] = pop(&Tope);
      //Compara la cadena puesta en pila VS la cadena original (sin espacios)
      if(invert[k] != letra[k]){
         flag='F';
      }     
    }


Si flag = F no es un palidromo, en caso contrario es un palidromo.


Espero te pueda ayudar asi.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre el ejercicio del palindromo.
Programación C/C++
-esifu- 6 6,081 Último mensaje 14 Diciembre 2010, 19:16 pm
por Garfield07
Duda funcion palindromo
Programación C/C++
cazagavilan 2 2,823 Último mensaje 9 Abril 2012, 16:07 pm
por cazagavilan
[Python]Formas de saber si una palabra es palindromo
Scripting
0x5d 2 22,564 Último mensaje 26 Abril 2012, 01:19 am
por 0x5d
palindromo « 1 2 »
Programación C/C++
ALONSOQ 16 11,956 Último mensaje 7 Agosto 2012, 17:52 pm
por X3R4CK3R
palindromo con pilas en java
Java
Mantzur 1 6,147 Último mensaje 10 Octubre 2016, 16:35 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines