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

Metodo Burbuja

Estas en el tema de Metodo Burbuja en el foro de C/C++ en Foros del Web. Buenas tengo un problema al correr el programa, es para ordenar 5 numeros de forma descendente - ascendente pero me da error me permite escribir ...
  #1 (permalink)  
Antiguo 19/12/2015, 07:55
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 4 meses
Puntos: 0
Pregunta Metodo Burbuja

Buenas tengo un problema al correr el programa, es para ordenar 5 numeros de forma descendente - ascendente pero me da error me permite escribir el numero que quiera pero al imprimir solo me imprime como maximo 5!


Código c++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. int main(){
  8.    
  9. int num[4];
  10. int i, j;
  11.  
  12. for(i=0; i<=4; i++)
  13. {
  14. cout << "Introduzca el numero: ";
  15. cin >> num[i];
  16.  
  17. }
  18.  
  19. for (i=0; i<=4; i++)
  20. {
  21.     for (j=i + 1; j<=5; j++)
  22.     {
  23.     if (num[i] > num[j])
  24.     {
  25.     int temp;
  26.    
  27.     temp = num[i];
  28.     num[i] = num[j];
  29.     num[j] = temp;
  30. }
  31. }
  32. }
  33.  
  34. for (i=0; i<=4; i++) //Intente cambiar el i<=4 pero todavia me da error!!
  35. {
  36.    
  37.     cout << num[i] << " ";
  38.    
  39. }
  40. cout << endl;
  41. system("pause");
  42.    
  43. }
  #2 (permalink)  
Antiguo 19/12/2015, 16:04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Metodo Burbuja

Sin ver más de tu código, el array de int sólo alberga cuatro elementos.
Si quieres declarar un array de 5 int, has de hacer
Código C++:
Ver original
  1. int nombre[5]

Otra cosa es que los índices de ese array vayan desde el 0 hasta el 4
Código C++:
Ver original
  1. nombre[0]//<--elemento 1
  2. nombre[1]//<--elemento 2
  3. nombre[2]//<--elemento 3
  4. nombre[3]//<--elemento 4
  5. nombre[4]//<--elemento 5

Por lo que cuando lo quieres recorrer con un bucle for, normalmente vas desde un valor 0 a un valor menor que el nº de indices del array.
Así, en tu caso <5, que viene a ser 4. Es decir, que i iría desde 0 hasta 4 inclusive(en total los 5 elementos del array)

Si tenías esa confusión respecto al tema de los arrays, espero que te sirva. Si no, lo siento por la respuesta
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 19/12/2015, 18:11
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Metodo Burbuja

Perdon no me especifique osea me muestra en pantalla 5 numeros que diga pero el programa es para ordenar numeros lo quiero hacer sin limite digamos del 1-100 y cuando introduzco digamos numeros mayores que 5 me imprime cinco, digamos introduzco estos numeros: 1-20-3-5-8-9 el orden seria: 1-3-5-8-9-20 pero me muestra en pantalla lo siguiente: 1-3-5-5-5-5 ese es mi problema
  #4 (permalink)  
Antiguo 20/12/2015, 17:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Metodo Burbuja

Hola:

La verdad es que no estaba seguro muy bien de si estaba respondiendo a lo que preguntabas, pero por otro lado tu código más o menos funcionaba aunque tenía fallos en los intervalos de los bucles, y desde luego mostraba bien los resultados.

En mi opinión, puedes hacerle dos mejoras.
1.- Definir el tamaño del array con una constante, de forma que sólo hayas de cambiar ese valor cuando quieras tener diferentes tamaños.
2.- En el método de la burbuja, el mayor (o menor si es ese el criterio de ordenación) valor "flotará" hasta el extremo de la lista (de ahí el nombre). Eso quiere decir que en cada iteración, el último valor, y luego el penúltimo, etc...quedarán ordenados. Eso permite hacer una optimización, de forma que en cada iteración recorreré un elemento menos del array, ya que estos van quedando en su sitio definitivo.

Por lo tanto el bucle interior tendrá un recorrido cada vez menor en cada iteración
En código:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. const int numElementos = 5;
  7.  
  8. int main()
  9. {
  10.     int num[numElementos];
  11.  
  12.     for(int i=0; i<numElementos; i++)
  13.     {
  14.         cout << "Introduzca el numero: ";
  15.         cin >> num[i];
  16.     }
  17.     for (int i=0; i<numElementos; i++)
  18.     {
  19.         for (int j=0; j<numElementos-i; j++)//al restar el valor de i este bucle será menor en cada iteración
  20.         {
  21.             if (num[j+1]<num[j])
  22.             {
  23.                 int temp=num[j];
  24.                 num[j]=num[j+1];
  25.                 num[j+1]=temp;
  26.             }
  27.         }
  28.     }
  29.     for (int i=0; i<numElementos; i++)
  30.     {
  31.         cout << num[i] << " ";
  32.     }
  33.     cout << endl;
  34.     system("pause");
  35. }

Saludos!
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 20/12/2015, 17:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Metodo Burbuja

Y por último, si lo que realmente quieres es definir el tamaño del array en tiempo de ejecución, deberás usar un puntero para reservar memoria mediante el uso del operador new (y no olvidarse de borrar esa memoria al final con delete).

Claro que así el acceso a los miembros del array será diferente.

Por cierto, en el código anterior, en la línea 19 el bucle estaba mal.
Sería así:
Código C++:
Ver original
  1. for (int j=0; j<numElementos-i-1; j++) //he de restar una unidad más para no salirme del rango del array
__________________
Mi calculadora en Qt

Última edición por dehm; 20/12/2015 a las 17:21

Etiquetas: burbuja, int, metodo, numero, 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:32.