Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 23 Abril 2014, 00:08 am



Título: Ordenamiento de numeros problema con la salida
Publicado por: nolasco281 en 23 Abril 2014, 00:08 am
Hola como estan.

Tengo la siquiente duda este es mi algoritmo

El problema que tengo es que la salida no me sale correctamente alguien sabe a que se deba esto.
No se por que a mi me sale 0.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. main()
  5. {
  6. int a[] = {35, 82, 30, 28, 19};
  7. int temp;
  8.  
  9.        //numero de iteraciones = n-v
  10. //Numero de veces que se repetira para ordenar = v
  11. //Numero de datos = n = 5
  12. for(int v = 0; v <= 5-1; v++)
  13. {
  14. cout << endl;
  15. for(int i = 0; i <= 5-v; i++)
  16. {
  17. if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
  18. {
  19. temp = a[i];
  20. a[i] = a[i-1];
  21. a[i-1] = temp;
  22. }
  23. }
  24.  
  25. for (int i = 0; i<5 ; i++) //Salida
  26.   cout<< a[i] <<" ";
  27. }
  28. return 0;
  29. }

Pero mi salida con 5-v
(http://4.bp.blogspot.com/-OrI0OEi8TWo/U1bn3Eqj6vI/AAAAAAAAArM/9llD9JJnvpE/s1600/MiSalida.png)

salida con otra Pc con 5-v
(http://2.bp.blogspot.com/-dpHbXiexuHI/U1boBQI1III/AAAAAAAAArU/goV-ofRsImY/s1600/OtraSalida.png)

mi salida con 4-v es como la salida de otra pc o como la segunda imagen

saludos muchas gracias.


Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: Blaster en 23 Abril 2014, 01:11 am
El problema que tengo es que la salida no me sale correctamente alguien sabe a que se deba esto. No se por que a mi me sale 0.

Se debe a la condición de if de esa forma tu estas comparando el array con posiciones no existentes deberia quedar asi

Código
  1. for(int v = 0; v <= 5-1; v++){
  2.   cout << endl;
  3.   for (int i = 0; i <= 5-v; i++){
  4.       if( a[i] > a[i+1] ) {  //Evaluacion si el numero a su Izq es menor
  5. temp = a[i];
  6. a[i] = a[i+1];
  7. a[i+1] = temp;
  8. }
  9. }

Saludos..


Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: nolasco281 en 23 Abril 2014, 01:21 am
Hola

veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

5 es el numero de datos el en arreglo y cuando v,  5 - 0 = 5 asi que en ningun momento se pasa las posiciones del arreglo.

Nota: tomando a V=0

Gracias por contestar.


Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: Blaster en 23 Abril 2014, 01:58 am
veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

Compila y ejecuta los ordena de menor a mayor
veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

En la primera iteración del segundo for el valor de i es cero en el if teniendo encuenta esto tu estas comparando el primer indice del array con la posición -1 que no existe.

Saludos..



Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: nolasco281 en 23 Abril 2014, 02:36 am
Hola no se si estoy confundido

Compila y ejecuta los ordena de menor a mayor
y no se si ves las imagenes

pero las misma instruccion en diferente pc cambia.

segun yo nunca llega a -1.

ya que si tengo

n   v  k
5 - 0  5
5 - 1  4
5 - 2  3
5 - 3  2 
5 - 4  1

Jamas llega a -1 en las iteraciones ya sea a la catidad de operaciones que debe de hacer, o en manejo datos del arreglo que se esta haciendo.

Es lo mismo como si cambiaras 5-v por 5-v-1 la ejecucion te daria un resultado correcto. pero ese no es el tema

Gracias por responder.


Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: rir3760 en 23 Abril 2014, 02:50 am
segun yo nunca llega a -1.
En la primera iteración del bucle interno el valor del contador "i" es cero y en el condicional ocurre el problema que menciona Blaster:
Código
  1. for (int i = 0; i <= 5-v; i++){
  2.   // Primera iteracion, i == 0
  3.   if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1

Otro error se encuentra en la primera iteración del bucle externo: con la variable "v" igual a cero el bucle interno iterara con su contador "i" tomando los valores 0 .. 5 (seis iteraciones).

Un saludo


Título: Re: Ordenamiento de numeros problema con la salida
Publicado por: nolasco281 en 23 Abril 2014, 03:14 am
hola

ya entendi.

solo cambien la inicializacion de la variables
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. main()
  5. {
  6. int a[] = {35, 82, 30, 28, 19};
  7. int temp;
  8.  
  9. //Numero de veces que se repetira para ordenar = v
  10. //Numero de datos = n = 5
  11. for(int v = 1; v <= 5-1; v++)
  12. {
  13. cout << endl;
  14. for(int i = 1; i <= 5-v; i++)
  15. {
  16. if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
  17. {
  18. temp = a[i];
  19. a[i] = a[i-1];
  20. a[i-1] = temp;
  21. }
  22. }
  23.  
  24. for (int i = 0; i<5 ; i++) //Salida
  25.   cout<< a[i] <<" ";
  26. }
  27. return 0;
  28. }

(http://3.bp.blogspot.com/-wjKTiA43PTc/U1cTtXy2_TI/AAAAAAAAArs/NCusEweFM7I/s1600/salidanueva.png)

ya que la salida con el for de Blaster en el segundo comentario era esta por eso creo que me confundi.

(http://3.bp.blogspot.com/-HVeVxMYsGDU/U1cSeFp9TnI/AAAAAAAAArk/xvcNTJg2Sow/s1600/SalidaBlas.png)

saludos y muchas gracias.

PD: gracias por apuntar donde estaba el error

Código
  1.    for (int i = 0; i <= 5-v; i++){
  2.      // Primera iteracion, i == 0
  3.      if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1