elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?][C++] Comparar cada elemento de 2 vectores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?][C++] Comparar cada elemento de 2 vectores  (Leído 5,750 veces)
remphenter

Desconectado Desconectado

Mensajes: 15


Ver Perfil
[?][C++] Comparar cada elemento de 2 vectores
« en: 26 Enero 2020, 05:06 am »

He estado buscando guías y vídeos pero no encuentro como comparar el elemento de un array a todos los elementos del array2, por ejemplo:

array1 = {1,2,3,4,5};

array2 = {3,4,1,0,0};

El programa me debe decir que hay 3 elementos en el array2 que aparecen en el array1, para ello según yo se tiene que crear un tercer array como auxiliar inicializándolo como 0, es decir:

for(i=0; i<5; i++){
array3(i) = 0;
}

pero en mi lógica solo he podido lograr lo siguiente:
Código
  1. for(i=0;i<10;i++){
  2. for(j=0;j<10;j++){
  3. if(array1[i] == array2[j]){   //fila 3
  4. array3[j] = array[i];   //fila 4
  5. }
  6. }
  7. }

En la fila 3 está el problema en la comparación, lo que hace solamente es comparar el elemento de la posición 0 con el elemento de la posición 0 del otro array después, el 2 con el 2 y así.

Además creo tengo un problema con la asignación del array3.

Saludos


« Última modificación: 26 Enero 2020, 05:08 am por remphenter » En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: [?][C++] Comparar cada elemento de 2 vectores
« Respuesta #1 en: 26 Enero 2020, 13:38 pm »

for(j = 0; j < tamArray1; ++j) {

  for(i = 0; i < tamArray2; ++i) {
   
    if(array1[j] == array2) {
    ++array[j];
    }

  }

}


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: [?][C++] Comparar cada elemento de 2 vectores
« Respuesta #2 en: 26 Enero 2020, 18:14 pm »

Si emites/imprimes el valor cuando existe, no sería preciso un tercer array, salvo que se pida expresamente en el enunciado del 'problema'.

En cualquier caso, el sistema usado es subóptimo, aunque muy válido para pequeños arrays... Consume un tiempo n². Luego, cuando 'n' sea un número muy grande, te puedes imaginar lo lento que sería...

Algo muy óptimo sería ordenar ambos arrays (si se sabe de entrada que alguno está ordenado, puede omitirse para el mismo dicha operación), obviamente con un algoritmo rápido como quickSort (recurrir a uno lento como uno de burbuja no optimiza nada).
Una vez ordenados un simple bucle (lineal en 'n'), es suficiente para ir comparando...

La estrategia es entonces tomar uno de los arrays (sugiero tomar aquel cuyo último elemento sea menor), como referencia y tomar el ítem (del ciclo) actual, e ir indagando en el otro bucle mientras sea menor o igual al valor actual en el array de referencia...


Código:
// Se supone que ya se han ordenado los arrays al llegar a este punto, que quedan tal como se muestran:
Array1: 1,2,3,4,5
Array2: 0,0,1,2,4

// Bucle lineal.
Bucle para k desde 0 a array.lenght -1
   v = Array1(k)
   Hacer mientras (v<= Array2(n) )
       si v=(array2(n)) imprimir "El ítem de valor " + v + " está presente en ambos arrays."
       n +=1
       Si (n >= array2.lenght) salirdelafuncion
    Repetir
Fin bucle

OJO: No confundir que el bucle 'do' dentro del bucle 'for', es un bucle anidado, pués no lo es, son colineales... si se alcanza el final del array2, aún cuando se esté dentro del primer ítem del bucle 'for' la función acaba, cosa que no sucedería nunca con 2 bucles anidados.
Es decir el tiempo final será 'n' + 'm', que salvo para casos muy pequeños de 'n' y 'm' siempre será enromeneteme más óptimo que 'n'*'m' (n², si m=n).
« Última modificación: 26 Enero 2020, 18:19 pm por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Comparar un String con cada una de las partes de otro String « 1 2 »
.NET (C#, VB.NET, ASP)
Segurida 13 11,605 Último mensaje 14 Mayo 2011, 18:52 pm
por Segurida
comparar un elemento con un vector c++
Programación C/C++
indict 4 8,071 Último mensaje 24 Enero 2013, 21:48 pm
por indict
Agregar caracter a cada elemento de un jlist
Java
marc85 1 2,812 Último mensaje 22 Noviembre 2014, 15:42 pm
por MNicolas
comparar dos vectores en Dev c++
Programación C/C++
SebasEng 1 2,927 Último mensaje 9 Abril 2015, 20:37 pm
por T. Collins
AYUDA. Comparar vectores de chars.
Programación C/C++
toomi.143 1 1,666 Último mensaje 27 Marzo 2017, 23:17 pm
por Kenji-chan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines