Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/03/2013, 10:19
pfranco
 
Fecha de Ingreso: mayo-2012
Mensajes: 61
Antigüedad: 12 años
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!