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
#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
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
Intenta optimizar el code... se puede acortar.
salu2!
Cita de: Drinky94 en 2 Octubre 2010, 12:11 PM
Intenta optimizar el code... se puede acortar.
salu2!
asi?
#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;
}
Sí, pero ten en cuenta que las instrucciones de una sola sentencia no hace falta poner llaves :rolleyes:
Saludos :P
no entendi :x
Por ejemplo:
#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:
#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
ahh gracias, lo voy a tener en cuenta para proximos programas ^^
De nada ::)
Saludos :P
Horricreu, poner dos sentencias o instrucciones en una línea es un mal hábito de programación, por favor no lo aconsejes.
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
Me refiero a esto:
if(a == b) printf("'a' equivale a 'b'");
Se ve espantoso eso.
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 :)
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
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