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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / 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 >.<
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines