Esta es mi duda, como ordenar 3 numeros de menor a mayor en C
Esto es lo que tengo :
Citar
#include <stdio.h>
int main ()
{
float x1,x2,x3,menor,mayor;
printf ("Ingre los valores :");
scanf ("%f %f %f",&x1,&x2,&x3);
menor = x1;
mayor = x3;
if ( x2 < menor )
menor = x2;
if ( x3 < menor )
menor = x3;
if ( x1 > mayor )
mayor = x1;
if ( x2 > mayor )
mayor = x2;
printf ("El orden de menor a mayor : %f %f\n",menor,mayor);
return (0);
}
Lo que no puedo sacar es el valor del medio ;D haber si me dan una mano
Bye
investiga sobre el método de la burbuja, y es más fácil con un vector ;)
salu2
Cita de: Nakp en 28 Marzo 2008, 00:47 AM
investiga sobre el método de la burbuja, y es más fácil con un vector ;)
salu2
conozco el metodo de la burbuja, pero como recien me estan pasando el if, else if ya que estoy en primer año. No quiero hacer un codigo demasiado complicado y por eso trato de hacerlo lo mas simple posible con if.
Lo mas sencillo es usar un metodo de ordenacion, el de la burbuja que ya te han comentado es bastante sencillo. Si quieres hacerlo con variables y el programa estructurado tal cual lo tienes tan solo has de declarar una variable medio y despues de los calculos (antes del printf) poner este codigo
if ((mayor == x1 && menor == x2) ||
(menor == x1 && mayor == x2)) medio = x3;
if ((mayor == x2 && menor == x3) ||
(menor == x2 && mayor == x3)) medio = x1;
if ((mayor == x1 && menor == x3) ||
(menor == x1 && mayor == x3)) medio = x2;
Como puedes ver el codigo se puede complicar cuantos mas numeros quieras ordenar.
Saludos!
PD: En stdlib existe una funcion para ordenar (metodo QuickSort) qsort mira como funciona por si te interesa http://www.conclase.net/c/librerias/funcion.php?fun=qsort (http://www.conclase.net/c/librerias/funcion.php?fun=qsort)
double maximo( double x, double y, double z )
{
double max = x; // asume que x es el mayor
if ( y > max ) // si y es mayor,
max = y; // asigna y a max
if ( z > max ) // si z es mayor,
max = z; // asigna z a max
return max; // max es el mayor
}
Cita de: Flakito81 en 28 Marzo 2008, 02:16 AM
Lo mas sencillo es usar un metodo de ordenacion, el de la burbuja que ya te han comentado es bastante sencillo. Si quieres hacerlo con variables y el programa estructurado tal cual lo tienes tan solo has de declarar una variable medio y despues de los calculos (antes del printf) poner este codigo
if ((mayor == x1 && menor == x2) ||
(menor == x1 && mayor == x2)) medio = x3;
if ((mayor == x2 && menor == x3) ||
(menor == x2 && mayor == x3)) medio = x1;
if ((mayor == x1 && menor == x3) ||
(menor == x1 && mayor == x3)) medio = x2;
Como puedes ver el codigo se puede complicar cuantos mas numeros quieras ordenar.
Saludos!
PD: En stdlib existe una funcion para ordenar (metodo QuickSort) qsort mira como funciona por si te interesa http://www.conclase.net/c/librerias/funcion.php?fun=qsort (http://www.conclase.net/c/librerias/funcion.php?fun=qsort)
Gracias justo lo havia echo igual xD,
Bye
>:(
En el caso de que tu profesor no te haya pedido con arreglos mi solucion seria esta:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main()
{
int a,b,c,x,y,o,p,q; /* declaracion variables */
clrscr(); /*************************/
cout<<"\na : "; /* */
cin>>a; /* */
cout<<"\nb : "; /* Ingreso de valores */
cin>>b; /* */
cout<<"\nc : "; /* */
cin>>c; /*************************/
getch();
o=a; p=b;q=c; /* "Backup" de valores ingresados para impresion final */
if(c<b)
{
x=c;
y=b; /* comparacion entre el 3er y 2do valor */
b=x;
c=y;
}
if(b<a)
{
x=b;
y=a; /* comparacion entre el 2do y 1er valor */
a=x;
b=y;
}
if(c<b)
{
x=c;
y=b; /* comparacion entre el 3er y 2do valor */
b=x;
c=y;
}
getch();
cout<<"Los numeros son: "<<o<<" "<<p<<" "<<q<<"\n"; /* Impresion valores originales */
cout<<"Y ordenados son: "<<a<<" "<<b<<" "<<c<<"\n"; /* Impresion valores ordenados */
getch();
}
Añadiendo una variable "medio", a la cual se le dará la suma de los 3 números(x1 + x2 + x3), pero también se le restará el "mayor" y el "menor", así simplemente quedará el "medio".
Espero que se entienda y que te sirva aunque sea un poco.
#include <stdio.h>
int main ()
{
float x1,x2,x3,menor,mayor;
float medio;
printf ("Ingre los valores :");
scanf ("%f %f %f",&x1,&x2,&x3);
menor = x1;
mayor = x3;
if ( x2 < menor )
menor = x2;
if ( x3 < menor )
menor = x3;
if ( x1 > mayor )
mayor = x1;
if ( x2 > mayor )
mayor = x2;
// Añadiendo esta sentencia, ya que se conoce el mayor y el menor, simplificamos (con sus opuestos)
// y nos queda... el medio
medio = x1 + x2 + x3 - mayor - menor;
printf ("El orden de menor a mayor : %f %f %f\n",menor,medio,mayor);
return (0);
}
Aqui tienes el codigo de la forma que lo quieres ordenar tu.
Pero es mas facil usando un array que nombres genericos, aunque igual aun no aprendiste a usar los array
Un saludo
#include <stdio.h>
int main ()
{
float x1,x2,x3,menor,mayor,intermedio;
printf ("Ingre los valores :");
scanf ("%f %f %f",&x1,&x2,&x3);
menor = x1;
if ( x2 < menor ){
menor=x2;
if(x3 < menor){
mayor=x1;
menor=x3;
intermedio=x2;
}
else{
if(x3<x1){
intermedio=x3;
mayor=x1;
}
else{
intermedio=x1;
mayor=x3;
}
}
}
else{
if(x3 < menor){
menor=x3;
intermedio=x1;
mayor=x2;
}
else{
if(x2<x3){
intermedio=x2;
mayor=x3;
}
else{
intermedio=x3;
mayor=x2;
}
}
}
printf ("El orden de menor a mayor : %f %f %f\n",menor,intermedio,mayor);
return (0);
}
Cita de: VirucKingX en 28 Marzo 2008, 00:28 AM
Lo que no puedo sacar es el valor del medio ;D haber si me dan una mano
Si así lo quieres, así lo tendrás. No es lo más "elegante" pero es lo que quieres:
#include <stdio.h>
int main ()
{
float x1,x2,x3,menor,medio,mayor;
printf ("Ingre los valores :");
scanf ("%f %f %f",&x1,&x2,&x3);
menor = x1;
mayor = x3;
if ( x2 < menor )
menor = x2;
if ( x3 < menor )
menor = x3;
if ( x1 > mayor )
mayor = x1;
if ( x2 > mayor )
mayor = x2;
if (x1!=mayor && x1!=menor)
medio=x1;
else if (x2!=mayor && x2!=menor)
medio=x2;
else if (x3!=mayor && x3!=menor)
medio=x3;
printf ("El orden de menor a mayor :%g %g %g\n",menor,medio,mayor);
return (0);
}
Cita de: VirucKingX en 28 Marzo 2008, 00:28 AMLo que no puedo sacar es el valor del medio ;D haber si me dan una mano
Y con la idea de
eKoutsh y cambiando los if por el condicional:
#include <stdio.h>
void main (void)
{
float a,b,c,d,menor,medio,mayor;
printf ("Ingre los valores :");
scanf ("%f %f %f",&a,&b,&c);
d = (a>c) ? a : c;
mayor= (d>b) ? d : b;
d = (a<c) ? a : c;
menor = (d<b) ? d : b;
medio=a+b+c-menor-mayor;
printf ("El orden de menor a mayor : %g %g %g\n",menor,medio,mayor);
return 0;
}[code]
[/code]