Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Otra duda - For y while

Estas en el tema de Otra duda - For y while en el foro de C/C++ en Foros del Web. Hola, estaba viendo el codigo de otra persona para mostrar el primo numero 10.001 en C, (es uno de los ejercicios del projecto euler) y ...
  #1 (permalink)  
Antiguo 26/02/2013, 22:51
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Pregunta Otra duda - For y while

Hola, estaba viendo el codigo de otra persona para mostrar el primo numero 10.001 en C, (es uno de los ejercicios del projecto euler) y bueno, la cosa es que me surgio una duda, por que al cambiar el primer while por un for surge un cambio que no se por que sucede. Primero les dejare el codigo con el while.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5.     int j, count = 0, i = 2;
  6.        
  7.     while (count < 10000) {
  8.         i++;
  9.         for (j=2; j<=sqrt(i); j++)
  10.             if (!(i % j))
  11.                 break;
  12.             if (j > sqrt(i))
  13.                 count++;
  14.        
  15.     }
  16.    
  17.     printf("%d es el primo 10001\n", i);
  18.    
  19.     return 0;
  20. }

Y como veran, funciona perfect, pero si en vez del primer while lo cambio por un for con las siguientes condiciones ya me lanza otro numero primo, (no el numero 10.001):

Código C:
Ver original
  1. for (i=0; count < 10000; i++)

Segun yo en principio deberia hacer lo mismo, ya que pongo la misma condicion e incremento, pero no se en que se difiere el for con el while, o que hace que haga que hallan diferentes resultados con el cambio del for con el primer while.

Si alguien me lo aclara se lo agradeceria.

Saludos.
  #2 (permalink)  
Antiguo 27/02/2013, 03:30
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Otra duda - For y while

Cita:
for (i=0; count < 10000; i++)
Te has confundido, debería ser:

Cita:
for (count=0; count < 10000; count++)
Anda que no me ha pasado veces eso jeje.

EDITO:

Vale, no es por eso. No lo había leido bien.

Para que vaya bien tienes que sustituir el i = 0 por i = 2.

Última edición por amchacon; 27/02/2013 a las 06:25
  #3 (permalink)  
Antiguo 27/02/2013, 10:57
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Otra duda - For y while

Gracias por la respuesta, se me habia pasado eso, tambien descubri que a diferencia del while, el for primero ve si se cumple la condicion, despues se mete con el valor inicial y va incrementando este valor hasta que se cumpla la condicion, y en la ultima pasada igual se hace el incremento y despues se ve si se cumple la condicion, esto hace que el i incremente uno y me muestre como primo el valor 104.744 algo que no podria pasar en el while.

Saludos.

Pd: Si me equivoque en algo de mi conclusion corrijanme xD
  #4 (permalink)  
Antiguo 27/02/2013, 11:18
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Otra duda - For y while

Cita:
Iniciado por ElPatoGarrido Ver Mensaje
tambien descubri que a diferencia del while, el for primero ve si se cumple la condicion
Bueno el while también comprueba la condición antes de entrar por primera vez.
  #5 (permalink)  
Antiguo 05/03/2013, 10:19
 
Fecha de Ingreso: mayo-2012
Mensajes: 61
Antigüedad: 11 años, 11 meses
Puntos: 23
Respuesta: Otra duda - For y while

Cita:
Iniciado por ElPatoGarrido Ver Mensaje
Hola, estaba viendo el codigo de otra persona para mostrar el primo numero 10.001 en C, (es uno de los ejercicios del projecto euler) y bueno, la cosa es que me surgio una duda, por que al cambiar el primer while por un for surge un cambio que no se por que sucede. Primero les dejare el codigo con el while.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5.     int j, count = 0, i = 2;
  6.        
  7.     while (count < 10000) {
  8.         i++;
  9.         for (j=2; j<=sqrt(i); j++)
  10.             if (!(i % j))
  11.                 break;
  12.             if (j > sqrt(i))
  13.                 count++;
  14.        
  15.     }
  16.    
  17.     printf("%d es el primo 10001\n", i);
  18.    
  19.     return 0;
  20. }

Y como veran, funciona perfect, pero si en vez del primer while lo cambio por un for con las siguientes condiciones ya me lanza otro numero primo, (no el numero 10.001):

Código C:
Ver original
  1. for (i=0; count < 10000; i++)

Segun yo en principio deberia hacer lo mismo, ya que pongo la misma condicion e incremento, pero no se en que se difiere el for con el while, o que hace que haga que hallan diferentes resultados con el cambio del for con el primer while.

Si alguien me lo aclara se lo agradeceria.

Saludos.
No he visto todo tu programa pero en el código con el while la i empieza valiendo 2, y cuando lo cambias por el for lo igualas a 0, puede ser ese el problema de que te de números distintos.

Para cambiar el while por un for y que siga funcionando igual debería ser asi:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5.     int j, count = 0, i = 2;
  6.        
  7.     for(;count < 10000; i++){
  8.         for (j=2; j<=sqrt(i); j++)
  9.             if (!(i % j))
  10.                 break;
  11.             if (j > sqrt(i))
  12.                 count++;
  13.        
  14.     }
  15.    
  16.     printf("%d es el primo 10001\n", i);
  17.    
  18.     return 0;
  19. }

Saludos!

Etiquetas: ejercicio, funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.