[C++] Acomodar vector de mayor a menor

Iniciado por PiroskY, 2 Octubre 2010, 05:59 AM

0 Miembros y 1 Visitante están viendo este tema.

PiroskY

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

fary

Intenta optimizar el code... se puede acortar.

salu2!
Un byte a la izquierda.

PiroskY

#2
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;
}

Horricreu

Sí, pero ten en cuenta que las instrucciones de una sola sentencia no hace falta poner llaves :rolleyes:

Saludos :P

PiroskY


Horricreu

#5
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

PiroskY

ahh gracias, lo voy a tener en cuenta para proximos programas ^^


leogtz

Horricreu, poner dos sentencias o instrucciones en una línea es un mal hábito de programación, por favor no lo aconsejes.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Horricreu

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