ejercicio sencillo con PILAS

Iniciado por indict, 6 Julio 2013, 21:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

indict

Hola,

quiero hacer un programa, que me imprima por pantalla los elementos mayores de la pila respecto un entero dado.

No me muestra la pila, no se que debería rectificar.

¡Gracias por la ayuda!

Código (cpp) [Seleccionar]
#include<iostream>
#include<queue>
#include<stack>
using namespace std;

stack<int>nueva(stack<int>&p, int x){
    stack<int>p2;
    while(!p.empty()){

    if(x>p.top()){
             p2.push(p.top());     
                  }
    p.pop();
                      }
    return p2;
    }

int main() {
    int a,e;
    stack<int>p1;
    cout<<"element"<<endl;
    cin>>a;
   
    cout<<"introduzca los elementos"<<endl;
    cin>>e;
    while(e!=0){
                p1.push(e);
                cin>>e;
                }

   
    cout<<endl;
   
    stack<int>p2=nueva(p1,a);
   
    cout<<"La pila final es"<<endl;
    cout<<"[";
    while(!p1.empty()){
    cout<<p1.top()<<" ";
    p1.pop();
                      }
    cout<<"]";
   
   
   
    system("pause");
    return 0;
    }

rir3760

Ello se debe a que pasas una referencia y por ende la función "nueva" afecta a la variable "p1" declarada en la función main. La solución es simple: pasa la variable por valor.

Para ello solo debes cambiar la definición de la función a:
Código (cpp) [Seleccionar]
stack<int>nueva(stack<int> p, int x) ...

Otros cambios que debes realizar al programa son:
* Incluir el encabezado <cstdlib> antes de utilizar la función system.
* Al imprimir el resultado del programa debes utilizar la variable "p2".
* La función "nueva" crea una pila con los elementos menores que el indicado, debes cambiar la comparación "x > p.top()".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

indict

muchas gracias rir3760 por los consejos  ;D