none
Ayuda! pila vacia en Visual C++ 2010 RRS feed

  • Pregunta

  • Hola querida comunidad MSDN!

    Tengo el siguiente codigo el cual inserta(push), retitra(pop) y muestra los elementos en una pila:

    #include "stdafx.h"
    #include <iostream>
    #include <ctype.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>


    using namespace std;


    void push(int *b, int pilaA[10])
    {
    if(*b==5)
    {
    cout << "La pila ha sido llenada"<<endl<<endl;
    }
    else
    {
    cout <<endl<<"Ingresa el elemento a la pila: ";
    cin >> pilaA[*b];
    *b=*b+1;
    }
    }


    void pop(int *c, int pilaB[10])
    {
    if (*c<=0)
    {
    cout << "No hay elementos en la pila. Ingrese primero un elemento"<<endl<<endl;
    }
    else
    {
    *c=*c-1;
    cout <<endl<<"ELEMENTO SACADO DE LA PILA"<<" "<<"-->"<<" " <<pilaB[*c]<<endl;
    }

    }

    void mostar(int *cima, int pilaC[10])
    {
    int control;
    cout << endl<<"ELEMENTOS DE LA PILA: "<<" "<<"-->"<<" ";
    for (control=0; control<*cima; control++)
    {
    cout<< pilaC[control] << " ";
    }
    cout<<endl;
    }

    void main()
    {
    int opcion, cima=0, pila[10];
    char ans='s';

    while (ans=='s')

    {
    cout<<"**************SELECCIONA UNA OPCION DE LAS SIGUIENTES:**************"<<endl<<endl<<… "<<endl<<"2)POP: "<<endl<<"3)MOSTRAR PILA: "<<endl;
    cin >> opcion;

    switch(opcion)
    {

    case 1: push(&cima, pila);
    break;
    case 2: pop(&cima, pila);
    break;
    case 3: mostar(&cima, pila);
    break;
    default: cout <<endl<<"Opcion no valida!"<<endl<<endl;
    }

    cout <<endl<<"DESEA CONTINUAR?"<<" --> "<<"S=Si"<<" / ""N=No"<<" ";
    cin >> ans;
    ans=tolower(ans);
    }
    }

    Teniendo en cuenta el anterior codigo entonces ahora como hago para implementar una opción que verifique cuando la pila esta vacia.

    Por favor necesito especificamente el codigo que funcione en mi programa, asi que por favor pruebenlo primero. !solo en C++ por favor.

    Muchas gracias por su atención!

    miércoles, 13 de junio de 2012 0:46

Respuestas

  • Después de ojear su código, por la mayor parte parece que funciona.  Le tengo, eso sí, unas preguntas y unos detalles:

    1. ¿Por qué tantos encabezados?  Con el precompilado (stdafx.h), <iostream> y <cctype> (para tolower()) es suficiente.  Además le recuerdo que los encabezados de C++ estándar no utilizan .h.  Los de encabezados antiguos de C como stdlib.h ahora se renombraron agregándoles "c" al inicio y quitando el .h.  O sea, stdlib.h es en C; en C++ es cstdlib.
    2. La función mostrar() no requiere el total de elementos como un puntero.
    3. El uso de punteros es para C.  En C++ debería estar usando referencias.  Lo hago notar porque usted solicita únicamente código en C++, pero su propio código tiene más C que C++.
    4. ¿Dónde quiere la comprobación de pila vacía?  Porque veo que ya tiene una, en la funcíon pop() cuando verifica si *c es cero.  ¿Esta no basta o no le satisface de alguna forma?

    Jose R. MCP
    Code Samples

    miércoles, 13 de junio de 2012 3:26
    Moderador