Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mar90_13 en 28 Julio 2022, 02:25 am



Título: Mostrar el mayor valor de una pila
Publicado por: Mar90_13 en 28 Julio 2022, 02:25 am
¿Cómo logro que el programa me arroja el valor más grande?

Código
  1. int PILA[12], cima=-1; //Declaración de variables, y definición de dimensión de datos
  2.  
  3. //FUNCIONES
  4. void ingresar(){
  5. if(cima<11){ //Si la pila no está llena se pieden ingresar datos
  6. cout<<"Ingrese el dato deseado: "<<endl<<"->";
  7. cin>>PILA[cima+1];
  8. cima++;
  9. cout<<"Dato introducido a la PILA"<<endl<<endl;
  10. system("Pause");
  11. }
  12. else{
  13. cout<<"PILA llena, no se pueden ingresar mas datos"<<endl<<endl;
  14. system("Pause");
  15. }
  16. }
  17.  
  18. void pilallena(){
  19. if(cima>-1){
  20. cout<<"Los datos almacenados en la PILA son: "<<endl<<endl;
  21. cout<<"\t [ ";
  22. for(int x=cima;x>-1;x--){
  23. cout<<PILA[x]<<" , ";
  24. }
  25. cout<<"END]";
  26. ; system("Pause");
  27. }
  28. else{
  29. cout<<"La PILA esta vacia"<<endl<<endl;
  30. system("Pause");
  31. }
  32. }
  33.  
  34. void mayor(){
  35.  
  36. cout<<mayor<<"\n es el numero mayor de la PILA"<<endl<<endl;
  37. system("Pause");
  38. }
  39. }
  40.  
  41. }

MOD: El código debe ir entre etiquetas de Código GeSHi


Título: Re: Mostrar el mayor valor de una pila
Publicado por: dario01dr en 28 Julio 2022, 03:25 am
Hola C++ ya tiene pilas establecidas, lee algo de stack en C++ busca en google, se te hara mas facil.
Salu2.


Título: Re: Mostrar el mayor valor de una pila
Publicado por: dijsktra en 12 Agosto 2022, 17:02 pm
A ver, aprecio dos errores en tu programa.

En primer lugar, propiamente no estás implementando una pila. Es cierto que parece que la simulas con un vector y un indice al ultimo elemento ( por cierto, es más natural marcar cuantos elementos tiene la pila), pero no das ninguna rutina de abstracción y el programador puede acceder al tipo emulador (vector e indice) con total libertad. Queda a tu elección el rigor con que lo quieras tratar.

 En el mundo Python por ejemplo, ya nadie implementaria un tipo para pila, todo el mundo usa las listas directamente, como tu sugieres.

Si escoges la implementación hecha en la librer'ia estadard, esta es tu rutina.


Código
  1. #include <stack>
  2. #include <iostream>
  3. #include <cassert>
  4. #include <algorithm> // using max function.
  5.  
  6. int compute_max(const std::stack<int> &s)
  7. {
  8.    assert(s.size() > 0);
  9.    std::stack<int> copy(s);
  10.    int M = copy.top();
  11.    copy.pop();
  12.    while (!empty(copy))
  13.    {
  14.        M = std::max(M,copy.top());
  15.        copy.pop();
  16.    }
  17.    return M;
  18. }
  19.  

Observa que el problema est'a solo definido si como m'inimo tienes un elemento en la pila, y observa como debemos hacer una copia de la pila original, para no modificiarla.

Código
  1. int main(int argc, char const *argv[])
  2. {
  3.    std::stack<int>  s ;
  4.    int N;
  5.    for( ; std::cin >> N ;)
  6.       s.push(N);
  7.    int M = compute_max(s);
  8.    std::cout << M;
  9.    return 0;
  10. }


Para experimentar interactivamente con el programa,,,


Código:
34  -1 45 67
^Z
67