eliminar números repetidos de dos vectores

Iniciado por creiko, 6 Abril 2016, 18:48 PM

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

creiko

Buenas alguien puede ayudarme en este ejercicio.

Dev-C++


(primero de probarlo de manera que yo ingrese los números como en el ejemplo que pongo ahí bajo)

(si todo sale bien debo probarlo con números al azar, esta parte la se manejar muy bien, la de los números azar )


resulta que debo generar dos vectores A y B y unirlos,

ejemplo
A =  8 , 2 , 1 , 2
B = 5 , 4 , 1 , 8

la union de A y B seria
8 , 2 , 1 , 5 , 4

en el vector A pude eliminar  el numero 2 que esta repetido y me quedo
8 , 2 , 1.  pero el vector B como no se repite pasa igual como esta. el problema es que al unirlos me sale esto, 8,2,1,0,5,4,1,8 y no debería ser así lo correcto seria 8,2,1,5,4,8,1 y de ese union deberia eliminar 8 y 1 del vector B para que me salga  UNION 8,2,1,5,4


mando lo que llevo hecho
por favor seria de gran ayuda

Código (cpp) [Seleccionar]
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#include "iostream"
#include "time.h"

int main ()

{
       int v_original [4];
       int v_aux [4];
       int v_final [4];
       int cont,num,i,j=0,k,z=0 ;
       int b_original [4];
       int b_aux [4];
       int b_final [4];
       int cont2,num2,i2,j2=0,k2,z2=0 ,c[8];
       
       printf("Programa union de vectores \n\n");
     
       for (i=0; i<4; i++)
{
               printf("Introduce el valor a[%d]:", i);
               scanf("%d",&v_original[i]);
       }

       for (i=0;i<4;i++)
{
               cont=0;
               num=v_original[i];
               v_aux[j]=num;
               j++;
               for (k=0;k<4;k++)
               {
if ( v_aux[k] == num )
                          cont++;
}
                       
               if ( cont == 1 )
{
                       v_final[z]=num;
                       z++;
               }
       }

       printf("\n");

       for (i=0; i<4; i++)
{
               printf("Introduce el valor b[%d]: ", i);
               scanf("%d",&b_original[i]);
       }

       for (i=0;i<4;i++)
{
               cont2=0;
               num2=b_original[i];
               b_aux[j2]=num2;
               j2++;
               for (k2=0;k2<4;k2++)
               {
                if ( b_aux[k2] == num2 )
                               cont2++;
}
                       
               if ( cont2 == 1 )
{
                       b_final[z2]=num2;
                       z2++;
               }
       }
       
      printf("\n");
       printf("El a es: \n");
       for (i=0;i<z;i++)
       printf ("%d \n",v_final[i]);
       printf("\n");
       
       
       printf("El b es: \n");
       for (i=0;i<z2;i++)
       printf ("%d \n",b_final[i]);

       for(i=0;i<4;i++)
       {
c[i]=v_final[i];
}
for(i=0;i<4;i++)
{
c[i+4]=b_final[i];
}
printf("\n");
printf("La union de los vectoes a y b sera:");
for(i=0;i<8;i++)
printf(" %d ",c[i]);
}


   
    :rolleyes: :rolleyes:




Mod: Los códigos deben ir en etiquetas GeSHi y cada cosa va en su subforo, esto es C y allí va

LaiaxanIV

No se si es esto lo que quieres, miratelo y dime.
Está claro que hay muchas maneras más eficientes de hacerlo, pero he querido tener 4 vectores. El a, el b, el conc (concatenación) y el uni (unión).
Código (cpp) [Seleccionar]

#include "iostream"
using namespace std;
int main ()
{
        int a[4];
        int b[4];
int conc[8];
int cont = 0;
bool rep[8];
       
        for(int i = 0; i < 4; ++i){
        cout << "Introduce a["<<i<<"]: ";
        cin >> a[i];
conc[i] = a[i];
rep[i]=false;
}
for(int i = 0; i < 4; ++i){
        cout << "Introduce b["<<i<<"]: ";
        cin >> b[i];
conc[i+4] = b[i];
rep[i+4]=false;
}
for(int i = 0; i < 8; ++i){
for(int j = 0; j < 8; ++j){
if(i != j && conc[i] == conc[j] && !rep[j] && !rep[i]){
rep[j] = true;
++cont;
}
}
}

int uni[8-cont];
int j = 0;
int i = 0;
while(j < 8-cont){
if(!rep[i]){
uni[j] = conc[i];
++j;
}
++i;
}

cout << "Union de a y b:" << endl;
for(int i = 0; i < 8-cont; ++i){
cout <<
uni[i] << " ";
}
}

creiko

Cita de: LaiaxanIV en  6 Abril 2016, 20:39 PM
No se si es esto lo que quieres, miratelo y dime.
Está claro que hay muchas maneras más eficientes de hacerlo, pero he querido tener 4 vectores. El a, el b, el conc (concatenación) y el uni (unión).
Código (cpp) [Seleccionar]

#include "iostream"
using namespace std;
int main ()
{
        int a[4];
        int b[4];
int conc[8];
int cont = 0;
bool rep[8];
       
        for(int i = 0; i < 4; ++i){
        cout << "Introduce a["<<i<<"]: ";
        cin >> a[i];
conc[i] = a[i];
rep[i]=false;
}
for(int i = 0; i < 4; ++i){
        cout << "Introduce b["<<i<<"]: ";
        cin >> b[i];
conc[i+4] = b[i];
rep[i+4]=false;
}
for(int i = 0; i < 8; ++i){
for(int j = 0; j < 8; ++j){
if(i != j && conc[i] == conc[j] && !rep[j] && !rep[i]){
rep[j] = true;
++cont;
}
}
}

int uni[8-cont];
int j = 0;
int i = 0;
while(j < 8-cont){
if(!rep[i]){
uni[j] = conc[i];
++j;
}
++i;
}

cout << "Union de a y b:" << endl;
for(int i = 0; i < 8-cont; ++i){
cout <<
uni[i] << " ";
}
}






muchas gracias era justo lo que necesitaba

lfgmespino

Yo lo haría así. (Esta sin optimizar).
Sdos.

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"

enum bool {false, true}

int main ()

{
        int v_original [4];
        int b_original [4];
        int final[8]=0;
        int usados[8];
        int i, j, k=0, l=0;
        bool repetido;
        int  contUsados=0;

        printf("Programa union de vectores \n\n");

        for (i=0; i<4; i++)
{
                printf("Introduce el valor a[%d]:", i);
                scanf("%d",&v_original[i]);
        }
         printf("\n");

        for (i=0; i<4; i++)
{
                printf("Introduce el valor b[%d]: ", i);
                scanf("%d",&b_original[i]);
        }

        for (i=0;i<4;i++)  { //exploramos uno a uno el vector inicial
        repetido = false; //suponemos que no está repetido
        for (j=0; j<contUsados;j++)   { //pero lo verificamos comprobando el vector de usados
            if (v_original[i] == usados[j]) repetido = true;
            }
                if (repetido == false) { //si no ha sido usado
                final[k]= v_original[i]; //lo añadimos al vector final y
                usados[l]= v_original[i];    //anotamos que ha sido usado
                contUsados++;    //incrementamos el numero de elementos en el vector de usados
                k++;
                l++;
                }   //si ya ha sido usado, no hacemos nada: ni lo anotamos como usado, ni lo copiamos en el vector final
               }
               
        for (i=0;i<4;i++)  {
        repetido = false;     //hacemos lo mismo con el segundo vector
        for (j=0; j<contUsados;j++)  {
            if (b_original[i] == usados[j]) repetido = true;
            }
                if (repetido == false) {                
                final[k]= b_original[i];
                usados[l]= b_original[i];
                contUsados++;
                k++;
                l++;
                }
          }
           

printf("\n");
printf("La union de los vectores a y b sera:");
for(i=0;i<k;i++)
printf(" %d ",final[i]);
}


HardForo

Creo se deberian encapsular en funciones los aportes que hacen, asi seran de mas ayuda
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *