| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Bitojis
Registrado: 30 Dic 2004 Mensajes: 38
| Publicado: 30/12/2004 4:54 am | | | Título: Metodo de la Burbuja |
| Hola, necesito ordenar los numeros enteros contenidos en un array a traves del metodo de la burbuja, pero no lo consigo. Esta es la parte del codigo donde aparece el meodo de la burbuja:
//Seleccionamos el tipo de ordenacion cout<<"Introduzca-m- si desea que la ordenacion se de menor a mayor, o -M- si desea que sea de mayor a menor: "; cin>>ordenacion; //Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo static int TAM = 10; int i, j; int temp; //Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso if (ordenacion == 'm'){ //Comienza el metodo de la burbuja for (i=1; i>TAM; i++){ for (j=0; j<TAM;j++) if (valores[j] > valores[j+1]) { temp = valores[j]; valores[j] = valores[j+1]; valores[j+1] = temp; } } //Termina el metodo de la burbuja
//Mostramos los valores int c = 0; do{ cout<<valores[c]<< "<"; c++; } while (c<10); cout<<endl;
Un saludo![/img] |
|
| Volver arriba | |
 |
helldaga
Registrado: 12 Nov 2004 Mensajes: 114 Ubicación: Hell
| Publicado: 30/12/2004 7:24 am | | | Título: |
| El método esta mal implementado, aqui le coloco un pequeño ejemplo con el método correcto:
| Código: | #include <conio.h> #include <iostream.h>
#define MAXNUM 5 /* define la cantidad de numeros maximos a utilizar*/
void main() { int arreglo [MAXNUM],temporal,i,j; for (i=0; i<MAXNUM; i++) { cout<<"Digite el elemento "<<i+1<<" del arreglo\n"; cin>> arreglo[i]; }
// Aqui se aplica el metodo burbuja for (i=0; i<MAXNUM-1; i++) for (j=i+1; j<MAXNUM; j++) {
if (arreglo[i] < arreglo[j])//Para ordenar menor a mayor solo hay que cambiar el signo < por > { temporal = arreglo[i]; arreglo[i] = arreglo[j]; arreglo[j] = temporal; }
} //Aqui termina el método.
cout<<endl; cout<<"El arreglo ardenado es: \n"; for (i=0; i<MAXNUM; i++) cout<<arreglo[i]<<" ";
getch(); }
|
SUERTE. |
|
| Volver arriba | |
 |
Bitojis
Registrado: 30 Dic 2004 Mensajes: 38
| Publicado: 31/12/2004 4:03 am | | | Título: |
| Hola, he cambiado el codigo por este, pero sigue sin ordenar bien. Al msotrarme la ordenación, el ultimo número que me sale es 109 y yo no he introducido dicho número. ¿A que puede ser debido?
| Código: | //Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo static int TAM = 10; int i, j; int temp;
//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso if (ordenacion == 'm'){ //Comienza el metodo de la burbuja for (i=0; i<TAM-1; i++){ for (j=i+1; j<TAM;j++) if (valores[i] > valores[j]) { temp = valores[i]; valores[i] = valores[j]; valores[j] = temp; } }
//Termina el metodo de la burbuja
//Mostramos los valores cout<<endl; cout<<"El arreglo ardenado es: \n"; for (i=0; i<TAM; i++) cout<<valores[i]<<" "; }//Termina la ordenacion |
Muchas Gracias |
|
| Volver arriba | |
 |
|
helldaga
Registrado: 12 Nov 2004 Mensajes: 114 Ubicación: Hell
| Publicado: 31/12/2004 6:58 am | | | Título: |
| | El código es correcto, ya lo probé, el error se puede deber a que cuanto usted esta ordenando el arreglo este no se encuentra totalmente lleno y ese número es basura de memoria, asegurese de llenar completamente el arreglo antes de ordenarlo, si no le funciona coloque el código completo y lo revisamos a ver cual es el error.SUERTE. |
|
| Volver arriba | |
 |
Bitojis
Registrado: 30 Dic 2004 Mensajes: 38
| Publicado: 01/01/2005 3:56 am | | | Título: |
| Si, lleno completamente el array. Este es el codigo completo de lo que llevo
| Código: | //Declaramos el array de forma global int valores [9]; char ordenacion;
#include <iostream> #include <stdlib.h>
using namespace std;
int main(int argc, char *argv[]) { //Comenzamos a asignar valores al array cout<< "Introduzca el primer valor: "; cin>>valores[0]; cout<< "Introduzca el segundo valor: "; cin>>valores[1]; cout<< "Introduzca el tercer valor: "; cin>>valores[2]; cout<< "Introduzca el cuarto valor: "; cin>>valores[3]; cout<< "Introduzca el quinto valor: "; cin>>valores[4]; cout<< "Introduzca el sexto valor: "; cin>>valores[5]; cout<< "Introduzca el septimo valor: "; cin>>valores[6]; cout<< "Introduzca el octavo valor: "; cin>>valores[7]; cout<< "Introduzca el noveno valor: "; cin>>valores[8]; cout<< "Introduzca el decimo valor: "; cin>>valores[9];
//mostramos los valores int b = 0; do{ cout<< "El valor "<< b << " es: "<< valores[b]<< endl; b++; } while (b<10);
//Seleccionamos el tipo de ordenacion cout<<"Introduzca-m- si desea que la ordenacion se de menor a mayor, o -M- si desea que sea de mayor a menor: "; cin>>ordenacion;
//Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo static int TAM = 10; int i, j; int temp;
//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso if (ordenacion == 'm'){ //Comienza el metodo de la burbuja for (i=0; i<TAM-1; i++){ for (j=i+1; j<TAM;j++) if (valores[i] > valores[j]) { temp = valores[i]; valores[i] = valores[j]; valores[j] = temp; } }
//Termina el metodo de la burbuja
//Mostramos los valores cout<<endl; cout<<"El arreglo ardenado es: \n"; for (i=0; i<TAM; i++) cout<<valores[i]<<" "; system("PAUSE"); return 0; } |
|
|
| Volver arriba | |
 |
helldaga
Registrado: 12 Nov 2004 Mensajes: 114 Ubicación: Hell
| Publicado: 01/01/2005 9:18 am | | | Título: |
| Ya vi cual es el error, el error radica en la forma como usted interpreta la cantidad de posiciones de un array, las posiciones de un array van desde cero hasta n-1, donde n son el numero de posiciones.Ejemplo:
*Cuando usted define:
int valores [9];
Las posiciones van de 0 hasta 8, la posicion 9 no existe, luego no tiene sentido que le asigne valores. Osea cuando hace:
cout<< "Introduzca el decimo valor: "; cin>>valores[9];
*Con esto se puede ver el error al tratar de ordenar el array, usted define TAM = 10, donde el vector solo tiene 9 posiciones ( de 0 hasta . *Lo mismo cuando lo muestra por pantalla.
El código correcto sería:
| Código: | //Declaramos el array de forma global int valores [9]; char ordenacion;
#include <iostream> #include <stdlib.h>
using namespace std;
int main(int argc, char *argv[]) { //Comenzamos a asignar valores al array cout<< "Introduzca el primer valor: "; cin>>valores[0]; cout<< "Introduzca el segundo valor: "; cin>>valores[1]; cout<< "Introduzca el tercer valor: "; cin>>valores[2]; cout<< "Introduzca el cuarto valor: "; cin>>valores[3]; cout<< "Introduzca el quinto valor: "; cin>>valores[4]; cout<< "Introduzca el sexto valor: "; cin>>valores[5]; cout<< "Introduzca el septimo valor: "; cin>>valores[6]; cout<< "Introduzca el octavo valor: "; cin>>valores[7]; cout<< "Introduzca el noveno valor: "; cin>>valores[8];
//mostramos los valores int b = 0; do{ cout<< "El valor "<< b << " es: "<< valores[b]<< endl; b++; } while (b<9);
//Seleccionamos el tipo de ordenacion cout<<"Introduzca-m- si desea que la ordenacion se de menor a mayor, o -M- si desea que sea de mayor a menor: "; cin>>ordenacion;
//Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo static int TAM = 9; int i, j; int temp;
//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso if (ordenacion == 'm'){ //Comienza el metodo de la burbuja for (i=0; i<TAM-1; i++){ for (j=i+1; j<TAM;j++) if (valores[i] > valores[j]) { temp = valores[i]; valores[i] = valores[j]; valores[j] = temp; } }
//Termina el metodo de la burbuja
//Mostramos los valores cout<<endl; cout<<"El arreglo ardenado es: \n"; for (i=0; i<TAM; i++) cout<<valores[i]<<" "; system("PAUSE"); return 0; }
|
Y listo.SUERTE. |
|
| Volver arriba | |
 |
|
Bitojis
Registrado: 30 Dic 2004 Mensajes: 38
| Publicado: 01/01/2005 11:19 am | | | Título: |
| Es verdad, tenia razón. Muchas gracias.
Si no es mucho pedir (es que soy bastante novato en el tema de C++), me podría decir para que se usa el ultimo valor del array? |
|
| Volver arriba | |
 |
helldaga
Registrado: 12 Nov 2004 Mensajes: 114 Ubicación: Hell
| Publicado: 01/01/2005 11:55 am | | | Título: |
| | Lo que sucede es que la posicion n del vector en realidad no exite debido a que sus posiciones se enumeran desde cero, no es que se use para nada especial es que no existe simplemente. SUERTE. |
|
| Volver arriba | |
 |
|
|