Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;

main()
{
int a[] = {35, 82, 30, 28, 19};
int temp;

       //numero de iteraciones = n-v
//Numero de veces que se repetira para ordenar = v
//Numero de datos = n = 5
for(int v = 0; v <= 5-1; v++)
{
cout << endl;
for(int i = 0; i <= 5-v; i++)
{
if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
{
temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
}

for (int i = 0; i<5 ; i++) //Salida
  cout<< a[i] <<" ";
}
return 0;
}


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
Cita de: nolasco281 en 23 Abril 2014, 00:08 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 (cpp) [Seleccionar]
for(int v = 0; v <= 5-1; v++){
   cout << endl;
   for (int i = 0; i <= 5-v; i++){
       if( a[i] > a[i+1] ) {  //Evaluacion si el numero a su Izq es menor
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}


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
Cita de: nolasco281 en 23 Abril 2014, 01:21 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
Cita de: nolasco281 en 23 Abril 2014, 01:21 AM
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

Cita de: Blaster en 23 Abril 2014, 01:58 AM
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
Cita de: nolasco281 en 23 Abril 2014, 02:36 AMsegun 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 (cpp) [Seleccionar]
for (int i = 0; i <= 5-v; i++){
   // Primera iteracion, i == 0
   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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;

main()
{
int a[] = {35, 82, 30, 28, 19};
int temp;

//Numero de veces que se repetira para ordenar = v
//Numero de datos = n = 5
for(int v = 1; v <= 5-1; v++)
{
cout << endl;
for(int i = 1; i <= 5-v; i++)
{
if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
{
temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
}

for (int i = 0; i<5 ; i++) //Salida
  cout<< a[i] <<" ";
}
return 0;
}


(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 (cpp) [Seleccionar]
    for (int i = 0; i <= 5-v; i++){
      // Primera iteracion, i == 0
      if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1