Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: PiroskY en 2 Octubre 2010, 05:59 am



Título: [C++] Acomodar vector de mayor a menor
Publicado por: PiroskY en 2 Octubre 2010, 05:59 am
Ejercicio:
Cargar dos vectores con caracteres alfabéticos y generar otro donde aparezcan los elementos de los dos vectores fuentes ordenados alfabéticamente y sin elementos repetidos

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    int i=0,x=5,maxi;
  7.    char vec[5],vec2[5],vecf[10],max;
  8.    cout << "Primer vector" << endl;
  9.    cout << "Ingrese las letras una por una" << endl;
  10.    for (i=0;i<5;i++) //se carga el primer vector
  11.    {
  12.        cin >> vec[i];
  13.    }
  14.    cout << "Segundo vector" << endl;
  15.    cout << "Ingrese las letras una por una" << endl;
  16.    for (i=0;i<5;i++) //se carga el segundo
  17.    {
  18.        cin >> vec2[i];
  19.    }
  20.    for (i=0;i<5;i++) //meto el primer vector en uno auxiliar
  21.    {
  22.        vecf[i] = vec[i];
  23.    }
  24.    for (i=0;i<5;i++) //meto el segundo vector en el auxiliar
  25.    {
  26.        vecf[x] = vec2[i];
  27.        x++;
  28.    }
  29.    for (i=0;i<10;i++)
  30.    {
  31.        max = vecf[i];
  32.        maxi = i;
  33.        for (x=0;x<10-i;x++)
  34.        {
  35.            if ((int)vecf[x] > (int)max)
  36.            {
  37.                max = vecf[x];
  38.                maxi = x;
  39.            }
  40.        }
  41.        for (x=maxi;x>=i;x--)
  42.        {
  43.            vecf[x] = vecf[x-1];
  44.        }
  45.        vecf[i] = max;
  46.    }
  47.    for (i=0;i<10;i++)
  48.    {
  49.        cout << vecf[i] << " ";
  50.    }
  51. return 0;
  52. }
  53.  

alguien me dice en que me estoy equivocando?

Como lo tengo ahora devuelve 10 veces la letra mas alta
o sea que supongo que la parte donde piso esa letra mas alta que encontro moviendo todo lo que esta adelante para atras una posicion esta andando mal

Código
  1.        for (x=maxi;x>=i;x--)
  2.        {
  3.            vecf[x] = vecf[x-1];
  4.        }
  5.        vecf[i] = max;
  6.  


Edito:
Ya lo solucione, tenia dos errores tontos :P
lo dejo como estaba ahi, por si alguno quiere pensarlo un ratito :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: fary en 2 Octubre 2010, 12:11 pm
Intenta optimizar el code... se puede acortar.

salu2!


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: PiroskY en 2 Octubre 2010, 20:35 pm
Intenta optimizar el code... se puede acortar.

salu2!

asi?

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    char vec1[5],vec2[5],vecaux[10],aux;
  7.    int i;
  8.    bool ordenado = false;
  9.    cout << "Primer vector" << endl;
  10.    cout << "Ingrese las letras una por una" << endl;
  11.    for (i=0;i<5;i++)
  12.    {
  13.        cin >> vec1[i];
  14.    }
  15.    cout << "Segundo vector" << endl;
  16.    cout << "Ingrese las letras una por una" << endl;
  17.    for (i=0;i<5;i++)
  18.    {
  19.        cin >> vec2[i];
  20.    }
  21.    for (i=0;i<5;i++)
  22.    {
  23.        vecaux[2*i] = vec1[i];
  24.        vecaux[2*i+1] = vec2[i];
  25.    }
  26.    while (ordenado == 0)
  27.    {
  28.        ordenado = true;
  29.        for (i=0;i<9;i++)
  30.        {
  31.            if (vecaux[i] > vecaux[i+1])
  32.            {
  33.                aux = vecaux[i];
  34.                vecaux[i] = vecaux[i+1];
  35.                vecaux[i+1] = aux;
  36.                ordenado = false;
  37.            }
  38.        }
  39.    }
  40.    for (i=0;i<10;i++)
  41.    {
  42.        cout << vecaux[i] << " ";
  43.    }
  44. return 0;
  45. }
  46.  


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Horricreu en 2 Octubre 2010, 20:56 pm
Sí, pero ten en cuenta que las instrucciones de una sola sentencia no hace falta poner llaves :rolleyes:

Saludos :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: PiroskY en 2 Octubre 2010, 21:18 pm
no entendi :x


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Horricreu en 2 Octubre 2010, 21:39 pm
Por ejemplo:

Código
  1. #include <cstdio>
  2.  
  3. int main()
  4. {
  5. int a = 1;
  6. int b = 1;
  7.  
  8. if(a == b) //Esto es una instrucción
  9. {
  10. printf("'a' equivale a 'b'."); //Esto es una sentencia
  11. }
  12.  
  13. getchar();
  14.  
  15. return 0;
  16. }

La instrucción, en este caso if(), tiene UNA sentencia, por lo tanto se puede substituir por:

Código
  1. #include <cstdio>
  2.  
  3. int main()
  4. {
  5. int a = 1;
  6. int b = 1;
  7.  
  8. if(a == b) printf("'a' equivale a 'b'.");
  9.  
  10. getchar();
  11.  
  12. return 0;
  13. }

Y así te ahorras muchas líneas absurdas ;)

Saludos :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: PiroskY en 2 Octubre 2010, 21:50 pm
ahh gracias, lo voy a tener en cuenta para proximos programas ^^


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Horricreu en 2 Octubre 2010, 21:52 pm
De nada ::)

Saludos :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: leogtz en 2 Octubre 2010, 23:10 pm
Horricreu, poner dos sentencias o instrucciones en una línea es un mal hábito de programación, por favor no lo aconsejes.


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Horricreu en 3 Octubre 2010, 09:38 am
No es un mal hábito, simplemente te ahorras las llaves. ¡UNA sola sentencia! En una sentencia tampoco se escribe el gran código.

Saludos :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: leogtz en 3 Octubre 2010, 17:56 pm
Me refiero a esto:

Código
  1. if(a == b) printf("'a' equivale a 'b'");

Se ve espantoso eso.


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: globsharp en 3 Octubre 2010, 18:10 pm
Hombre, tanto como espantoso... :) aunque yo realmente suelo ponerlo siempre así:

Código
  1. if (condicion)
  2.    accion;

Pero por ejemplo, si tengo muchos if de una sola sentencia suelo comprimirlo así:

Código
  1. if (condicion1)  accion1;
  2. if (condicion2)  accion2;
  3. if (condicion3)  accion3;
  4. if (condicion4)  accion4;
  5. if (condicion5)  accion5;
  6. if (condicion6)  accion6;

También suelo hacerlo así cuando tengo un solo if pero con un else y tanto el if como el else tienen una sola sentencia:

Código
  1. if (condicion)  accion1;
  2. else            accion2;

Este tipo de cosas solo se pueden hacer en lenguajes que usen delimitadores como las llaves { y } o como las palabras clave begin y end, en python por ejemplo estás obligado a hacerlo como dice Leo.

Saludos :)




Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Horricreu en 3 Octubre 2010, 18:40 pm
Me refiero a esto:

Código
  1. if(a == b) printf("'a' equivale a 'b'");

Se ve espantoso eso.

Ya lo sé que te refieres a esto y, no es un mal hábito de programación ni es espantoso.

Saludos :P


Título: Re: [C++] Acomodar vector de mayor a menor
Publicado por: Littlehorse en 3 Octubre 2010, 18:47 pm
Ahorrarse las llaves si se quiere y se puede cuando hay una sola instrucción, es perfectamente valido. Ahora bien, poner dos instrucciones en una misma linea si es un mal habito de programación y no se recomienda; no ayuda a la legibilidad del código.

Código
  1. if(true)
  2.  dothis;//valido

Código
  1. if(true)dothis;//invalido
  2. if(true) dothis;//invalido
  3. if(true)
  4.                                  dothis;//mas invalido todavia

y con invalido por supuesto no me refiero a que no se pueda, solo que no es recomendable.

Saludos