E N D
// Ancient Population v1 // It follows latest GPL // Made by James Leigh, crinje@gnu.com // ancient.population [birth number] [unproductive number] [survival number] // - birth: sets the interval of births (5 means one son and one daughter were born in every five years) // - unproductive: sets the unproductive years. (50 means they did not give birth for the last 50 years in their lives) // - survival: sets the survival rates. 6 means 6 out of 10 new born babies survived. survival rate = 100 - mortality rate. #include <stdio.h> #include <string.h> int gen_calc(unsigned short int birth_interval, float survival_rate, unsigned short int unproductive_years); int init_table(void); int export2csv(unsigned short int birth_interval, float survival_rate, unsigned short int unproductive_years); unsigned long long int gen[16][1657]; unsigned short int g7_end; const int g1_start = 0, g1_end = 930, g2_start = 130, g2_end = 1042; const int g3_start = 235, g3_end = 1140, g4_start = 325, g4_end = 1235; const int g5_start = 395, g5_end = 1290, g6_start = 460, g6_end = 1422; const int g7_start = 622, g8_start = 687, g8_end = 1656; const int g9_start = 874, g9_end = 1651; const int g10_start = 1056, g11_start = 1173, g12_start = 1290, g13_start = 1407, g14_start = 1524, g15_start = 1641; const int flood = 1656, enoch = 987; int main(int argc, char *argv[]) { int temp, year; float survival_rate = 50; unsigned short int birth_interval = 10; unsigned short int unproductive_years = 50; printf("Calculating the ancient polulation before the great flood.\n\n"); if (argc != 1 && argc != 3 && argc != 5 && argc != 7) { printf("Wrong commandline arguement number.\nExiting programme.\n"); return 1; } if (argc == 1) { printf("No value input. Using default values...\n\n"); } else for (temp = argc - 2; temp >= 1; temp = temp - 2) { if ((strncmp(argv[temp], "birth", strlen(argv[temp]))) == 0) { printf("Taking birth interval value...\n"); birth_interval = atoi(argv[temp + 1]); } else if ((strncmp(argv[temp], "unproductive", strlen(argv[temp]))) == 0) { printf("Taking unproductive years value...\n"); unproductive_years = atoi(argv[temp + 1]); } else if ((strncmp(argv[temp], "survival", strlen(argv[temp]))) == 0) { printf("Taking survival rate value...\n"); survival_rate = atoi(argv[temp + 1]); } else { printf("Commandline arguement is not correct.\nExiting programme\n"); return 1; } } printf("\tAssumes that %d%c of new born babies survived.\n", (int)survival_rate, '%'); printf("\tAssumes that the parents gave birth to two kids in every %d years.\n", birth_interval); printf("\tAssumes that the last %d years in life, they did not produce any offspring.\n\n", unproductive_years); survival_rate = survival_rate / 100; g7_end = g7_start + 912 + birth_interval; printf("Initialising the generation table..."); init_table(); printf(" Done\n\n"); //Call special condition function gen_calc(birth_interval, survival_rate, unproductive_years); export2csv(birth_interval, survival_rate, unproductive_years); } int gen_calc(unsigned short int birth_interval, float survival_rate, unsigned short int unproductive_years) { unsigned int year, temp_mod, temp_year; printf("Calculating the population of 1st generation...\n"); printf("\tYear %d: Adam created...\n", g1_start); for (year = g1_start; year <= g1_end; year++) gen[1][year] = 2; printf("\tYear %d: Adam died...\n", g1_end); printf("Done.\n\n"); printf("Calculating the population of 2nd generation...\n"); printf("\tYear %d: Adam gave birth to Seth...\n", g2_start); for (year = g2_start, temp_mod = year - birth_interval; year <= (g1_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[2][year] = gen[2][year - 1] + gen[1][year]; else gen[2][year] = gen[2][year -1]; printf("\tYear %d: Adam stopped produing...\n", g1_end - unproductive_years); for (year = g1_end - unproductive_years + 1; year <= (g2_end - 1); year++) gen[2][year] = gen[2][year-1]; printf("\tYear %d: Seth died...\n", g2_end); for (year = g2_end, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[2][year] = gen[2][year - 1] - gen[2][year - (g2_end - g2_start)] + gen[2][year - (g2_end - g2_start) - birth_interval]; else gen[2][year] = gen[2][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 3rd generation...\n"); printf("\tYear %d: Seth gave birth to Enos...\n", g3_start); for (year = g3_start, temp_mod = year - birth_interval; year <= (g2_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[3][year] = gen[3][year - 1] + gen[2][year - (g3_start - g2_start)] * survival_rate; else gen[3][year] = gen[3][year - 1]; printf("\tYear %d: Adam's last son began producing...\n", g1_end - unproductive_years + g3_start - g2_start); printf("\tYear %d: Seth stopped producing...\n", g2_end - unproductive_years); for (year = g2_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g2_start; year <= g2_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[3][year] = gen[3][year - 1] + (gen[2][year - (g3_start - g2_start)] - gen[2][year - temp_year]) * survival_rate; else gen[3][year] = gen[3][year - 1]; for (year = g2_end, temp_mod = year - birth_interval; year <= g3_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[3][year] = gen[3][year - 1] + (gen[2][year - (g3_start - g2_start)] - gen[2][year - temp_year] + gen[2][year - (g2_end - g2_start)]) * survival_rate; else gen[3][year] = gen[3][year - 1]; printf("\tYear 1140: Enos died...\n"); for (year = g3_end, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[3][year] = gen[3][year - 1] + (gen[2][year - (g3_start - g2_start)] - gen[2][year - temp_year] + gen[2][year - (g2_end - g2_start)]) * survival_rate - (gen[3][year - (g3_end - g3_start)] - gen[3][year - (g3_end - g3_start) - birth_interval]); else gen[3][year] = gen[3][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 4th generation...\n"); printf("\tYear %d: Enos gave birth to Cainan...\n", g4_start); for (year = g4_start, temp_mod = year - birth_interval; year <= (g3_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[4][year] = gen[4][year - 1] + gen[3][year - (g4_start - g3_start)] * survival_rate; else gen[4][year] = gen[4][year - 1]; printf("\tYear %d: Enos stopped producing...\n", g3_end - unproductive_years); for (year = g3_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g3_start; year <= g3_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[4][year] = gen[4][year - 1] + (gen[3][year - (g4_start - g3_start)] - gen[3][year - temp_year]) * survival_rate; else gen[4][year] = gen[4][year - 1]; for (year = g3_end, temp_mod = year - birth_interval; year <= g4_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[4][year] = gen[4][year - 1] + (gen[3][year - (g4_start - g3_start)] - gen[3][year - temp_year] + gen[3][year - (g3_end - g3_start)]) * survival_rate; else gen[4][year] = gen[4][year - 1]; printf("\tYear %d: Cainan died...\n", g4_end); for (year = g4_end, temp_mod = year - temp_mod; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[4][year] = gen[4][year - 1] + (gen[3][year - (g4_start - g3_start)] - gen[3][year - temp_year] + gen[3][year - (g3_end - g3_start)]) * survival_rate - (gen[4][year - (g3_end - g3_start)] - gen[4][year - (g3_end - g3_start) - birth_interval]); else gen[4][year] = gen[4][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 5th generation...\n"); printf("\tYear %d: Cainan gave birth to Mahalaleel...\n", g5_start); for (year = g5_start, temp_mod = year - birth_interval; year <= (g4_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[5][year] = gen[5][year - 1] + gen[4][year - (g5_start - g4_start)] * survival_rate; else gen[5][year] = gen[5][year - 1]; printf("\tYear %d: Cainan stopped producing...\n", g4_end - unproductive_years); for (year = g4_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g4_start; year <= g4_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[5][year] = gen[5][year - 1] + (gen[4][year - (g5_start - g4_start)] - gen[4][year - temp_year]) * survival_rate; else gen[5][year] = gen[5][year - 1]; for (year = g4_end, temp_mod = year - birth_interval; year <= g5_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[5][year] = gen[5][year - 1] + (gen[4][year - (g5_start - g4_start)] - gen[4][year - temp_year] + gen[4][year - (g4_end - g4_start)]) * survival_rate; else gen[5][year] = gen[5][year - 1]; printf("\tYear %d: Mahalaleel died...\n", g5_end); for (year = g5_end, temp_mod = year - temp_mod; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[5][year] = gen[5][year - 1] + (gen[4][year - (g5_start - g4_start)] - gen[4][year - temp_year] + gen[4][year - (g4_end - g4_start)]) * survival_rate - (gen[5][year - (g4_end - g4_start)] - gen[5][year - (g4_end - g4_start) - birth_interval]); else gen[5][year] = gen[5][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 6th generation...\n"); printf("\tYear %d: Mahalaleel gave birth to Jared...\n", g6_start); for (year = g6_start, temp_mod = year - birth_interval; year <= (g5_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[6][year] = gen[6][year - 1] + gen[5][year - (g6_start - g5_start)] * survival_rate; else gen[6][year] = gen[6][year - 1]; printf("\tYear %d: Mahalaleel stopped producing...\n", g5_end - unproductive_years); for (year = g5_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g5_start; year <= g5_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[6][year] = gen[6][year - 1] + (gen[5][year - (g6_start - g5_start)] - gen[5][year - temp_year]) * survival_rate; else gen[6][year] = gen[6][year - 1]; for (year = g5_end, temp_mod = year - birth_interval; year <= g6_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[6][year] = gen[6][year - 1] + (gen[5][year - (g6_start - g5_start)] - gen[5][year - temp_year] + gen[5][year - (g5_end - g5_start)]) * survival_rate; else gen[6][year] = gen[6][year - 1]; printf("\tYear %d: Jared died...\n", g6_end); for (year = g6_end, temp_mod = year - temp_mod; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[6][year] = gen[6][year - 1] + (gen[5][year - (g6_start - g5_start)] - gen[5][year - temp_year] + gen[5][year - (g5_end - g5_start)]) * survival_rate - (gen[6][year - (g5_end - g5_start)] - gen[6][year - (g5_end - g5_start) - birth_interval]); else gen[6][year] = gen[6][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 7th generation...\n"); printf("\tYear %d: Jared gave birth to Enoch...\n", g7_start); for (year = g7_start, temp_mod = year - birth_interval; year <= (g6_end - unproductive_years); year++) { if (((year - temp_mod) % birth_interval) == 0) gen[7][year] = gen[7][year - 1] + gen[6][year - (g7_start - g6_start)] * survival_rate; else gen[7][year] = gen[7][year - 1]; if (year == enoch) { gen[7][year] = gen[7][year] - 2; printf("\tYear %d: Enoch was taken up to Heaven...\n", enoch); } } printf("\tYear %d: Jared stopped producing...\n", g6_end - unproductive_years); for (year = g6_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g6_start; year <= g6_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[7][year] = gen[7][year - 1] + (gen[6][year - (g7_start - g6_start)] - gen[6][year - temp_year]) * survival_rate; else gen[7][year] = gen[7][year - 1]; for (year = g6_end, temp_mod = year - birth_interval; year <= g7_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[7][year] = gen[7][year - 1] + (gen[6][year - (g7_start - g6_start)] - gen[6][year - temp_year] + gen[6][year - (g6_end - g6_start)]) * survival_rate; else gen[7][year] = gen[7][year - 1]; printf("\tYear %d: Second son of Jared died (assumption)...\n", g7_end); for (year = g7_end, temp_mod = year - temp_mod; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[7][year] = gen[7][year - 1] + (gen[6][year - (g7_start - g6_start)] - gen[6][year - temp_year] + gen[6][year - (g6_end - g6_start)]) * survival_rate - (gen[7][year - (g6_end - g6_start)] - gen[7][year - (g6_end - g6_start) - birth_interval]); else gen[7][year] = gen[7][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 8th generation...\n"); printf("\tYear %d: Enoch gave birth to Methuselah...\n", g8_start); for (year = g8_start, temp_mod = year - birth_interval; year <= (g7_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[8][year] = gen[8][year - 1] + gen[7][year - (g8_start - g7_start)] * survival_rate; else gen[8][year] = gen[8][year - 1]; printf("\tYear %d: Jared's second son stopped producing(assumption)...\n", g7_end - unproductive_years); for (year = g7_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g7_start; year <= g7_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[8][year] = gen[8][year - 1] + (gen[7][year - (g8_start - g7_start)] - gen[7][year - temp_year]) * survival_rate; else gen[8][year] = gen[8][year - 1]; for (year = g7_end, temp_mod = year - birth_interval; year <= g8_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[8][year] = gen[8][year - 1] + (gen[7][year - (g8_start - g7_start)] - gen[7][year - temp_year] + gen[7][year - (g7_end - g7_start)]) * survival_rate; else gen[8][year] = gen[8][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 9th generation...\n"); printf("\tYear %d: Methuselah gave birth to Lamech...\n", g9_start); for (year = g9_start, temp_mod = year - birth_interval; year <= (g8_end - unproductive_years); year++) if (((year - temp_mod) % birth_interval) == 0) gen[9][year] = gen[9][year - 1] + gen[8][year - (g9_start - g8_start)] * survival_rate; else gen[9][year] = gen[9][year - 1]; printf("\tYear %d: Methuselah stopped producing...\n", g8_end - unproductive_years); for (year = g8_end - unproductive_years + 1, temp_mod = year - birth_interval, temp_year = year - g8_start; year <= g8_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[9][year] = gen[9][year - 1] + (gen[8][year - (g9_start - g8_start)] - gen[8][year - temp_year]) * survival_rate; else gen[9][year] = gen[9][year - 1]; for (year = g8_end, temp_mod = year - birth_interval; year <= g9_end - 1; year++) if (((year - temp_mod) % birth_interval) == 0) gen[9][year] = gen[9][year - 1] + (gen[8][year - (g9_start - g8_start)] - gen[8][year - temp_year] + gen[8][year - (g8_end - g8_start)]) * survival_rate; else gen[9][year] = gen[9][year - 1]; printf("\tYear %d: Lamech died...\n", g9_end); for (year = g9_end, temp_mod = year - temp_mod; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[9][year] = gen[9][year - 1] + (gen[8][year - (g9_start - g8_start)] - gen[8][year - temp_year] + gen[8][year - (g8_end - g8_start)]) * survival_rate - (gen[9][year - (g8_end - g8_start)] - gen[9][year - (g8_end - g8_start) - birth_interval]); else gen[9][year] = gen[9][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 10th generation...\n"); printf("\tYear %d: Lamech gave birth to Noah...\n", g10_start); for (year = g10_start, temp_mod = year - birth_interval; year <= flood; year++) { if (((year - temp_mod) % birth_interval) == 0) gen[10][year] = gen[10][year - 1] + gen[9][year - (g10_start - g9_start)] * survival_rate; else gen[10][year] = gen[10][year - 1]; if (year == g10_start + 500) { gen[10][year] = gen[10][year] + 3; printf("\tYear %d: Noah gave birth to his three sons...\n", g10_start + 500); } } printf("Done.\n\n"); printf("Calculating the population of 11th generation...\n"); printf("\tYear %d: Eldest one of 11th generation gave his first birth to his kid(assumption)...\n", g11_start); for (year = g11_start, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[11][year] = gen[11][year - 1] + gen[10][year - (g11_start - g10_start)] * survival_rate; else gen[11][year] = gen[11][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 12th generation...\n"); printf("\tYear %d: Eldest one of 12th generation gave his first birth to his kid(assumption)...\n", g12_start); for (year = g12_start, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[12][year] = gen[12][year - 1] + gen[11][year - (g12_start - g11_start)] * survival_rate; else gen[12][year] = gen[12][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 13th generation...\n"); printf("\tYear %d: Eldest one of 13th generation gave his first birth to his kid(assumption)...\n", g13_start); for (year = g13_start, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[13][year] = gen[13][year - 1] + gen[12][year - (g13_start - g12_start)] * survival_rate; else gen[13][year] = gen[13][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 14th generation...\n"); printf("\tYear %d: Eldest one of 14th generation gave his first birth to his kid(assumption)...\n", g14_start); for (year = g14_start, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[14][year] = gen[14][year - 1] + gen[13][year - (g14_start - g13_start)] * survival_rate; else gen[14][year] = gen[14][year - 1]; printf("Done.\n\n"); printf("Calculating the population of 15th generation...\n"); printf("\tYear %d: Eldest one of 15th generation gave his first birth to his kid(assumption)...\n", g15_start); for (year = g15_start, temp_mod = year - birth_interval; year <= flood; year++) if (((year - temp_mod) % birth_interval) == 0) gen[15][year] = gen[15][year - 1] + gen[14][year - (g15_start - g14_start)] * survival_rate; else gen[15][year] = gen[15][year - 1]; printf("Done.\n\n"); printf("Setting the Flood year..."); for (year = 1; year <= 15; year++) gen[year][flood] = 0; gen[10][flood] = 2; gen[11][flood] = 6; printf("Done.\n\n"); printf("Adding up the generations..."); for (year = 0; year <= flood; year++) for (temp_mod = 1; temp_mod <= 15; temp_mod++) gen[0][year] = gen[0][year] + gen[temp_mod][year]; printf("Done.\n\n"); return 0; } int init_table(void) { int temp, year; for (temp = 0; temp <= 15; temp++) for (year = 0; year <= 1656; year++) gen[temp][year] = 0; return 0; } int export2csv(unsigned short int birth_interval, float survival_rate, unsigned short int unproductive_years) { FILE *fp; unsigned short int year, temp; fp = fopen("Ancient.population.csv", "w"); fprintf(fp, "Ancient Population Calculation Result by James Leigh\n"); fprintf(fp, "Assumes that %d%c of new born babies survived.\n", (int)(survival_rate * 100), '%'); fprintf(fp, "Assumes that the parents gave birth to two kids in every %d years.\n", birth_interval); fprintf(fp, "Assumes that they did not produce any offsprings for the last %d years in life.\n\n", unproductive_years); fprintf(fp, "Year, Total"); for (temp = 1; temp <= 15; temp++) fprintf(fp, ", Gen %d", temp); fprintf(fp, "\n"); for (year = 0; year <= flood; year++) { fprintf(fp, "%d", year); for (temp = 0; temp <= 15; temp++) fprintf(fp, ", %lld", gen[temp][year]); fprintf(fp, "\n"); } fclose(fp); return 0; }