• Viernes 17 de Abril de 2026, 11:25

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Aragorn_montaraz

Páginas: [1]
1
C/C++ / Re: Vector compuesto de dos vectores...
« en: Sábado 9 de Enero de 2010, 17:31 »
Wolas de nuevo ermiguel1979.

Primero decirte, que el algoritmo que te e puesto antes, solo funciona si los vectores array_a y array_b ya estan ordenados. En el enunciado del problema te dicen que es así, pero si los metes "a mano" debes de asegurarte de que sea así.

Respecto a lo del contador que has añadido, decirte que en realidad no haría falta. En el ejemplo que yo te e puesto, por cada iteración del bucle for,  se almacena un elemento en el array_c, por lo que la variable "c" que se inicializa al principio del bucle a 0, y que se incrementa con cada iteración al acabar el bucle sería el valor del contador que estas buscando.
Si aún así quisieras usar otra variable como contador, la que tu as situado esta bien, solamente te faltaria otro incremento dentro del else.

Una ultima cosa, en algún momento, uno de los vectores a o b se quedarán sin elementos, y el bucle for dejará de funcionar. Tu has intentado paliar esto añadiendo el && a<longitud_a y el && b<longitud_b, pero conforme esta puesto no funcionaría.
La mejor solución es terminar el bucle cuando uno de los vectores se quede sin elementos. Modificando el bucle así:
Código: C
  1.  
  2. for(a = 0, b = 0, c = 0; c < longitud_c && a < longitud_a && b < longitud; c++)
  3.  
  4.  

Y despues del for, como abrá algun vector que aún tenga elementos añadir esto:
Código: C
  1.  
  2. while (b < longitud_b) { array_c[c] = array_b[b]; b++; c++}
  3. while (a < longitud_a) { array_c[c] = array_a[a]; a++; c++}
  4.  
  5.  

De los que siempre se ejecutará solo uno y volcará el vector que aún este lleno.

Espero haber sido de ayuda, no se que nivel tienes, alomejor es un algoritmo muy rebuscado para ti aún, si no te piden que optimizes centraté en la solución que entiendas más.

Un saludo. :hola:

2
C/C++ / Re: Vector compuesto de dos vectores...
« en: Sábado 9 de Enero de 2010, 12:25 »
Aprovechando que los vectores array_a y array_b deberian estar ordenados ascendientemente, abria una forma más eficiente de hacerlo que juntar los dos vectores y luego ordenarlos.

Sería ir recorriendo los dos vectores elemento a elemento y eligiendo el menor elemento de los dos, que siempre estará en la primera posición, para colocarlo en el array_c.
Seria algo así:

Código: C
  1.  
  2. int ele;
  3. for(a = 0, b = 0, c = 0; c < longitud_c; c++) {
  4.       if (array_a[a] < array_b[b]) {  //Copiamos el menor elemento.
  5.          array_c[c] = array_a[a];
  6.          ele = array_a[a];
  7.          while (array_a[a] == ele) a++;       //"Eliminamos" ese elemento de a y los repetidos.
  8.       }
  9.       else if (array_a[a] > array_b[b]) {  //Copiamos el menor elemento.
  10.         array_c[c] = array_b[b];
  11.         ele = array_b[b];
  12.         while (array_b[b] == ele) b++;       //"Eliminamos" ese elemento de b y los repetidos.
  13.       }
  14.       else {   //Los dos elementos son iguales. Copiamos uno y eliminamos repetidos de los dos.
  15.        array_c[c] = array_b[b];
  16.        ele = array_b[b];
  17.        while (array_b[b] == ele) b++;
  18.        while (array_a[a] == ele) a++;
  19.     }
  20. }
  21.  
  22.  

Es más dificil de entender, pero mucho más eficiente.

Páginas: [1]