I have looked this over and am wondering where my math issue is. I believe that it should be calculating correctly, but the floats do not round up, .75 to 1 to add to the count for births/deaths. I am a novice to c. Here is the code I have so far:
float births(long popul);
float deaths(long pop);
long yearAdjustment(long pop);
int threshold(long population, long end);
int main(void){
long begin = 0;
long end = 0;
int year = 0;
float input = 0.0;
do{
// TODO: Prompt for start size
input = get_float("Beginning population: ");
begin = (long) roundf(input);
} while (begin < 9);
do{
// TODO: Prompt for end size
input = get_float("Ending population: ");
end = (long) roundf(input);
} while (end < begin || end <= 0);
if(begin == end)
{
year = 0;
} else
{
year = threshold(begin, end);
}
// TODO: Print number of years
printf("Years: %i\n", year);
}
float births(long pop){
float tmp = pop / 3;
return tmp;
}
float deaths(long pop){
float tmp = pop / 4;
return tmp;
}
long yearAdjustment(long pop){
long tmp = pop + ((long) roundf(births(pop) - deaths(pop)));
return tmp;
}
int threshold(long population, long end){
int years = 0;
long tmp = 0;
// TODO: Calculate number of years until we reach threshold
while (tmp < end){
tmp += yearAdjustment(population);
years++;
}
return years;
}
I'm using longs because the numbers may start in the thousands. The floats are for a little precision, more rounding, in the divisions in births/deaths. Essentially it should increment by roughly 1/10/100... respectively of single/tens/hundreds... input. 1.25 on an input of 9. That is where the decimal is important. Technically every 4 years I gain 1 extra. Say 18 as an end should be 8 years.
Thank you.