Código para mostrar el mayor Nro en una Pila : Duda

Iniciado por snoopty, 18 Noviembre 2021, 05:08 AM

0 Miembros y 1 Visitante están viendo este tema.

snoopty

Código (cpp) [Seleccionar]
/* En el Codigo a continuacion, en la linea " " if ( pila.top() > mayor ) " " no logro comprender
del todo --- por mas que haya escrito un comentario justificando lo que hace el IF ---
como puede ser que el elemento que esta al comienzo de la Pila ( 10 )
sea MAYOR que la variable '' mayor ''', que alojara al Nro 40 . A continuacion, el Codigo = */
#include <iostream>
#include <conio.h>
#include <stack>
// PILAS " LIFO "
// Es como una Pila de Platos =
// PRIMERO sale ( o muestro ) el LAST ultimo hasta llegar al
//                               FIRST primero
using namespace std;

stack <int> pila; // Defino una Pila con Datos de Tipo Int

int mayor;      // Declaro la Variable " mayor " ya que
                // estoy buscando el Dato de tipo INT Mayor de toda la Pila


int main( )
{

pila.push(35); // Agrego el 1er Dato
               // Puedo LEERLO ... PERO NO ELIMINARLO
pila.push(40); // Agrego el 2do Dato

pila.push(20); // Agrego el 3er Dato

pila.push(3); // Agrego el 4to Dato

pila.push(10); // Agrego el 5to Dato :
               // Puedo LEERLO y ... ELIMINARLO ( P/ Leer/Editar los Anteriores Datos )

// A DIFERENCIA DE LAS " COLAS " EN LAS " PILAS " para
// mostrar el 1er Dato ( o sea, el 5to ) NO SE UTILIZA
// ''' front ''' SINO SE UTILIZA ''' top '''

while ( pila.size() > 0 ) // pila.size() determina la cantidad de Elementos que
{                         // se encuentran en la Pila

if ( pila.top() > mayor ) // Pese a q esto parezca incoherente ( 10 no es mayor que 40 )
{                         // ..... decimos " Si el Número actual que está al Comienzo de
                          // la Pila ( QUE PARA ESTE RAZONAMIENTO YA NO ES EL " 10 " )
                          // es MAYOR al contenido en '' mayor '' .....
                          // ENTONCES Cambio el Valor que estaba '''' como MENOR ''''
                          // Asignándole el LUGAR de '' Comienzo de la Pila ''

mayor = pila.top();       // Le " Confiero " a '' mayor '' que sea el que esté
                          // al Comienzo de la Pila

}
pila.pop();               // " BORRO " a éste para que el Bucle EVALÚE otro
                          // Elemento -- si no, seguiría siempre Evaluando a '' mayor '' --

}



cout << mayor << endl;


getch ();
}
// Gracias de antemano. Saludos !   

Eternal Idol

Iteracion 0:
top() devuelve 10 y mayor es 0, mayor pasa a ser 10
Iteracion 1:
top() devuelve 3 y mayor es 10, la condicion no se cumple
Iteracion 2:
top() devuelve 20 y mayor es 10, mayor pasa a ser 20
Iteracion 3:
top() devuelve 40 y mayor es 20, mayor pasa a ser 40
Iteracion 4:
top() devuelve 35 y mayor es 40, la condicion no se cumple
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

snoopty

#2
Gracias x reponder.
Hay dos cosas que no entiendo :
1 ) Cuando decís =
Iteracion 0:
top() devuelve 10 y mayor es 0, mayor pasa a ser 10

Porque mayor es 0 ? ;
es acaso porque " sólo por haber estado al Comienzo de la
pila el 10 ", después de ser eliminado con el primer pop,
la pila, que queda temporalmente vacía, asume como valor de
Comienzo al 0 ?

2 ) SI por ejemplo en vez de " mayor " la variable fuera " a ",
Si análogamente itero =

Si top 10 > a
ENTONCES
a = 10

Si top 3 > 10
NO ES CIERTO :
a = 10

Si top 20 > 10
ENTONCES
a = 20

Si top 20 > 40
ENTONCES
¿ Porqué SI NO SE CUMPLE CON " 3 "
aquí se debería de cumplir ???? .... que
a = 40 ( ? )


Gracias por leer el mensaje. Saludos !








Eternal Idol

1) mayor es una variable global y su valor inicial es 0 por defecto. ¿Que crees que deberia ser? Es eso o un valor indefinido ya que no inicializaste la variable ... por suerte no hace falta al ser una variable global.



2) No pero NO estas respetando los valores que tienen la pila segun a tu codigo.

Este es el orden de los valores que top va a devolver en cada iteracion:
10
3
20
40
35

En ningun momento top es 20 y mayor 40, no tiene logica alguna, cuando top es 20 mayor es 10, y despues cuando top es 40 mayor es 20 ... no es muy complicado de seguir esto realmente pone un cout con los valores si se te complica tanto.

Justo despues del while:
Código (cpp) [Seleccionar]
cout << "top es " << pila.top() << " mayor es " << mayor << endl;

top es 10 mayor es 0
top es 3 mayor es 10
top es 20 mayor es 10
top es 40 mayor es 20
top es 35 mayor es 40
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón