ayuda con la eliminacion de elementos repetidos en un vector en c++

Iniciado por abejaatareada, 11 Mayo 2016, 06:49 AM

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

abejaatareada

hola.. por favor quisiera saber como genero numeros manualmente pero llegado el caso que repita el programa me indique que lo he hecho y pues que lo elimine.. es decir que me genere en otro vector los numeros sin repeticiones.

llevo esto (se que no es mucho):


Código (cpp) [Seleccionar]
int main()
{

int v1[15],i,n,N, expo=2,v2;
cout <<"\n Tamano del vector:  "; cin>>N;
for (i=0;i<N;i++)
{
   cin>> v1(i);
}



Mod: Los códigos deben ir en etiquetas GeSHi, no debes escribir en mayúsculas

class_OpenGL

#1
Este código no es el mejor que he visto. No sé si sonará demasiado duro, pero este código es un poquito chapucero. Primero, aunque le pides al usuario que indique el tamaño del vector, si este excede un tamaño de 15, el programa probablemente te lance un error. Segundo, el código es imposible que compile pues tiene dos errores (que yo haya percibido). El más grave que he visto es que intentas acceder a los elementos del arreglo 'v1' con paréntesis, y se hace con corchetes (el otro es que no incluyes las librerías pertinentes).

No sé si lo que voy a decir ahora es cierto, pero no parece que lo hayas intentado. Aun así, te aconsejo que declares un segundo vector (por ejemplo, v2) del mismo tamaño que el 'v1' y que le añadas los elementos de v1. A medida que vayas añadiendo elementos al v2, comprueba si el elemento que vas a añadir está en v2; si lo está, entonces no lo insertes.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

kgarcia994

#2
Hola buenas,

Primero de todo, queria decirte que, como bien dice nuestro compañero class_OpenGL, el codigo en si tiene un error bastante grave a la hora de declarar el vector.
Ya que le dices que es de tamaño 15.
Pero si el usuario introduce 20, el bucle for ara 20 vueltas, es decir v1[16]por ejemplo, te petaria el programa porque la posicion 16 no existe


Seguidamente. no se si he entendido bien tu pregunta.
He entendido que quieres crear un vector de enteros, en el qual vas introduciendo numeros sin que se repitan, es decir que si quieres introducir un 2 y ya esta introducido,  cree un vector con los numeros sin repetir.

Si es lo que he entendido, yo creo que es mas facil hacer una busqueda de los numeros ya introducidos y mirar si el que quieres introducir esta o no.

En caso de que este no se lo dejas introducir y le vuelves a pedir otro numero.

Te dejo aqui el codigo que he echo suponiendo que he entendido bien tu pregunta.



#include <iostream>

using namespace std;

int main()
{
 

int Numero; //Declaro variable Numero que es el tamaño del vector
int i=0,j, NumeroIntroducir; //Declaro "i" y "j" que los usare de contadores

//Declaro un booleano para hacer una busqueda en el vector de enteros
bool bBuscaNumero = false;

//Pedimos el tamaño del vector
do{
cout << "Tamaño del vector: ";
cin >> Numero;

//Controlamos que el usuario no ponga 0
if(Numero<=0)
cout<<"Tamaño de vector incorrecto" <<endl;

}while(Numero<=0);

//Lo declaramos con el tamaño pedido anteriormente
int v1[Numero];

//Hacemos un do-while para que vaya haciendo todo el vector
do{
     
//Pedimos que introduzca numero
cout << "Introduce numero: ";
cin >> NumeroIntroducir;
 
/*Le decimos que si la i es diferente a 0 entre
Esto es para que la primera vuelta assigne numero si o si ya que no estan repetidos*/
if (i!=0){

//Ponemos j a 0 y el booleano en falso
j=0;
bBuscaNumero = false;
 
/*Mientras la j sea mas pequeña que la i (posicion hasta la que tendra numeros rellenados)
Y el booleano sea falso*/
while(j<i && !bBuscaNumero){
/*si el numero del vector que esta en la posicion j
es igual al numero pedido al usuario*/
if(v1[j]==NumeroIntroducir)
bBuscaNumero = true; //pondremos el booleano en true   
else
j++;//sino pasaremos a la siguiente posicion 
}
 
if(!bBuscaNumero){ //Si el booleano es falso (es decir que no lo ha encontrado)
v1[i]=NumeroIntroducir; //Lo introducimos
i++; //I sumamos una posicion mas
}else{
cout <<"Numero ya introducido"<<endl;//Informamos de que lo ha encontrado

 
}else{
//Aqui añadimos el primer numero a la primera posicion
v1[0]=NumeroIntroducir;
i++; //y sumamos una posicion mas
}
}while(i<Numero); //Mientras la i sea mas pequeña que el Numero (tamaño de vector) ara todo lo anterior
   
   return 0;
}


Orubatosu

Lo he dicho muchas veces, pero soy un pesado.

En C++, llama a estas construcciones "arreglos" o "array" o "matriz" si lo prefieres, pero no vector.

Vector en C++ es un contenedor de la STL, que se usa con la librería del mismo nombre.

De hecho un "vector" en C++ no tiene un tamaño predefinido, es una de sus grandes ventajas, que puedes añadir o quitar elementos del mismo tranquilamente
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

kgarcia994

Toda la razon del mundo, es un array de enteros lo que el queria crear, lapsus mio jajaja , al leer en su mensaje vector me ha confundido al explicarse-lo, pero asi supongo que lo entendera.

Y como bien dices, los vectores son dinamicos, por lo cual puedes ir añadiendo numeros y quitando a tu voluntad, sin limite de espacio.

Como vuelvo a decir, ha sido fallo mio al leerle vector   :silbar: