Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: barnix456 en 13 Diciembre 2012, 17:42 pm



Título: Dos datos mayores [C]
Publicado por: barnix456 en 13 Diciembre 2012, 17:42 pm
Holaaa tengo un problema, estoy haciendo un ejersicio que vi en un libro, pedir x datos y mostrar cuales son los dos datos mas grandes, me ha confundido un poco, para saber el dato mas grande no tengo problema pero para saber el segundo si, me esta quedando algo asi:

Código
  1. #include <stdio.h>
  2. #define sise 5
  3.  
  4. Int main ()
  5. {
  6.   Int cont=1, b=0, a, x=0;
  7.   While (cont<=sise) {
  8.   Printf("introduzca el numero %d: ",cont);
  9.   Scanf("%d",&a);
  10.   If (a>b)
  11.      b=a;
  12.   If (x<=b) {
  13.       If (b>=a){
  14.           x=a;
  15.           If (x==b)
  16.              x=0;
  17.        }
  18.    }
  19.   cont++;
  20.   }
  21.   printf("El numero mas grandes es %d y el segundo es %d",b,x);
  22.   getchar();
  23.   return 0;
  24. }
  25.  

Gracias de antemano

Disculpen si se ve algo diferente estoy desde mi movil


Título: Re: Dos datos mayores [C]
Publicado por: naderST en 13 Diciembre 2012, 18:39 pm
Al hacer
Código
  1. if (a>b)
  2.      b=a;
  3.  

Estás perdiendo el valor que tenías en b, este valor lo necesitas porque pudiera ser tu segundo mayor. Fíjate haciendo la corrida al frío con 10, 20, 30 en ese orden. Una solución a tu problema sería que cuando un valor sea mayor al mayor, antes de asignar el nuevo mayor asignas el viejo como segundo mayor y en el caso de que el valor no sea mayor al mayor verificas si es mayor al segundo mayor y lo asignas.


Título: Re: Dos datos mayores [C]
Publicado por: barnix456 en 13 Diciembre 2012, 19:09 pm
Si de echo hice unos cambios pero aun no me da, estoy haciendo algo asi:

Código
  1. If (a>b)
  2.    b=a;
  3. If (x<=b && b>=a) {
  4.   If (a>=x || a<=x) {
  5.      If (a==b)
  6.          x=0;
  7.      If (a!=b)
  8.         If (a>x)
  9.             x=a;
  10.      }
  11.   }
  12. If (x==b)
  13.   x=0;
  14.  


Título: Re: Dos datos mayores [C]
Publicado por: barnix456 en 13 Diciembre 2012, 19:15 pm
Aun que siento que el (a>b) = b=a esta bien por que siguiendo tu ejemplo de 10,20,30 mira:

b es inicializada en 0 entonces

10>0 si b=10 primera vuelta
20>10 si b=20 segunda vuelta
30>20 si b= 30 tercera vuelta
25>30 no b=30 cuarta vuelta
18>30 no b=30 quinta vuelta

Por eso digo que esta bien

Gracias


Título: Re: Dos datos mayores [C]
Publicado por: leosansan en 13 Diciembre 2012, 19:38 pm
Código
  1. #include <stdio.h>
  2. #define sise 5
  3.  
  4. int main ()
  5. {
  6.   int cont=1, cuasi_max=0, a, max=0;
  7.   while (cont<=sise) {
  8.   printf("introduzca el numero %d: ",cont);
  9.   scanf("%d",&a);
  10.   if (a>max) {
  11.        cuasi_max=max;
  12.        max=a;
  13.    }
  14.   else if (a>=cuasi_max)
  15.        (cuasi_max=a);
  16.   cont++;
  17.   }
  18.   printf("El numero mas grandes es %d y el segundo es %d",max,cuasi_max);
  19.   getchar();
  20.   return 0;
  21. }
Saluditos!.


Título: Re: Dos datos mayores [C]
Publicado por: barnix456 en 13 Diciembre 2012, 20:06 pm
Holaa amigo, disculpa si es que estoy teniendo una mala visualizacion en mi movil, pero "max" es una funcion definidad en una libreria o es una variable, aunque entiendo que es una funcion de libreria, por que mi IDE asi lo reconoce, la verdad no le entiendo mucho, a la hora de imprimir, no dices que variable es la que se debe imprimir y creo que tu ejemplo es para saber solo el mas grande, yo quiero saber los dos mas grandes, repito no se si es que estoy teniendo una mala visualizacion, igual cuando tenga mi pc de escritorio lo checare pero gracias por la respuesta


Título: Re: Dos datos mayores [C]
Publicado por: durasno en 13 Diciembre 2012, 20:56 pm
max es una variable, mejor espera a usar la pc :)
 

Saludos


Título: Re: Dos datos mayores [C]
Publicado por: leosansan en 13 Diciembre 2012, 20:57 pm
Holaa amigo, disculpa si es que estoy teniendo una mala visualizacion en mi movil, pero "max" es una funcion definidad en una libreria o es una variable, ....
Citar
Es una variable, podía haberle llamado "mayor" y "cuasi_max" es el segundo mayor ...... y funciona , da los dos valores¡ ¡  ¡
Fíjate que está reeditado.
Saluditos!.


Título: Re: Dos datos mayores [C]
Publicado por: barnix456 en 13 Diciembre 2012, 23:17 pm
Gracias si que ha funcionado, y lo has echo de una manera tan facil. Nunca habia pensado en esa logica, tendre que trabajar en eso... Gracias de nuevo


Título: Re: Dos datos mayores [C]
Publicado por: rir3760 en 14 Diciembre 2012, 02:51 am
"max" es una funcion definidad en una libreria o es una variable, aunque entiendo que es una funcion de libreria, por que mi IDE asi lo reconoce
Si eso pasa debes verificar el lenguaje de programación y las opciones de tu IDE, esto porque:

A) En lenguaje C no hay problema en utilizar "max" como el nombre de una variable, mejor ejemplo el programa de leosansan .
B) En C++ si incluyes el encabezado <algorithm> tienes acceso a la funcion std::max (http://www.cplusplus.com/reference/algorithm/max/).

Un saludo