Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ejecuta doble

Estas en el tema de Ejecuta doble en el foro de C/C++ en Foros del Web. Quiero que me ordene tres numeros de mayor a menor. Me ejecuta bien, pero el problema me viene cuando dos de los tres numeros son ...
  #1 (permalink)  
Antiguo 23/03/2013, 18:26
Avatar de boronix  
Fecha de Ingreso: enero-2013
Ubicación: España
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 0
Mensaje Ejecuta doble

Quiero que me ordene tres numeros de mayor a menor. Me ejecuta bien, pero el problema me viene cuando dos de los tres numeros son iguales. no se porque cuando meto (3,3,1) me lo ordena de una sola vez (3,3,1) y en cambio cuando meto (1,3,3) me repite el orden, es decir, me lo hace saber dos veces. Alguien me puede decir la manera de que me lo diga de una sola vez?

#include<stdlib.h>
#include<stdio.h>
int main()
{
int n1,n2,n3 ;
printf("Dime el primer numero: ");
scanf("%d",&n1);
printf("Dime el segundo numero: ");
scanf("%d",&n2);
printf("Dime el tercer numero: ");
scanf("%d",&n3);
if(n1>=n2&&n2>=n3)
{
printf("Los numeros en orden descendente son: %d,%d,%d\n",n1,n2,n3);
}
else
{
if(n1>=n3&&n3>=n2)
{
printf("Los numero en orden descendente son: %d,%d,%d\n",n1,n3,n2);
}
if(n2>=n1&&n1>=n3)
{
printf("Los numero en orden descendente son: %d,%d,%d\n",n1,n2,n3);
}
if(n2>=n3&&n3>=n1)
{
printf("Los numero en orden descendente son: %d,%d,%d\n",n1,n2,n3);
}
if(n3>=n1&&n1>=n2)
{
printf("Los numero en orden descendente son: %d,%d,%d\n",n1,n2,n3);
}
if(n3>=n2&&n2>=n1)
{
printf("Los numeros en orden descendente son: %d,%d,%d\n",n1,n2,n3);
}
}
system("PAUSE");
}

Muchisimas gracias a tod@s los que me habeis ayudado hasta ahora. No me gusta rendirme a la primera, pero llevo 2 dias y nada y antes de qedarme con la duda, prefiero tragarme mi orgullo. Al fin y al cabo el programa esta bien, pero es mejorable en este aspecto
  #2 (permalink)  
Antiguo 24/03/2013, 04:23
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Ejecuta doble

El error tiene que ver con que dos números sean iguales, lo que hace que sea posible que se cumplan dos condiciones... Tienes que quitar la condición de igualdad de algunos sitios (o poner elses en cada if).

En la programación siempre hay que intentar usar algoritmos genéricos, usar un montón de ifs no es adecuado (que pasa cuando quieras ordenador 4 números?). ¿Has dado for y vectores?
  #3 (permalink)  
Antiguo 26/03/2013, 07:59
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Ejecuta doble

No necesitas usar tantos if ni hacerlo tan farragoso.

En primer lugar usa una directiva de preprocesador que imprima una función para concluri el número mayor.

Código C++:
Ver original
  1. #define gmax(a,b) ((a)>(b)?(a):(b))
  2. #define gmin(a,b) ((a)<(b)?(a):(b))
  3. using namespace std;
  4. int main(){
  5. int n1,n2,n3, max1, max2, min1,min2;
  6. // scanfs
  7.  
  8. max2 = gmax(n1,n2); // intermedio mayor
  9. max1 = gmax(n3,max2); // mayor de los 3
  10. min2  = gmin(n1,n2); // intermedio menor
  11. min1  = gmin(n3,min2); // menor de los 3
  12.  
  13. printf("Los numeros en orden descendente son: %d,%d,%d\n",max1,max2, min1);
  14. return 0;
  15. }
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #4 (permalink)  
Antiguo 26/03/2013, 09:41
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Ejecuta doble

Segun dicen, en c++ no se debería usar los preprocesadores. Es preferible las funciones inline (más fácil detectar los errores).

Etiquetas: doble, ejecuta, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:14.