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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Código para mostrar el MENOR Nro en una Pila : Duda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Código para mostrar el MENOR Nro en una Pila : Duda  (Leído 533 veces)
snoopty

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Código para mostrar el MENOR Nro en una Pila : Duda
« en: 24 Noviembre 2021, 08:03 am »

/*
Cuando analizo la 1er ITERACIÓN ,LA ITERACiÓN 0, ME DÁ QUE
Top es 10 ( para mí es así a partir de lo explicado al lado de la línea arriba del " while " )
¿ Cómo puede ser esto ?
el if compara " if 10 < 10 " .... ESTO ES UNA INCOHERENCIA ( ? )

LAS SIGUIENTES ITERACIONES SON ENTENDIBLES YA QUE EN LA SGTE
3 ES MENOR QUE 10 , y se mantiene ese criterio hasta el final;
pero no comprendo lo de " if 10 < 10 "
*/
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stack>
  4. // PILAS " LIFO "
  5. // Es como una Pila de Platos =
  6. // PRIMERO sale ( o muestro ) el LAST último hasta llegar al
  7. //                               FIRST primero
  8. using namespace std;
  9.  
  10. stack <int> pila;
  11.  
  12. int menor;      // Declaro la Variable " menor" ya que
  13.                // estoy buscando el Dato de tipo INT Menor de toda la Pila
  14.  
  15. int main( )
  16. {
  17. pila.push(35);
  18. pila.push(40);
  19. pila.push(20);
  20. pila.push(3);
  21. pila.push(10);
  22.  
  23. // A DIFERENCIA DE LAS " COLAS " EN LAS " PILAS " para
  24. // mostrar el 1er Dato ( o sea, el 5to ) NO SE UTILIZA
  25. // ''' front ''' SINO SE UTILIZA ''' top '''
  26.  
  27. menor = pila.top(); // Esta Linea es NECESARIA puesto que cuando se evalue
  28.                    // " if ( pila.top() < menor ) ", si no definieramos previamente
  29.                    // que '' menor '' tome el valor del Dato que este AL COMIENZO DE LA PILA
  30.                    // " el IF " arrojaria '' 0 '' PUESTO QUE CUANDO AL PRINCIPIO DEFINIMOS
  31.                    // '' int menor '' COMO VARIABLE GLOBAL ( Ya que la definimos antes del
  32.                    // cuerpo de main ) ESTA SIEMPRE COMIENZA VALIENDO '' 0 ''
  33.                    // -- no hay ningun Nro menor que 0 dentro de la Pila --
  34. while ( pila.size() > 0 ) // pila.size() determina la cantidad de Elementos que
  35. {                         // se encuentran en la Pila
  36.  
  37. if ( pila.top() < menor )
  38. {
  39.  
  40. menor = pila.top();
  41.  
  42. }
  43. pila.pop();           // " BORRO " el Elemento actual para que el Bucle EVALUE otro
  44.                          // Elemento -- si no, seguiria siempre Evaluando a '' menor '' --
  45. }
  46.  
  47. cout << menor << endl;
  48.  
  49.  
  50. getch ();
  51. }
  52.  


« Última modificación: 24 Noviembre 2021, 08:19 am por snoopty » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Código para mostrar el MENOR Nro en una Pila : Duda
« Respuesta #1 en: 24 Noviembre 2021, 10:27 am »

Esta claro que tenes problemas con la logica, si te resulta imposible imaginar lo que va haciendo el programa entonces tenes que depurarlo linea por linea, que es lo ideal, o cuanto menos ayudarte generando una salida en pantalla.

Código
  1. cout << "menor " << menor << " pila.top " << pila.top() << endl;  
  2. if ( pila.top() < menor )
  3. {
  4.  cout << "CAMBIANDO menor, era " << menor << " sera " << pila.top() << endl;
  5.  menor = pila.top();
  6. }

El valor de retorno de top es 10, no por ese comentario, es 10 por el simple hecho de que en la linea 21 el ultimo llamado a push tuvo como parametro 10. ¿Como puede ser que? ¿Que menor sea 10? Se le asigna ese valor en la linea 27. No hay ninguna incoherencia y una vez asignado el resultado de pila.top a menor, linea 27, deberias llamar a pila.pop, esa primera comparacion que haces es futil.


En línea

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
MAFUS


Desconectado Desconectado

Mensajes: 1.532



Ver Perfil
Re: Código para mostrar el MENOR Nro en una Pila : Duda
« Respuesta #2 en: 24 Noviembre 2021, 10:30 am »

Comparas y haces la pregunta:
¿Diez es menor que diez?
El programa te responde: No, por lo que no hago el cuerpo del if y ejecuto directamente pila.pop();
La siguiente iteración comparas y preguntas:
¿Tres es menor que diez?
El programa te responde: Sí, ejecuto el cuerpo del if y escribo en 'menor' el valor actual del top de la pila; después borro ese número del top.
En línea

snoopty

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: Código para mostrar el MENOR Nro en una Pila : Duda
« Respuesta #3 en: 24 Noviembre 2021, 18:08 pm »

Gracias ! .... sucede que pensaba que el algoritmo, por ser exigente " y por defecto " evaluaria el hecho de que
" 10 sea menor que 10 " como un error, por una
cuestión de comparar el mismo número sin que
haya una igualdad mediante.



Comparas y haces la pregunta:
¿Diez es menor que diez?
El programa te responde: No, por lo que no hago el cuerpo del if y ejecuto directamente pila.pop();
La siguiente iteración comparas y preguntas:
¿Tres es menor que diez?
El programa te responde: Sí, ejecuto el cuerpo del if y escribo en 'menor' el valor actual del top de la pila; después borro ese número del top.

Gracias, MAFUS : El siguiente Esquema Iterativo, qué te parece ? =
ITERACiÓN 0
Top es 10 ( 10 < " 10 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =  10  && Se borró el 10( menor )
ITERACiÓN 1
Top es 3  ( 3  < " 10 menor " )                               => menor =   3  && Se borró el 10( pila.top )
ITERACiÓN 2
Top es 20 ( 20 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 20
ITERACIÓN
Top es 40 ( 40 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 40
ITERACiÓN 4
Top es 35 ( 35 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 35
« Última modificación: 25 Noviembre 2021, 08:34 am por Eternal Idol » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Código para mostrar el MENOR Nro en una Pila : Duda
« Respuesta #4 en: 25 Noviembre 2021, 08:33 am »

Gracias, MAFUS : El siguiente Esquema Iterativo, qué te parece ? =
ITERACiÓN 0
Top es 10 ( 10 < " 10 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =  10  && Se borró el 10( menor )
ITERACiÓN 1
Top es 3  ( 3  < " 10 menor " )                               => menor =   3  && Se borró el 10( pila.top )
ITERACiÓN 2
Top es 20 ( 20 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 20
ITERACIÓN
Top es 40 ( 40 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 40
ITERACiÓN 4
Top es 35 ( 35 <  " 3 menor " ) ( LA CONDICIÓN NO SE CUMPLE ) => menor =   3  && Se borró el 35



Esta mal en la segunda linea, lo que se borra de la pila es 3, no 10. Y en la primera linea no se borra menor, se borra siempre de la pila, coincide su valor con menor por obvias razones, por eso te dije antes que seria mas logico llamar a pop antes de empezar el bucle en lugar de comparar futilmente menor (que sabemos que es igual al resultado de top) con el resultado de top.
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda para mostrar iconos en ListView Borland C++ Builder 5.0
Programación C/C++
volrath 1 3,455 Último mensaje 5 Mayo 2010, 20:37 pm
por volrath
Vulnerabilidad en pila Bluetooth de Microsoft 2.1 [ejecución remota de código]
Hacking Mobile
ANELKAOS 0 2,369 Último mensaje 13 Julio 2011, 13:02 pm
por ANELKAOS
Duda mostrar código html
Java
jorma16 0 987 Último mensaje 7 Septiembre 2012, 15:26 pm
por jorma16
Problemita en código de PILA a LISTA en DEV C++
Programación C/C++
Gntzx 0 2,906 Último mensaje 20 Septiembre 2012, 09:28 am
por Gntzx
Código para mostrar el mayor Nro en una Pila : Duda
Programación C/C++
snoopty 5 732 Último mensaje 19 Noviembre 2021, 10:13 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines