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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C: Encontrar los 2 numeros mayores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C: Encontrar los 2 numeros mayores  (Leído 13,287 veces)
dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
C: Encontrar los 2 numeros mayores
« en: 18 Enero 2014, 10:38 am »

Buenas a todos, os prometi que volveria  :laugh: y aqui vuelvo con otro problemilla, os cuento.

Aclaro antes que nada que estoy siguiendo el libro de deitel y solo he estudiado if, else, while. Asi que no os salgais de ahí que ya para mi es mandarin xD

Me he atrancado en el problema que me pide ingresar unos numeros y que te imprima los dos mayores, que me diga el valor mas alto lo hago bien, pero no soy capaz de sacar el segundo mayor. Ya le he dado varias vueltas sin exito. Como siempre supongo que fallo en las mates y no en el lenguaje en si.

Os pongo el que a mi parecer seria mas lógico que funcionara:

Código
  1. /* Programa del libro Tema 3
  2.  * ejercicio 3.27 pagina 83
  3.  * Introduzca 10 valores y encuentre los dos mas altos*/
  4.  
  5. #include <stdio.h>
  6.  
  7. int contador = 1;
  8. int numero;
  9. int mayor = 0;
  10. int segundo = 0;
  11.  
  12. int main()
  13. {
  14. while (contador <=5){
  15. printf("Introduzca un numero: ");
  16. scanf("%d", &numero);
  17. contador += 1;
  18.  
  19. if(numero > mayor){    /*si num es mayor que mayor*/
  20. mayor = numero;   /* asigna el valor a mayor*/
  21. if (numero > segundo){   /*si numero es mayor que segundo*/
  22. if (numero < mayor){  /*y mas pequeño que mayor*/
  23. segundo = numero;  /*asigna el valor a segundo*/
  24. }
  25. }
  26. }
  27. printf("El numero mayor es %d y el segundo mayor %d\n", mayor, segundo);
  28. return 0;
  29.  
  30. }
  31.  

Viendo que no funcionaba reduje la entrada a 5, asi pruebo mas rapido, que seguro alguien me dice que el enunciado pone introduce 10 xD. El segundo valor siempre me lo deja como 0, una muestra:


edito: Le di a enviar en vez a previsualizar xD


« Última modificación: 18 Enero 2014, 10:53 am por dmacias » En línea

dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: C: Encontrar los 2 numeros mayores
« Respuesta #1 en: 18 Enero 2014, 11:14 am »

Vaya, si antes expongo el problema, antes encuentro la solucion en un post antiguo de leosansan.

Sorry por no usar eficientemente las busquedas antes :(

aqui la solucion:

Código
  1. /* Programa del libro Tema 3
  2.  * ejercicio 3.27 pagina 83
  3.  * Introduzca 10 valores y encuentre los dos mas altos*/
  4.  
  5. #include <stdio.h>
  6.  
  7. int contador = 1;
  8. int numero;
  9. int mayor = 0;
  10. int segundo = 0;
  11.  
  12. int main()
  13. {
  14. while (contador <=5){
  15. printf("Introduzca un numero: ");
  16. scanf("%d", &numero);
  17. contador += 1;
  18.  
  19. if(numero > mayor){
  20. segundo = mayor;
  21. mayor = numero;
  22. }
  23. else if (numero > segundo){
  24. segundo = numero;
  25. }
  26.  
  27. }
  28. printf("El numero mayor es %d y el segundo mayor %d\n", mayor, segundo);
  29. return 0;
  30.  
  31. }
  32.  






En línea

Sherboc

Desconectado Desconectado

Mensajes: 10


elige siempre la opción más divertida 8)


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #2 en: 18 Agosto 2015, 04:40 am »


Hola amigo  :P, necesito una explicación sobre este programa porfa!...Lo que paso es que yo no podia que me diera el segundo mayor numero y solo puse lo de tu código y listo quedo,  pero no entendí el como te encontró ese numero! :(.

Mi duda es en esto:

segundo = mayor;  /*Osea porque dices que es igual a mayor (lo que yo entiendo es que segundo entonces seria igual a 0 no??) */
 
else if ( numero > segundo )
 
segundo = numero;
 
/*Luego como hace esto para encontrar que el numero sea menor que el mayor y mayor a todos los demás números?)

Espero y me puedas dar una explicación clara de eso o aunque sea un Link que lo explique bien...saludos cordiales
En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #3 en: 18 Agosto 2015, 05:14 am »

Hola amigo  :P, necesito una explicación sobre este programa porfa!...Lo que paso es que yo no podia que me diera el segundo mayor numero y solo puse lo de tu código y listo quedo,  pero no entendí el como te encontró ese numero! :(.

Mi duda es en esto:

segundo = mayor;  /*Osea porque dices que es igual a mayor (lo que yo entiendo es que segundo entonces seria igual a 0 no??) */
 
else if ( numero > segundo )
 
segundo = numero;
 
/*Luego como hace esto para encontrar que el numero sea menor que el mayor y mayor a todos los demás números?)

Espero y me puedas dar una explicación clara de eso o aunque sea un Link que lo explique bien...saludos cordiales

Hola, ante todo Bienvenido.

Ahora, estás reviviendo un post de hace más de un año. (aunque esta acorde al problema)

Segundo, si vas a publicar código, asegurate de usar las etiquetas GeSHi para facilitar la lectura.



Ahora:

El código:

Código
  1. /* Programa del libro Tema 3
  2.  * ejercicio 3.27 pagina 83
  3.  * Introduzca 10 valores y encuentre los dos mas altos*/
  4.  
  5. #include <stdio.h>
  6.  
  7. int contador = 1;
  8. int numero;
  9. int mayor = 0;
  10. int segundo = 0;
  11.  
  12. int main()
  13. {
  14. while (contador <=5){
  15. printf("Introduzca un numero: ");
  16. scanf("%d", &numero);
  17. contador += 1;
  18.  
  19. if(numero > mayor){
  20. segundo = mayor;
  21. mayor = numero;
  22. }
  23. else if (numero > segundo){
  24. segundo = numero;
  25. }
  26.  
  27. }
  28. printf("El numero mayor es %d y el segundo mayor %d\n", mayor, segundo);
  29. return 0;
  30.  
  31. }
  32.  

En el primer if, lo que hace es comprobar si el número que se inserto es mayor que el que se tiene almacenado como mayor. Por supuesto que en la primera iteración la variable mayor va a tener el valor 0, pues se inicializó así. En tal caso, si el número insertado es mayor que el que teníamos como mayor, vamos a decir que:

Código
  1. segundo = mayor;
  2. mayor = numero;

Primero, asignamos a la variable segundo el valor de la variable mayor, porque supuestamente la variable mayor, tenía el mayor valor antes de haber encontrado este nuevo número que es mayor, por lo tanto ese valor que teníamos almacenado pasa a ser el segundo mayor. ¿Entendiste?

Ahora, en la segunda parte:

Código
  1. else if (numero > segundo){
  2. segundo = numero;
  3. }

Esto analiza el caso de que el número no sea mayor que el que tenemos hasta ahora como mayor, pero si sea mayor que el número que tenemos como segundo mayor, por eso se comprueba con la variable segundo y si se cumple que sea mayor que el valor de ella, se le asigna ese nuevo valor.

Espero que te haya quedado claro. Lee despacio y lo entenderás sin problema.

Nota: Es válido decir que este código es válido solo para números positivos, pues en caso de que haber números negativos, el resultado puede no ser el esperado

Salu2s
« Última modificación: 18 Agosto 2015, 05:16 am por DarK_FirefoX » En línea

Sherboc

Desconectado Desconectado

Mensajes: 10


elige siempre la opción más divertida 8)


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #4 en: 18 Agosto 2015, 21:21 pm »

 Muchas gracias por todo compañero ;D, ya lo entendí más. Pero no me queda claro lo de:

  "segundo = mayor"

Porque se supone que a la variable "segundo" ya se le a dado un valor inicial de 0,

osea por que  no me encuentra el segundo mayor valor sin poner esto? para

que decirle al compilador que le vuelva a dar el valor de "mayor" que es cero o

el valor seria el mayor numero que se encontró. Por ejemplo de 3 números

como 1, 2 y 3 se le daría el valor de 3 a "segundo"?? espero que me explique

bien y que entiendas la duda... saludos también
 
« Última modificación: 18 Agosto 2015, 21:27 pm por sherboc » En línea

Sherboc

Desconectado Desconectado

Mensajes: 10


elige siempre la opción más divertida 8)


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #5 en: 18 Agosto 2015, 21:29 pm »

 ;-) ::)
« Última modificación: 18 Agosto 2015, 21:34 pm por sherboc » En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #6 en: 19 Agosto 2015, 01:37 am »

- No has doble post



Muchas gracias por todo compañero ;D, ya lo entendí más. Pero no me queda claro lo de:

  "segundo = mayor"

Porque se supone que a la variable "segundo" ya se le a dado un valor inicial de 0,

osea por que  no me encuentra el segundo mayor valor sin poner esto? para

que decirle al compilador que le vuelva a dar el valor de "mayor" que es cero o

el valor seria el mayor numero que se encontró. Por ejemplo de 3 números

como 1, 2 y 3 se le daría el valor de 3 a "segundo"?? espero que me explique

bien y que entiendas la duda... saludos también
 


La verdad trato de entender, pero bueno:

La cuestión es que si, en la primera iteración a segundo se le va asignar 0 (pues así se inicializó), pero date cuenta que ya después cuando se encuentre un número mayor, la variable mayor, va a tener otro valor por lo tanto ese tienes que guardarlo en segundo

¿Entiendes?

Imagina este array:

{3, 5, 4, 6}

Y tenemos:

Código
  1. int mayor = 0;
  2. int segundo = 0;

1ra iteración - mayor va a ser igual a 3 y segundo igual 0
2da iteración - mayor va a ser igual a 5 y segundo igual 3
3ra iteración - mayor va a ser igual a 5 y segundo igual 4 (aquí el flujo entro por el segundo if)
4ta iteración - mayor va a ser igual a 6 y segundo igual 5

Espero te haya quedado claro ahora, cuando tengas dudas, siempre utiliza casos de pruebas pequeños e intenta hacer un debug del algoritmo en papel y lápiz. Podrás darte cuenta de errores de implementación y entender correctamente como funciona el algoritmo.

Salu2s
En línea

Sherboc

Desconectado Desconectado

Mensajes: 10


elige siempre la opción más divertida 8)


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #7 en: 19 Agosto 2015, 19:33 pm »

Disculpa x la segunda publicación es que me equivoque y ya no lo pude

borrar...Gracias de nuevo por la explicación ahora ya lo tengo claro todo, no

entendía que se le tenia que dar el valor de mayor a segundo porque este tenia

que encontrar un numero igual de grande que mayor pero sin arre vasar

a "mayor" y por eso se le tiene que dar este valor para después ver si hay otro

segundo valor más grande :).

Que andes de lo mejor.
En línea

Glori4

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #8 en: 8 Octubre 2019, 01:46 am »

Hola buenas, soy nueva en el foro y tengo una duda que no puedo resolver.
Necesito encontrar el menor de cuatro números y el segundo menor, vine para darme una idea de como se haria con el mayor pero no puedo :( solo puedo obtener el primer menor. Espero que puedan ayudarme, Saludos!
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: C: Encontrar los 2 numeros mayores
« Respuesta #9 en: 8 Octubre 2019, 13:21 pm »

No se reabren temas antiguos (y este es de 2015...). Tenías que haber abierto un tema nuevo para tu problema y poner tu código para que podamos ver cómo lo estás haciendo. (El código entre etiquetas de Código GeSHi).
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines