ordenar 3 numeros en C

Iniciado por VirucKingX, 28 Marzo 2008, 00:28 AM

0 Miembros y 1 Visitante están viendo este tema.

VirucKingX

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


Bye

Nakp

investiga sobre el método de la burbuja, y es más fácil con un vector ;)

salu2
Ojo por ojo, y el mundo acabará ciego.

VirucKingX

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.


Bye

Flakito81

#3
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

Hesp

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
}

VirucKingX

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

Gracias justo lo havia echo igual xD,

Bye


Bye

any

Any
#6
 >:(

bluesith

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();
}

eKoutsh

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);

}

diegoCmC

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);

}
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte