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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa C++ Tengo una duda con respecto a este programa.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Programa C++ Tengo una duda con respecto a este programa.  (Leído 1,713 veces)
Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #10 en: 22 Noviembre 2018, 01:33 am »

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:
Código
  1. iterar:
  2. cout << "Se repite la iteracion" << endl;
  3. for (j = 1; j <= 100; j = j + 1){
  4.    if (valores[i] == numeros[j]){
  5.        solucion[z] = valores[i];
  6.        z = z + 1;
  7.    }
  8. }
  9. if (i <= 100){
  10.    i = i + 1;
  11.    goto iterar;
  12. }

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é? :huh: 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>? :silbar: 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 :(


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #11 en: 22 Noviembre 2018, 01:48 am »

Citar
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>? :silbar: Exacto, los múltiplos de 2 y 3 al mismo tiempo, es decir, los múltiplos de 6.

Aquí lo tienes, es decir, sí que va a entrar en el <if>. Simplemente que el proceso explicado brevemente sería:
<i = 1> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 1> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 2>
<i = 2> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 2> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 3>
<i = 3> <j = 1> No entra.
EXCEPCIÓN: <i = 3> <j = 2> ENTRA. Entonces <z = 1> solucion[1] = valores[3] = 6
Se repite el <for> hasta el último valor de j (ya no entra más veces).
<i = 3> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 4>. Entonces valores[4] = 8 (no va a entrar)
Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 5>. Entonces valores[5] = 10 (no va a entrar)

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 6>. Entonces valores[6] = 12
Ahora si va a entrar cuando j sea 4 ya que numeros[4] = 12.

Es decir el programa coge la posición <i> de <valores> y la compara con todas las posiciones de <números>, si coincide alguno lo mete en <solucion> y cuando lleg al final de <numeros> incrementa <i>; entonces ahora compara la siguiente posición de <valores> con todas las posiciones de <numeros> y si coincide alguno lo mete en <solucion>.
Es decir, que el programa compara todos los elementos de <numeros> con cada elemento de <valores>. Al final lo que hace es comparar los dos vectores enteros.

PD: Cuando digo que vuelve a entrar en el <for>, por lo que he explicado antes, j vuelve a empezar desde 1.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #12 en: 22 Noviembre 2018, 02:42 am »

Aquí lo tienes, es decir, sí que va a entrar en el <if>. Simplemente que el proceso explicado brevemente sería:
<i = 1> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 1> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 2>
<i = 2> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 2> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 3>
<i = 3> <j = 1> No entra.
EXCEPCIÓN: <i = 3> <j = 2> ENTRA. Entonces <z = 1> solucion[1] = valores[3] = 6
Se repite el <for> hasta el último valor de j (ya no entra más veces).
<i = 3> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 4>. Entonces valores[4] = 8 (no va a entrar)
Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 5>. Entonces valores[5] = 10 (no va a entrar)

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 6>. Entonces valores[6] = 12
Ahora si va a entrar cuando j sea 4 ya que numeros[4] = 12.

Es decir el programa coge la posición <i> de <valores> y la compara con todas las posiciones de <números>, si coincide alguno lo mete en <solucion> y cuando lleg al final de <numeros> incrementa <i>; entonces ahora compara la siguiente posición de <valores> con todas las posiciones de <numeros> y si coincide alguno lo mete en <solucion>.
Es decir, que el programa compara todos los elementos de <numeros> con cada elemento de <valores>. Al final lo que hace es comparar los dos vectores enteros.

PD: Cuando digo que vuelve a entrar en el <for>, por lo que he explicado antes, j vuelve a empezar desde 1.

Vale osea que entra en todos los multiplos de 6? y por eso estan  guardados en solucion?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #13 en: 22 Noviembre 2018, 02:48 am »

Claro porque lo que hace es guardar los elementos que están tanto en <valores> como en <numeros> y en <valores> tienes los múltiplos de 2 y en <numeros> los múltiplos de 3. Y los números que están en ambos son entonces múltiplos de 2 y de 3 y eso por definición son los múltiplos de 6.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #14 en: 22 Noviembre 2018, 03:15 am »

Claro porque lo que hace es guardar los elementos que están tanto en <valores> como en <numeros> y en <valores> tienes los múltiplos de 2 y en <numeros> los múltiplos de 3. Y los números que están en ambos son entonces múltiplos de 2 y de 3 y eso por definición son los múltiplos de 6.

Muchisimas gracias siempre es buena contar con tus explicaciones precisas , por cierto no sabes de alguna pagina  que pueda encontrar programas asi , que esten escritos y pidan determinar para que sirve el programa , corriendolo en frio o te pidan determinar algun valor en especifico como este que me pedia hallar solucion[3]?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #15 en: 22 Noviembre 2018, 03:21 am »

Lo siento pero no, más que nada porque nunca me he parado a buscar códigos ajenos ya que no es algo que me guste mucho si no es para ayudar a otra persona. Pero si no encuentras nada siempre puedes coger cualquier código de internet y hacerte tú mismo la pregunta o intentar comprender su funcionamiento sin ejecutarlo y después lo ejecutas para ver si estabas en lo correcto.

En este mismo foro en otros posts he visto que hay algunos códigos que trabajan con temas matemáticos que al fin y al cabo creo que son los mejores para hacer lo que quieres hacer ya que la dificultad no está en las instrucciones que se usan sino en ver por qué se están usando.

PD: Yo mismo he escrito algunos trozos de código para resolver algunos de estos posts que te comento. Si te interesa el programa entero o que te mande alguno de los programas que tengo yo puedes decírmelo por un mensaje privado y te lo puedo mandar si te sirve de ayuda.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Programa C++ Tengo una duda con respecto a este programa.
« Respuesta #16 en: 22 Noviembre 2018, 03:29 am »

Lo siento pero no, más que nada porque nunca me he parado a buscar códigos ajenos ya que no es algo que me guste mucho si no es para ayudar a otra persona. Pero si no encuentras nada siempre puedes coger cualquier código de internet y hacerte tú mismo la pregunta o intentar comprender su funcionamiento sin ejecutarlo y después lo ejecutas para ver si estabas en lo correcto.

En este mismo foro en otros posts he visto que hay algunos códigos que trabajan con temas matemáticos que al fin y al cabo creo que son los mejores para hacer lo que quieres hacer ya que la dificultad no está en las instrucciones que se usan sino en ver por qué se están usando.

PD: Yo mismo he escrito algunos trozos de código para resolver algunos de estos posts que te comento. Si te interesa el programa entero o que te mande alguno de los programas que tengo yo puedes decírmelo por un mensaje privado y te lo puedo mandar si te sirve de ayuda.

Vale muchas gracias te mande un mensaje privado
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
tengo un problema con este programa.
Programación C/C++
Danyel_Casvill 9 2,585 Último mensaje 12 Noviembre 2010, 22:29 pm
por flony
ayuda con este programa, tengo un error logico creo
Programación C/C++
TaLaP0 XoR BiT 2 1,249 Último mensaje 3 Diciembre 2012, 04:06 am
por TaLaP0 XoR BiT
tengo un problema con este programa en c++
Programación C/C++
mikael2018 1 799 Último mensaje 29 Octubre 2014, 15:35 pm
por eferion
Por fa ayuda con este programa en c ++ que no tengo idea de como hacerlo
Programación C/C++
cefagure 1 1,213 Último mensaje 28 Mayo 2015, 20:24 pm
por iUDEX
Instalar este programa y no tengo ni idea en Linux « 1 2 3 »
GNU/Linux
Meta 28 7,439 Último mensaje 5 Diciembre 2016, 14:06 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines