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

no me ordena bien 3 numeros

Estas en el tema de no me ordena bien 3 numeros en el foro de C/C++ en Foros del Web. Hola, estoy dándole vueltas y vueltas al ejercicio y no se el motivo por el cual no me ordena bien los números: Escribir un programa ...
  #1 (permalink)  
Antiguo 25/09/2009, 12:37
ost
Invitado
 
Mensajes: n/a
Puntos:
no me ordena bien 3 numeros

Hola,

estoy dándole vueltas y vueltas al ejercicio y no se el motivo por el cual no me ordena bien los números:

Escribir un programa que lea tres números enteros
en tres variables n1, n2, n3 reasigne los valores de las variables para
que n1 sea la más pequeña, y n3 la más grande Finalmente que escriba los
tres valores ordenados.

Código:
#include <stdio.h>
#include <conio.h> //getch

main()
{
      int n1, n2, n3; 
      printf("introduce numero n1 \n"); 
      scanf("%d",&n1); 
      printf("introduce numero n2 \n"); 
      scanf("%d",&n2);
      printf("introduce numero n3 \n"); 
      scanf("%d",&n3);
      
      if(n1>n2){
         if(n2>n3){
                                        n1=n3;n2=n2;n3=n1;//n1>n2 n2>n3
         }else if(n1>n3){
                                        n1=n2;n2=n3;n3=n1;//n1>n2 n2<n3 n1>n3
         }else{
                                        n1=n2;n2=n1;n3=n3;//n1>n2 n2<n3 n1<n3
         }              
      }else if(n1>n3){
                                        n1=n3;n2=n1;n2=n2;//n1<n2 n1>n3
         }else if(n2>n3){
                                        n1=n1;n2=n3;n3=n2;//n1<n2 n1<n3  n2>n3
         }else{
                                        n1=n1;n2=n2;n3=n3;//n1<n2 n1<n3  n2<n3
         }
      printf("El orden es el siguiente: \n\t %d \t %d \t %d", n1,n2,n3 ); 
      getch();
}
Muchas gracias.
ost.
  #2 (permalink)  
Antiguo 25/09/2009, 13:25
Avatar de Slackin  
Fecha de Ingreso: noviembre-2007
Ubicación: Puerto Montt, Chile
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: no me ordena bien 3 numeros

Fijate bien en líneas como:
Código:
if(n1>n2){
         if(n2>n3){
                                        n1=n3;n2=n2;n3=n1;//n1>n2 n2>n3
El valor inicial de n1 lo pierdes, y luego lo asignas a n3. Necesitas tener variables temporales para guardes valores.

Saludos
  #3 (permalink)  
Antiguo 26/09/2009, 05:45
ost
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: no me ordena bien 3 numeros

muchisimas gracias, era eso.

dejo el codigo por si alguien le pasaba lo mismo, si hubiese otra forma mas facil o mejor de hacerlo, por favor que alguien la ponga.

aunque no tenía nada que ver con el problema, tambien tenía una errata en el codigo, la pongo ya corregida tambien;
Código:
      }else if(n1>n3){
                                        n1=n3;n2=n1;n2=n2;//n1<n2 n1>n3
Código:
#include <stdio.h>
#include <conio.h> //getch

int main()
{
      int n1, n2, n3;
	  int nt1, nt2, nt3;
      printf("introduce numero n1 \n"); 
      scanf("%d",&n1); 
      printf("introduce numero n2 \n"); 
      scanf("%d",&n2);
      printf("introduce numero n3 \n"); 
      scanf("%d",&n3);
      nt1=n1;nt2=n2;nt3=n3;
      if(n1>n2){
         if(n2>n3){
                                        n1=nt3;n2=nt2;n3=nt1;//n1>n2 n2>n3
         }else if(n1>n3){
                                        n1=nt2;n2=nt3;n3=nt1;//n1>n2 n2<n3 n1>n3
         }else{
                                        n1=nt2;n2=nt1;n3=nt3;//n1>n2 n2<n3 n1<n3
         }              
      }else if(n1>n3){
                                        n1=nt3;n2=nt1;n3=nt2;//n1<n2 n1>n3
         }else if(n2>n3){
                                        n1=nt1;n2=nt3;n3=nt2;//n1<n2 n1<n3  n2>n3
         }else{
                                        n1=nt1;n2=nt2;n3=nt3;//n1<n2 n1<n3  n2<n3
         }
      printf("El orden es el siguiente: \n\t %d \t %d \t %d", n1,n2,n3 ); 
      getch();
}

ost.
  #4 (permalink)  
Antiguo 26/09/2009, 16:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 56
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: no me ordena bien 3 numeros

Otra forma de ordenar es por "ordenamiento de burbuja", porque dado el caso que se quisiera ordenar 10 números o 100 números por el método que haces sería casi que imposible por lo largo.
Pongo un ejemplo de ordenamiento burbuja:

Código c:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    int n[3];
  5.    int temp;
  6.  
  7.    //ingreso de datos
  8.    for(int i=0;i<3;i++){
  9.       printf("introduce numero n%d: ",i+1);
  10.       scanf("%d",&n[i]);
  11.    }
  12.    
  13.    //ordenamiento burbuja
  14.    for(int i=3;i>0;i--){
  15.       for(int j=0; j <i-1; j++){
  16.          if(n[j] > n[j+1]){
  17.             temp = n[j];
  18.             n[j] = n[j+1];
  19.             n[j+1] = temp;
  20.          }
  21.       }
  22.    }
  23.  
  24.    //impresión de datos ordenados
  25.    printf("El orden es el siguiente: ");
  26.    for(int i=0;i<3;i++){
  27.       printf("%d ",n[i]);
  28.    }
  29.    getchar();
  30.    return 0;
  31. }
  #5 (permalink)  
Antiguo 26/09/2009, 19:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años
Puntos: 0
Respuesta: no me ordena bien 3 numeros

q tal, pues un metodo mejor para ordenar n cantidad de numeros es con un algoritmo que se llama mergeSort, lo que se hace es meter tus n numeros en un arreglo e ir dividiendo en mitades el arreglo y ordenar por parejas los numeros, al final se juntan todas las partes y queda ordenado, deben disculpar que no les pase el codigo, pero nunca lo he hecho en lenguaje c solo en java jeje, aun asi el algoritmo es facil de encontrar en internet y mejor explicado q el mio, la ventaja de mergeSort sobre el metodo de la burbuja (bubbleSort) es que tarda en resolverse tiempo de n*log (n) y el de la burbuja es de tiempo de n2 (n cuadrada), sirve para cuando se quieren ordenar arreglos grandes, ojala les sirva esta info.


saludos
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 08:51.