Transient Population Populations are effected by the birth and death rate, as well as the number of people who move in and out each year.

LANGUAGE: C++

CHALLENGE:

Transient Population
Populations are effected by the birth and death rate, as well as the number of people who move in and out each year.

The birth rate is the percentage increase of the population due to births and the death rate is the percentage decrease of the population due to deaths.

Write a program that displays the size of a population for any number of years.

The program should ask for the following data:

  • The starting size of a population P
  • The annual birth rate (as a percentage of the population expressed as a fraction in decimal form)B
  • The annual death rate (as a percentage of the population expressed as a fraction in decimal form)D
  • The average annual number of people who have arrived A
  • The average annual number of people who have moved away M
  • The number of years to display nYears

Write a function that calculates the size of the population after a year.

To calculate the new population after one year, this function should use the formula N = P + BP – DP + A – M where N is the new population size, P is the previous population size, and B, D, A and M are as defined above.

The function should return the value computed for N and should receive the values of P, B, D, A and M as parameters.

Prompts And Output Labels. The program first displays the message “This program calculates population change.” on a line by itself, followed by these prompts for the inputs described above:

  • “Enter the starting population size: “
  • “Enter the annual birth rate (as % of current population): “
  • “Enter the annual death rate (as % of current population): “
  • “How many individuals move into the area each year? “;
  • “How many individuals leave the area each year? “;
  • “For how many years do you wish to view population changes? “

The output of the program starts with a line:
Starting population: P (where P is the starting population (surprise)), and then continues with a separate line for each year, each line being of the form: Population at the end of year ||Y is P. (where Y is the year number (1,2,3,…) starting with 1, and where P is the population calculated for that year).
Input Validation. The program should validate all data read. None of the data should be negative, the number of years should not be less than 1 and the initial population should not be less than 2. If an invalid value is read, the program should print an error-specific message on a line by itself, followed by the directive “Please re-enter:” and then input another value– until a valid value is entered. The error specific messages are: “Starting population must be 2 or more.”, “Birth rate percent cannot be negative.”, “Death rate percent cannot be negative.”, “Arrivals cannot be negative.”, “Departures cannot be negative.”, and “Years must be one or more.”.

SOLUTION:


#include
using namespace std;

double populationSize(double P, double B, double D, double A, double M);

int main() {
	double populationStart;
	double annualB;
	double annualD;
	double peopleA;
	double peopleM;
	int nYears;
	
	cout<<"This program calculates population change.\n";
	cout<<"Enter the starting population size: "; cin>>populationStart;
	
	if(populationStart < 2) {
		cout<<"\nStarting population must be 2 or more.";
		cout<<"\nPlease re-enter:"; cin>>populationStart;
	}
	
	cout<<"Enter the annual birth rate (as % of current population):"; cin>>annualB;
	
	if(annualB < 0) {
		cout<<"\nBirth rate percent cannot be negative.";
		cout<<"\nPlease re-enter:"; cin>>annualB;
	}
	
	cout<<" Enter the annual death rate (as % of current population):"; cin>>annualD;
	
	if(annualD < 0) {
		cout<<"\nDeath rate percent cannot be negative.";
		cout<<"\nPlease re-enter:"; cin>>annualD;
	}
	
	cout<<" How many individuals move into the area each year? "; cin>>peopleA;
	
	if(peopleA < 0) {
		cout<<"\nArrivals cannot be negative.";
		cout<<"\nPlease re-enter:"; cin>>peopleA;
	}
	
	cout<<"How many individuals leave the area each year? "; cin>>peopleM;
	
	if(peopleM < 0) {
		cout<<"\nDepartures cannot be negative.";
		cout<<"\nPlease re-enter:"; cin>>peopleM;
	}
	
	cout<<"For how many years do you wish to view population changes? \n"; cin>>nYears;
	
	if(nYears < 1) {
		cout<<"\nYears must be one or more.";
		cout<<"\nPlease re-enter:"; cin>>nYears;
	}
	
	cout<<"\nStarting population: "<<populationStart<<"\n";
	
	for(int y = 1; y < nYears; y ) {
		double result = populationSize(populationStart, annualB, annualD, peopleA, peopleM);
		cout<<"\n";
		cout<<"Population at the end of year "<<y<<" is"<<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span><result;
	}
	
	return 0;
}

double populationSize(double P, double B, double D, double A, double M) {
	double n;
	n = P (B * P) – (D * P) A – M;
	return n;
}