Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: creiko en 6 Abril 2016, 18:48 pm



Título: eliminar números repetidos de dos vectores
Publicado por: creiko en 6 Abril 2016, 18:48 pm
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
  1. #include "conio.h"
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include "string.h"
  5. #include "windows.h"
  6. #include "iostream"
  7. #include "time.h"
  8.  
  9. int main ()
  10.  
  11. {
  12.        int v_original [4];
  13.        int v_aux [4];
  14.        int v_final [4];
  15.        int cont,num,i,j=0,k,z=0 ;
  16.        int b_original [4];
  17.        int b_aux [4];
  18.        int b_final [4];
  19.        int cont2,num2,i2,j2=0,k2,z2=0 ,c[8];
  20.  
  21.        printf("Programa union de vectores \n\n");
  22.  
  23.        for (i=0; i<4; i++)
  24. {
  25.                printf("Introduce el valor a[%d]:", i);
  26.                scanf("%d",&v_original[i]);
  27.        }
  28.  
  29.        for (i=0;i<4;i++)
  30. {
  31.                cont=0;
  32.                num=v_original[i];
  33.                v_aux[j]=num;
  34.                j++;
  35.                for (k=0;k<4;k++)
  36.                {
  37. if ( v_aux[k] == num )
  38.                           cont++;
  39. }
  40.  
  41.                if ( cont == 1 )
  42. {
  43.                        v_final[z]=num;
  44.                        z++;
  45.                }
  46.        }
  47.  
  48.        printf("\n");
  49.  
  50.        for (i=0; i<4; i++)
  51. {
  52.                printf("Introduce el valor b[%d]: ", i);
  53.                scanf("%d",&b_original[i]);
  54.        }
  55.  
  56.        for (i=0;i<4;i++)
  57. {
  58.                cont2=0;
  59.                num2=b_original[i];
  60.                b_aux[j2]=num2;
  61.                j2++;
  62.                for (k2=0;k2<4;k2++)
  63.                {
  64.                 if ( b_aux[k2] == num2 )
  65.                                cont2++;
  66. }
  67.  
  68.                if ( cont2 == 1 )
  69. {
  70.                        b_final[z2]=num2;
  71.                        z2++;
  72.                }
  73.        }
  74.  
  75.       printf("\n");
  76.        printf("El a es: \n");
  77.        for (i=0;i<z;i++)
  78.        printf ("%d \n",v_final[i]);
  79.        printf("\n");
  80.  
  81.  
  82.        printf("El b es: \n");
  83.        for (i=0;i<z2;i++)
  84.        printf ("%d \n",b_final[i]);
  85.  
  86.        for(i=0;i<4;i++)
  87.        {
  88. c[i]=v_final[i];
  89. }
  90. for(i=0;i<4;i++)
  91. {
  92. c[i+4]=b_final[i];
  93. }
  94. printf("\n");
  95. printf("La union de los vectoes a y b sera:");
  96. for(i=0;i<8;i++)
  97. printf(" %d ",c[i]);
  98. }

   
    :rolleyes: :rolleyes:




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


Título: Re: eliminar números repetidos de dos vectores
Publicado por: 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
  1. #include "iostream"
  2. using namespace std;
  3. int main ()
  4. {
  5.        int a[4];
  6.        int b[4];
  7. int conc[8];
  8. int cont = 0;
  9. bool rep[8];
  10.  
  11.        for(int i = 0; i < 4; ++i){
  12.         cout << "Introduce a["<<i<<"]: ";
  13.         cin >> a[i];
  14. conc[i] = a[i];
  15. rep[i]=false;
  16. }
  17. for(int i = 0; i < 4; ++i){
  18.         cout << "Introduce b["<<i<<"]: ";
  19.         cin >> b[i];
  20. conc[i+4] = b[i];
  21. rep[i+4]=false;
  22. }
  23. for(int i = 0; i < 8; ++i){
  24. for(int j = 0; j < 8; ++j){
  25. if(i != j && conc[i] == conc[j] && !rep[j] && !rep[i]){
  26. rep[j] = true;
  27. ++cont;
  28. }
  29. }
  30. }
  31.  
  32. int uni[8-cont];
  33. int j = 0;
  34. int i = 0;
  35. while(j < 8-cont){
  36. if(!rep[i]){
  37. uni[j] = conc[i];
  38. ++j;
  39. }
  40. ++i;
  41. }
  42.  
  43. cout << "Union de a y b:" << endl;
  44. for(int i = 0; i < 8-cont; ++i){
  45. cout <<
  46. uni[i] << " ";
  47. }
  48. }
  49.  


Título: Re: eliminar números repetidos de dos vectores
Publicado por: creiko en 6 Abril 2016, 21:22 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
  1. #include "iostream"
  2. using namespace std;
  3. int main ()
  4. {
  5.        int a[4];
  6.        int b[4];
  7. int conc[8];
  8. int cont = 0;
  9. bool rep[8];
  10.  
  11.        for(int i = 0; i < 4; ++i){
  12.         cout << "Introduce a["<<i<<"]: ";
  13.         cin >> a[i];
  14. conc[i] = a[i];
  15. rep[i]=false;
  16. }
  17. for(int i = 0; i < 4; ++i){
  18.         cout << "Introduce b["<<i<<"]: ";
  19.         cin >> b[i];
  20. conc[i+4] = b[i];
  21. rep[i+4]=false;
  22. }
  23. for(int i = 0; i < 8; ++i){
  24. for(int j = 0; j < 8; ++j){
  25. if(i != j && conc[i] == conc[j] && !rep[j] && !rep[i]){
  26. rep[j] = true;
  27. ++cont;
  28. }
  29. }
  30. }
  31.  
  32. int uni[8-cont];
  33. int j = 0;
  34. int i = 0;
  35. while(j < 8-cont){
  36. if(!rep[i]){
  37. uni[j] = conc[i];
  38. ++j;
  39. }
  40. ++i;
  41. }
  42.  
  43. cout << "Union de a y b:" << endl;
  44. for(int i = 0; i < 8-cont; ++i){
  45. cout <<
  46. uni[i] << " ";
  47. }
  48. }
  49.  





muchas gracias era justo lo que necesitaba


Título: Re: eliminar números repetidos de dos vectores
Publicado por: lfgmespino en 7 Abril 2016, 00:47 am
Yo lo haría así. (Esta sin optimizar).
Sdos.
Código
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4. #include "time.h"
  5.  
  6. enum bool {false, true}
  7.  
  8. int main ()
  9.  
  10. {
  11.        int v_original [4];
  12.        int b_original [4];
  13.        int final[8]=0;
  14.        int usados[8];
  15.        int i, j, k=0, l=0;
  16.        bool repetido;
  17.        int  contUsados=0;
  18.  
  19.        printf("Programa union de vectores \n\n");
  20.  
  21.        for (i=0; i<4; i++)
  22. {
  23.                printf("Introduce el valor a[%d]:", i);
  24.                scanf("%d",&v_original[i]);
  25.        }
  26.         printf("\n");
  27.  
  28.        for (i=0; i<4; i++)
  29. {
  30.                printf("Introduce el valor b[%d]: ", i);
  31.                scanf("%d",&b_original[i]);
  32.        }
  33.  
  34.        for (i=0;i<4;i++)  { //exploramos uno a uno el vector inicial
  35.         repetido = false; //suponemos que no está repetido
  36.         for (j=0; j<contUsados;j++)   { //pero lo verificamos comprobando el vector de usados
  37.            if (v_original[i] == usados[j]) repetido = true;
  38.            }
  39.                if (repetido == false) { //si no ha sido usado
  40.                 final[k]= v_original[i]; //lo añadimos al vector final y
  41.                 usados[l]= v_original[i];   //anotamos que ha sido usado
  42.                 contUsados++;   //incrementamos el numero de elementos en el vector de usados
  43.                 k++;
  44.                 l++;
  45.                 }  //si ya ha sido usado, no hacemos nada: ni lo anotamos como usado, ni lo copiamos en el vector final
  46.               }
  47.  
  48.        for (i=0;i<4;i++)  {
  49.         repetido = false;    //hacemos lo mismo con el segundo vector
  50.         for (j=0; j<contUsados;j++)  {
  51.            if (b_original[i] == usados[j]) repetido = true;
  52.            }
  53.                if (repetido == false) {              
  54.                 final[k]= b_original[i];
  55.                 usados[l]= b_original[i];
  56.                 contUsados++;
  57.                 k++;
  58.                 l++;
  59.                 }
  60.         }
  61.  
  62.  
  63. printf("\n");
  64. printf("La union de los vectores a y b sera:");
  65. for(i=0;i<k;i++)
  66. printf(" %d ",final[i]);
  67. }
  68.  
  69.  


Título: Re: eliminar números repetidos de dos vectores
Publicado por: HardForo en 15 Abril 2016, 20:05 pm
Creo se deberian encapsular en funciones los aportes que hacen, asi seran de mas ayuda