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 #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
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). #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] << " "; } }
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). #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
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. #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 ]); } 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("La union de los vectores a y b sera:"); for(i=0;i<k;i++) }
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
|