#include #include #define POWER_RULE (double)6.0 DisplayParameters(double temps,double distance,double vitesse); int count,limit_count; FILE *file; main() { double distance_terre_lune = 384402000; /* en metres */ double vitesse_eloignement = 0.1; /* en metres par annee */ double incr_t = 1000; /* en annees */ double K,temps,distance,incr_dist; K = pow(distance_terre_lune, POWER_RULE)*vitesse_eloignement; printf("K: %e\n",K); temps = 0; distance = distance_terre_lune; file = fopen("moon.dat","w"); count = 1; limit_count = 1000000 / incr_t; do { incr_dist = vitesse_eloignement * incr_t; distance -= incr_dist; vitesse_eloignement = K / pow(distance, POWER_RULE); temps -= incr_t; DisplayParameters(temps,distance,vitesse_eloignement); if (temps == -500000000) { incr_t = incr_t / 10; limit_count = 10000 / incr_t; count = 1; break; } } while(1); do { incr_dist = vitesse_eloignement * incr_t; distance -= incr_dist; vitesse_eloignement = K / pow(distance, POWER_RULE); temps -= incr_t; DisplayParameters(temps,distance,vitesse_eloignement); if (temps == -548500000) { incr_t = incr_t / 10; limit_count = 100 / incr_t; count = 1; break; } } while(1); do { incr_dist = vitesse_eloignement * incr_t; distance -= incr_dist; vitesse_eloignement = K / pow(distance, POWER_RULE); temps -= incr_t; DisplayParameters(temps,distance,vitesse_eloignement); if (temps == -548572000) { incr_t = 1; break; } } while(1); do { incr_dist = vitesse_eloignement * incr_t; distance -= incr_dist; vitesse_eloignement = K / pow(distance, POWER_RULE); temps -= incr_t; fprintf(stderr,"Temps: %8.0f distance: %10.0f vitesse: %9.6f\n",temps,distance,vitesse_eloignement); fprintf(file,"Temps: %8.0f distance: %10.0f vitesse: %9.6f\n",temps,distance,vitesse_eloignement); if (distance < 0) break; } while(1); fclose(file); } DisplayParameters(double temps,double distance,double vitesse) { if (count++ >= limit_count) { fprintf(stderr,"Temps: %8.0f distance: %10.0f vitesse: %9.6f\n",temps,distance,vitesse); fprintf(file,"Temps: %8.0f distance: %10.0f vitesse: %9.6f\n",temps,distance,vitesse); count = 1; } }