| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Demidam
Registrado: 07 Ago 2004 Mensajes: 59
| Publicado: 08/10/2004 3:02 pm | | | Título: |
| Vale, ok. Con mi metodo, se compara el 1 con el 2 y si el 1>2 se cambian, luego se coge el 2 y el 3 (el 2 puede q ya se hayya cambiado) y se comprara si el 2>3 se cambian y asi hasta el ultimo, y esto lo hago 4 veces q es la situacion mas desfavorable. No se si me explico bien, dime si no lo entiendes Salu2 |
| | Volver arriba | |  | alp

Registrado: 12 Abr 2004 Mensajes: 413
| Publicado: 09/10/2004 2:36 am | | | Título: |
| Intuitivamente has creado un método de ordenación que se parece al de la burbuja. Creo que lo podemos resolver con un sólo array. A ver qué te parece este código.
| Código: | #include <stdio.h>
#define NUMEROS 5
int main() { int num[NUMEROS] = { 8, 4, 3, 2, 1 }; int i, j, k, temp;
for (i=0; i<NUMEROS-1; i++) { for(j=0;j<NUMEROS-1; j++) if (num[j] > num[j+1]) { temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } printf("\nPaso %i:\t", i+1); for (k=0; k<NUMEROS; k++) printf("%i\t", num[k]); }
printf("\n\n"); for (i=0; i < NUMEROS; i++) printf("%i\t", num[i]);
return 0; } |
El array num ya contiene la situación más desfavorable. Se compara cada elemento con el siguiente, dándole 4 pasadas, de forma que al final, queda ordenado.
Si te fijas en los pasos intermedios, lo que hacemos es llevarnos los valores mayores al final del array.
Un saludo. |
| | Volver arriba | |  | Demidam
Registrado: 07 Ago 2004 Mensajes: 59
| Publicado: 10/10/2004 12:10 pm | | | Título: |
| Pues si, la verdad es q si, q el mio es un lio q te cagas pero no me se me ocurria lo del temp como paso intermedio (supongo q seran cosas de novatos y con el tiempo y muchos ejercicios se solucionara). Gracias x todo, te dejo mi algoritmo definitivo:
| Código: | #include <stdio.h>
#define numeros 5
int main() {
int i, j, temp; int a[numeros];
for (i=0; i<5; i++) { printf("Introduzca el numero %i que quiere ordenar\n", i+1); scanf("%i", &a[i]); }
for(i=0; i<4; i++) { for(j=0; j<5; j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }
} }
printf("En orden creciente los numeros son:\n");
for (i=0; i<5; i++) { printf("El numero %i es %i\n", i+1, a[i]); }
int b[numeros]={ a[4], a[3], a[2], a[1], a[0]}; printf("En orden decreciente los numeros son:\n");
for (i=0; i<5; i++) { printf("El numero %i es %i\n", i+1, b[i]); }
}
|
Salu2 |
| | Volver arriba | |  | | alp

Registrado: 12 Abr 2004 Mensajes: 413
| Publicado: 11/10/2004 1:09 pm | | | Título: |
| Muy bien. Al final lo has conseguido de forma más clara. Si te atrancas con un código, coge un lápiz y papel y analízalo despacio. Haz en el papel lo que debería hacer el código, y lo verás todo más claro.
Por cierto, si ya tienes el array ordenado de forma ascendente, para imprimirlo de forma descendente sólo tienes que recorrerlo desde el último al primer elemento. Eso te ahorra el segundo array.
| Código: | printf("En orden decreciente los numeros son:\n");
for (i= 4; i >= 0; i--) { printf("El numero %i es %i\n", 5-i, a[i]); } |
El truco está en la práctica. Cuantas más líneas de código escribas, más irás depurando y simplificando tu forma de programar.
Un saludo. |
| | Volver arriba | |  | Demidam
Registrado: 07 Ago 2004 Mensajes: 59
| Publicado: 11/10/2004 3:10 pm | | | Título: |
| Pues muchas gracias, tampoco se me ocurrio, otro truco mas a la "libreta", todo sea por depurar el codigo. Y si,creo q el truco sta en la practica, soy estudiante de matematicas y muchas veces veo un ejemplo q no se te ocurriria en la vida pero ves uno y ya sabes hacer todos(o casi todos ).
Salu2 |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |