Test Foro de elhacker.net SMF 2.1

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

int main()
{
   int i=0,x=5,maxi;
   char vec[5],vec2[5],vecf[10],max;
   cout << "Primer vector" << endl;
   cout << "Ingrese las letras una por una" << endl;
   for (i=0;i<5;i++) //se carga el primer vector
   {
       cin >> vec[i];
   }
   cout << "Segundo vector" << endl;
   cout << "Ingrese las letras una por una" << endl;
   for (i=0;i<5;i++) //se carga el segundo
   {
       cin >> vec2[i];
   }
   for (i=0;i<5;i++) //meto el primer vector en uno auxiliar
   {
       vecf[i] = vec[i];
   }
   for (i=0;i<5;i++) //meto el segundo vector en el auxiliar
   {
       vecf[x] = vec2[i];
       x++;
   }
   for (i=0;i<10;i++)
   {
       max = vecf[i];
       maxi = i;
       for (x=0;x<10-i;x++)
       {
           if ((int)vecf[x] > (int)max)
           {
               max = vecf[x];
               maxi = x;
           }
       }
       for (x=maxi;x>=i;x--)
       {
           vecf[x] = vecf[x-1];
       }
       vecf[i] = max;
   }
   for (i=0;i<10;i++)
   {
       cout << vecf[i] << " ";
   }
return 0;
}


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 (cpp) [Seleccionar]

       for (x=maxi;x>=i;x--)
       {
           vecf[x] = vecf[x-1];
       }
       vecf[i] = max;



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
Cita de: Drinky94 en  2 Octubre 2010, 12:11 PM
Intenta optimizar el code... se puede acortar.

salu2!

asi?

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main()
{
   char vec1[5],vec2[5],vecaux[10],aux;
   int i;
   bool ordenado = false;
   cout << "Primer vector" << endl;
   cout << "Ingrese las letras una por una" << endl;
   for (i=0;i<5;i++)
   {
       cin >> vec1[i];
   }
   cout << "Segundo vector" << endl;
   cout << "Ingrese las letras una por una" << endl;
   for (i=0;i<5;i++)
   {
       cin >> vec2[i];
   }
   for (i=0;i<5;i++)
   {
       vecaux[2*i] = vec1[i];
       vecaux[2*i+1] = vec2[i];
   }
   while (ordenado == 0)
   {
       ordenado = true;
       for (i=0;i<9;i++)
       {
           if (vecaux[i] > vecaux[i+1])
           {
               aux = vecaux[i];
               vecaux[i] = vecaux[i+1];
               vecaux[i+1] = aux;
               ordenado = false;
           }
       }
   }
   for (i=0;i<10;i++)
   {
       cout << vecaux[i] << " ";
   }
return 0;
}
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 (cpp) [Seleccionar]
#include <cstdio>

int main()
{
int a = 1;
int b = 1;

if(a == b) //Esto es una instrucción
{
printf("'a' equivale a 'b'."); //Esto es una sentencia
}

getchar();

return 0;
}


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

Código (cpp) [Seleccionar]
#include <cstdio>

int main()
{
int a = 1;
int b = 1;

if(a == b) printf("'a' equivale a 'b'.");

getchar();

return 0;
}


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:

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í:

if (condicion)
    accion;


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

if (condicion1)  accion1;
if (condicion2)  accion2;
if (condicion3)  accion3;
if (condicion4)  accion4;
if (condicion5)  accion5;
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:

if (condicion)  accion1;
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
Cita de: Leo Gutiérrez. en  3 Octubre 2010, 17:56 PM
Me refiero a esto:

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.

if(true)
  dothis;//valido


if(true)dothis;//invalido
if(true) dothis;//invalido
if(true)
                                  dothis;//mas invalido todavia


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

Saludos