Todo el análisis que no aparece en la cita es correcto, está bastante bien. Pero a partir de aquí es donde tienes un error así que vamos a ello.
Voy a ponerte un ejemplo para que veas a donde quiero llegar:
Si pruebas a ejecutar esto en lugar del código original (solo he añadido una línea después de la etiqueta iterar) verás el porqué del error y el porqué de que no se recomiende usar etiquetas y <goto> para los saltos. El sentido de añadir esa frase antes del <for> es que cada vez que se ejecute <goto etiqueta> se va a repetir esa frase en pantalla... Por qué? Vamos a analizarlo de nuevo sin la instrucción que he añadido que es meramente demostrativa:
El comienzo que has hecho es correcto, antes de llegar al <for> tienes <i = 1>, entonces (importante) ENTRAS en el <for> por lo tanto <j = 1>. Comparamos:
valores[i = 1] = 2
numeros[j = 1] = 3
Son distintos, entonces otra iteración del <for> ahora con <j = 2>. Entonces vamos a comparar cada posición de <numeros> con <valores[1]>. Nunca va a ser cierto ya que <numeros> sigue creciendo y <valores[1]> es menor que todos. Llegamos al final del <for> con <j = 100> ahora ya no se va a repetir, entonces salimos del <for> y miramos el <if> de fuera: ¿i <= 100? Sí, entonces <i = 2> y <goto iterar>. Volvemos ANTES del <for> entonces se ejecuta la inicialización otra vez, <i = 1> y se repite el proceso comparamos cada valor de <numeros> con <valores[2]> lo que nunca va a ser cierto.
Creo que ahora ya vas viendo lo que va a hacer: ¿Cuándo va a entrar al <if> que hay dentro del <for>? Cuando un valor esté en <valores> y en <numeros>. Y como en <valores> tenemos los múltiplos de 2 y en <numeros> tenemos los múltiplos de 3... Que va a haber en <soluciones>? Exacto, los múltiplos de 2 y 3 al mismo tiempo, es decir, los múltiplos de 6.
Ahora ya podemos responder a la pregunta, te la dejo a ti que seguro que te hace más ilusión dar con la respuesta correcta en vez de decírtelo yo.
Voy a ponerte un ejemplo para que veas a donde quiero llegar:
Código
iterar: cout << "Se repite la iteracion" << endl; for (j = 1; j <= 100; j = j + 1){ if (valores[i] == numeros[j]){ solucion[z] = valores[i]; z = z + 1; } } if (i <= 100){ i = i + 1; goto iterar; }
Si pruebas a ejecutar esto en lugar del código original (solo he añadido una línea después de la etiqueta iterar) verás el porqué del error y el porqué de que no se recomiende usar etiquetas y <goto> para los saltos. El sentido de añadir esa frase antes del <for> es que cada vez que se ejecute <goto etiqueta> se va a repetir esa frase en pantalla... Por qué? Vamos a analizarlo de nuevo sin la instrucción que he añadido que es meramente demostrativa:
El comienzo que has hecho es correcto, antes de llegar al <for> tienes <i = 1>, entonces (importante) ENTRAS en el <for> por lo tanto <j = 1>. Comparamos:
valores[i = 1] = 2
numeros[j = 1] = 3
Son distintos, entonces otra iteración del <for> ahora con <j = 2>. Entonces vamos a comparar cada posición de <numeros> con <valores[1]>. Nunca va a ser cierto ya que <numeros> sigue creciendo y <valores[1]> es menor que todos. Llegamos al final del <for> con <j = 100> ahora ya no se va a repetir, entonces salimos del <for> y miramos el <if> de fuera: ¿i <= 100? Sí, entonces <i = 2> y <goto iterar>. Volvemos ANTES del <for> entonces se ejecuta la inicialización otra vez, <i = 1> y se repite el proceso comparamos cada valor de <numeros> con <valores[2]> lo que nunca va a ser cierto.
Creo que ahora ya vas viendo lo que va a hacer: ¿Cuándo va a entrar al <if> que hay dentro del <for>? Cuando un valor esté en <valores> y en <numeros>. Y como en <valores> tenemos los múltiplos de 2 y en <numeros> tenemos los múltiplos de 3... Que va a haber en <soluciones>? Exacto, los múltiplos de 2 y 3 al mismo tiempo, es decir, los múltiplos de 6.
Ahora ya podemos responder a la pregunta, te la dejo a ti que seguro que te hace más ilusión dar con la respuesta correcta en vez de decírtelo yo.
Casi entiendo lo que me quieres decir , pero si nunca entra al if como me mostrara los multiplos de 6? aun no lo veo