elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Problema con Arrays..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Problema con Arrays..  (Leído 6,321 veces)
Wazzp

Desconectado Desconectado

Mensajes: 34


We have seen the fall of the elite...


Ver Perfil
[C++] Problema con Arrays..
« en: 11 Enero 2011, 20:31 pm »

Recien empece a ver Arrays luego de dejar por un tiempo C++ por razones personales.. escribi este programa el cual crea un array de 10 espacios, los llena con introducciones por teclado, y luego deberia ordenarlo y mostrarlo.. Pero devuelve cualquier cosa.. Cual es mi error?
Código
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5. int main()
  6. {
  7.    int array[10],i,j;
  8.  
  9.    for (i=0; i<10; i++)
  10.    cin>>array[i];
  11.    cout<<endl;
  12.    for (i=0; i<10; i++)
  13.    cout<< array[i]<<" ";
  14.    cout<<endl;
  15.  
  16.    for (i=0; i<10; i++)
  17.    {
  18.        for (j=0; j<10-1; j++)
  19.        {
  20.            if (array[j]>array[j+1])
  21.            {
  22.                int temp = array[j];
  23.                array[j+1] = array[j];
  24.                array[j+1] = temp;
  25.            }
  26.  
  27.        }
  28.  
  29.        cout<<array[i]<<endl;
  30.    }
  31.  
  32.  getchar();
  33.  return 0;
  34. }


En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #1 en: 11 Enero 2011, 20:41 pm »

No seria
Código
  1.    for (i=0; i<10; i++)
  2.    {
  3.        for (j=0; j<10-1; j++)
  4.        {
  5.            if (array[j]>array[j+1])
  6.            {
  7.                int temp = array[j];
  8.                array[j] = array[j+1];
  9.                array[j+1] = temp;
  10.            }
  11.  
  12.        }
  13.  
  14.        cout<<array[i]<<endl;
  15.    }

Te respondi de cabeza y sin saber C++ asi que puede que este mal, pero me parece ilogico eso que haces de asignar 2 veces a array[j+1] array[j] ;).

Sa1uDoS


En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: [C++] Problema con Arrays..
« Respuesta #2 en: 11 Enero 2011, 20:42 pm »

Sería algo así:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    int array[10], i, j;
  9.  
  10.    for (i=0; i<10; i++)
  11.        cin >> array[i];
  12.  
  13.    cout << endl;
  14.  
  15.    for (i = 0; i < 10; i++)
  16.        for (j = i + 1; j < 10; j++)
  17.        {
  18.            if (array[j] > array[i])
  19.            {
  20.                int temp = array[i];
  21.                array[i] = array[j];
  22.                array[j] = temp;
  23.            }
  24.  
  25.        }
  26.  
  27.    for (i=0; i<10; i++)
  28.        cout << array[i] << endl;
  29.  
  30.  system("pause>nul");
  31.  return 0;
  32. }
  33.  

Saludos.
En línea

Wazzp

Desconectado Desconectado

Mensajes: 34


We have seen the fall of the elite...


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #3 en: 11 Enero 2011, 20:56 pm »

Sería algo así:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. int array[10], i, j;
  9.  
  10. for (i=0; i<10; i++)
  11. cin >> array[i];
  12.  
  13. cout << endl;
  14.  
  15. for (i = 0; i < 10; i++)
  16. for (j = i + 1; j < 10; j++)
  17. {
  18. if (array[j] > array[i])
  19. {
  20. int temp = array[i];
  21. array[i] = array[j];
  22. array[j] = temp;
  23. }
  24.  
  25. }
  26.  
  27. for (i=0; i<10; i++)
  28. cout << array[i] << endl;
  29.  
  30. system("pause>nul");
  31. return 0;
  32. }
  33.  

Saludos.

Algo entendi pero estoy siguiendo un libro y supuestamente es un ejercicio que se puede hacer.. pero hay cosas que usaste que no vi tdv.. (Ej: int main(int argc, char *argv[]) )
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #4 en: 11 Enero 2011, 20:58 pm »

xDD, eso es para pasar parametros, solo que Khronos14 se ve que acostumbra a ponerlo aunque no trabaje con parametros ;).

Sa1uDoS
« Última modificación: 4 Mayo 2013, 17:49 pm por mr.blood » En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: [C++] Problema con Arrays..
« Respuesta #5 en: 11 Enero 2011, 21:06 pm »

Código
  1. int main(int argc, char *argv[])

argc es el número de parámetros y argv es un array que contiene los parámetros de entrada del programa. No hace falta ponerlo, es como dice mr. blood, mera costumbre.

Si haces un:

Código
  1. cout << argv[0] << endl;
  2.  

Se imprimirá en pantalla la ruta completa de tu programa, argv[1] sería el primer parámetro (si tuviera, lo compruebas con argc).

Saludos.
En línea

Wazzp

Desconectado Desconectado

Mensajes: 34


We have seen the fall of the elite...


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #6 en: 11 Enero 2011, 21:12 pm »

Khronos14 mr.blood gracias por la ayuda.
Khronos, tu programa lo ordena de mayor a menor, para ordenarlo de menor a mayor solo deberia cambiar el signo ">" por "<" aki--> if (array[j] > array) ??
No puedo hacer la prueba yo mismo en este momento por eso pregunto..
Graciaas!!  ;D
En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: [C++] Problema con Arrays..
« Respuesta #7 en: 11 Enero 2011, 22:06 pm »

Si, para ordenar el array de menor a mayor, cambias > por < en la condición.

Saludos.
En línea

Wazzp

Desconectado Desconectado

Mensajes: 34


We have seen the fall of the elite...


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #8 en: 11 Enero 2011, 23:09 pm »

Listoo! Muchisimas gracias! ahora tengo que completar el programa.. si quieren una vez terminado lo posteo a ver que piensan :)

Aca lo tengo terminado.. me falta solo una cosa.. Con el ultimo else.. como hago para que vuelvan a intentar? Se me ocurren varias opciones pero cual es la mejor manera de hacerlo?

Código
  1. //Metodo de la burbuja..
  2.  
  3. #include <iostream>
  4. #include <stdio.h>
  5.  
  6. using namespace std;
  7. int main()
  8. {
  9.    int array[10],i,j,r;
  10.  
  11.    for (i=0; i<10; i++)
  12.    {
  13.        cin>>array[i];
  14.    }
  15.  
  16.    cout<<endl;
  17.  
  18.    for (i=0; i<10; i++)
  19.    {
  20.        cout<< array[i]<<" ";
  21.    }
  22.    cout<<endl;
  23.    cout<<"--------------------------------------------------------"<<endl;
  24.    cout<<endl;
  25.  
  26.    cout<<"Elija el metodo de ordenamiento"<<endl;
  27.    cout<<"1.-Mayor a menor. 2.-Menor a Mayor"<<endl;
  28.    cin>>r;
  29.    cout<<"--------------------------------------------------------"<<endl;
  30.  
  31.    if (r==1)
  32.    {
  33.        for (i = 0; i < 10; i++)
  34.       for (j = i + 1; j < 10; j++)
  35.       {
  36.           if (array[j] > array[i])
  37.           {
  38.               int temp = array[i];
  39.               array[i] = array[j];
  40.               array[j] = temp;
  41.           }
  42.        }
  43.               for (i=0; i<10; i++)
  44.               cout << array[i] << endl;
  45.    }
  46.  
  47.       else if (r==2)
  48.       {
  49.                   for (i = 0; i < 10; i++)
  50.       for (j = i + 1; j < 10; j++)
  51.       {
  52.           if (array[j] < array[i])
  53.           {
  54.               int temp = array[i];
  55.               array[i] = array[j];
  56.               array[j] = temp;
  57.           }
  58.        }
  59.               for (i=0; i<10; i++)
  60.               cout << array[i] << endl;
  61.       }
  62.  
  63.       else
  64.       cout<<"El numero introducido no es correcto,intentelo de nuevo"<<endl;
  65.  
  66.  getchar();
  67.  return 0;
  68. }
« Última modificación: 12 Enero 2011, 18:17 pm por Wazzp » En línea

N0body

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: [C++] Problema con Arrays..
« Respuesta #9 en: 15 Enero 2011, 17:21 pm »

Bueno, para resolver tu duda en concreto te doy esta respuesta:

Podrías poner un do { } while que abarque todo desde que tiene que elegir la opción hasta el final y hacer que todo repita con la condición de que r!=1 y r!=2. Estilo

do{
Elegis opcion

Proceso de ordenamiento
} while (r!=1&&r!=2);

Obviamente que podrás decir... pero sí yo ya comprobé q r!=1 y r!=2 en el último else! Por qué tengo que poner un do {} while que vuelva comparar y no poner un GOTO!! xD... Bueno (por lo menos a veces yo pienso cosas así) la verdad es que no todo es optimización xD, y poner un do { } while contribuirá muchísimo a la lectura del código... Además, si bien matemáticamente creo q es más óptimo, no creo q se note...

Acá algunas aclaraciones que te hago:
-En vez de copiar dos veces el algoritmo de ordenamiento cambiando tan sólo < por >, lo que comúnmente se hace (especialmente cuando se usan algoritmos más complejos) es independizar el algoritmo que ORDENA del que COMPARA. Así puedes hacer una función como la siguiente (ver explicación abajo):

Código
  1. int funcion (int a, int b, int i)
  2. {
  3.  if (a>b)
  4.     return !i;
  5.  if (a<b)
  6.     return i;
  7.  

Explicación: esta función toma dos enteros, a y b y los compara. El entero i está para indicar sí querés ordenar ascendentemente o al revés... por qué?
Pués, porque fijate que si i=0 la función devolverá 1 cuando a>b y 0 cuando a<b y si i=1 la función devolverá 0 cuando a>b y 1 cuando a<b...
Así el valor de i dependerá del sentido de ordenamiento elegido y en el if del algoritmo de ordenamiento pondrás dicha función...


-Declaras una variable auxiliar temp cada vez que vas a intercambiar los números, creo que sería mejor ya tenerla declarada antes, en la parte que declaras todas las variables.

-El algoritmo que usaste primera vez creo que es un método burbuja de ordenamiento, en el segundo for podrías usar j<10-1-i
En dicho ordenamiento mientras ordenas vas mostrando array, cuando según el algoritmo que usaste, luego de cada iteración del bucle principal queda ordenado y listo para mostrar array[10-i] y no array...

-Espero que entiendas bien lo que estás haciendo, el error que te corrijieron al principio (en el intercambio) demuestra que no prestaste mucha atención... espero que entiendas también el método que usas. Sino has lo siguiente, recorta muchos papelitos y a cada uno le pones un número... luego los desordenas todos y te pones a ejecutar el algoritmo tu mismo como si tu fueses la computadora, te dará una mayor comprensión del algoritmo que estás utilizando y como optimizarlo

-No me gusta mucho el algoritmo que usas luego, es correcto, pero pereferiría el de incerción (tuve que buscar como se llamaba el que yo me refería pq soy malísimo para los nombres xD) bueno, o sí no el de burbuja con la optimización de que busque hasta donde se hizo el último intercambio...
« Última modificación: 15 Enero 2011, 18:40 pm por N0body » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Arrays dinámicos multidimensionales con dictionary
.NET (C#, VB.NET, ASP)
WHK 3 2,864 Último mensaje 12 Julio 2013, 21:34 pm
por WHK
Problema con los inputs y los arrays
PHP
:ohk<any> 4 2,506 Último mensaje 21 Agosto 2013, 13:27 pm
por :ohk<any>
Problema con Arrays
Java
alp 0 1,352 Último mensaje 4 Mayo 2014, 02:02 am
por alp
Problema guardando 2d arrays en binarios
Programación C/C++
julianbesso1 4 2,331 Último mensaje 5 Agosto 2014, 16:30 pm
por eferion
Problema con Arrays en C (no C++)
Programación C/C++
santibarquero98 7 2,652 Último mensaje 26 Mayo 2015, 23:41 pm
por Peregring-lk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines