• Viernes 19 de Abril de 2024, 16:23

Autor Tema:  Ordenar 20 numeros de mayor a menor  (Leído 6844 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Ordenar 20 numeros de mayor a menor
« en: Domingo 20 de Diciembre de 2009, 15:21 »
0
Buenas tardes, soy Miguel con otro problemilla. Tengo que hacer un ejercicio donde se almacenen 20 números en un vector y se muestren por pantalla de mayor a menor.
Mi programa lo hace, pero cambia el valor más pequeño por una cosa monstruosa que coloca en primer lugar.

Aquí os dejo el código por si veis el error y podeis orientarme. Gracias a todos.

Código: C
  1.  
  2.  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void){
   
   float mayor, aux;
   float vector[20];
   int i=0, a=0, b=0, c=0;
   
   memset(&vector, 0, sizeof(vector));
   
   for(i=0; i<=19; i++){
      printf("Introduzca numero: ");
      scanf("%f", &vector);
   }
   printf("n");
   
   for(a=0; a<=19; a++){
      for(c=0; c<=19; c++){
         if(vector[c]<vector[c+1]){
            mayor=vector[c+1];
            aux=vector[c];
            vector[c]=mayor;
            vector[c+1]=aux;
         }
      }
   }
      
   for(b=0; b<=19; b++){
      printf("%.3ft", vector);
   }
   printf("n");
   system("PAUSE");
}
Código: C
  1.  
  2.  

Un saludo!

locazopro

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Ordenar 20 numeros de mayor a menor
« Respuesta #1 en: Domingo 20 de Diciembre de 2009, 21:05 »
0
tienes mal tu método de ordenamiento, por como es el código creo que quisiste implementar el ordenamiento burbuja (que es el peor ordenamiento que puedes usar). El ordenamiento burbuja es básicamente como sigue:

Código: C
  1.  
  2.     for(int x=0; x<n; x++)
  3.     {
  4.         for(int y=0; y<n-1; y++)
  5.         {
  6.             if(array[y]>array[y+1])
  7.             {
  8.                 int temp = array[y+1];
  9.                 array[y+1] = array[y];
  10.                 array[y] = temp;
  11.             }
  12.         }
  13.     }
  14.  
  15.  

donde n es el largo del array que quieres ordenar. Aplicado a tu programa se vería algo como esto:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main (void)
  7. {
  8.     float aux;
  9.     float vector[20];
  10.     int i, j;
  11.  
  12.     memset(&vector, 0, sizeof(vector));
  13.  
  14.     for (i=0; i<=19; i++) {
  15.         printf("Introduzca numero: ");
  16.         scanf("%f", &vector[i]);
  17.     }
  18.     printf("n");
  19.  
  20.     for (i=0; i<20; i++) {
  21.         for (j=0; j<19; j++) {
  22.             if (vector[j]>vector[j+1]) {
  23.                 aux = vector[j+1];
  24.                 vector[j+1] = vector[j];
  25.                 vector[j] = aux;
  26.             }
  27.         }
  28.     }
  29.  
  30.     for (i=0; i<=19; i++) {
  31.         printf("%.3ft", vector[i]);
  32.     }
  33.  
  34.     printf("n");
  35.  
  36.     return -1;
  37. }
  38.  
  39.  
  40.  

Ojala te sirva.

Saludos!

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Ordenar 20 numeros de mayor a menor
« Respuesta #2 en: Lunes 21 de Diciembre de 2009, 17:18 »
0
Buemas tardes locazopro, eso de la burbuja está ok!, aunque tal y como lo has mostrado, ordena de menor a mayor. No obstante ha sido muy sencillo darle la vuelta y ya funciona.

Sois increibles. Se nota que chanelais de esto tela. Gracias por la atención. eres todo un maestro.

Un saludo.

Miguel.