/* fire_3.c - step 3 * introduce inner loop, trials */ #include #include #define UNBURNT 0 #define SMOLDERING 1 #define BURNING 2 #define BURNT 3 #define true 1 #define false 0 typedef int boolean; extern void seed_by_time(int); extern int ** allocate_forest(int); extern void initialize_forest(int, int **); extern double get_percent_burned(int, int **); extern void delete_forest(int, int **); extern void light_tree(int, int **,int,int); extern boolean forest_is_burning(int, int **); extern void forest_burns(int, int **,double); extern void burn_until_out(int,int **,double,int,int); extern void print_forest(int, int **); int main() { // initial conditions and variable definitions int forest_size=20; double prob_spread=0.5; int **forest; int i; double percent_burned; int i_trial; int n_trials=100; // setup problem seed_by_time(0); forest=allocate_forest(forest_size); //for a number of trials, calculate average //percent burn for (i_trial=0; i_trial < n_trials; i_trial++) { //burn until fire is gone burn_until_out(forest_size,forest,prob_spread,10,10); percent_burned+=get_percent_burned(forest_size,forest); } percent_burned/=n_trials; // print output and clean up printf("Average percent burned = %lf\n",percent_burned); delete_forest(forest_size,forest); } void seed_by_time(int offset) { time_t the_time; time(&the_time); srand((int)the_time+offset); } void burn_until_out(int forest_size,int ** forest, double prob_spread, int start_i, int start_j) { initialize_forest(forest_size,forest); light_tree(forest_size,forest,start_i,start_j); // burn until fire is gone while(forest_is_burning(forest_size,forest)) { forest_burns(forest_size,forest,prob_spread); } } double get_percent_burned(int forest_size,int ** forest) { int i,j; int total = forest_size*forest_size-1; int sum=0; // calculate pecrent burned sum=0; for (i=0;i