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.
#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.
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
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..
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.
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..
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.
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:
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
hola
ya entendi.
solo cambien la inicializacion de la variables
#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
for (int i = 0; i <= 5-v; i++){
// Primera iteracion, i == 0
if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1