2016-02-15 2 views
-3

Dans une population, le taux de natalité est le pourcentage d'augmentation de la population dû aux naissances, et le taux de mortalité est la diminution en pourcentage de la population due aux décès. Écrire un programme qui demande les éléments suivants:Calcul d'une nouvelle population

  • La taille de départ d'une population (minimum 2) (Prompt taille Entrez à partir :)
  • Le taux de natalité annuel (rapide Entrez le taux de natalité annuel :)
  • le taux de mortalité annuel (Prompt Entrez le taux de mortalité annuel :)
  • le nombre d'années à afficher (minimum 1) (Prompt Enter années pour afficher :)

le programme devrait alors afficher la population de départ et la projection popu lation à la fin de chaque année. Il devrait utiliser une fonction qui calcule et renvoie la nouvelle taille projetée de la population après une année. La formule est

N = P(1 + B)(1 - D) 

N est la nouvelle taille de la population, P est la taille de la population précédente, B est le taux de natalité et D est le taux de mortalité. Le taux annuel de natalité et le taux de mortalité sont les nombres typiques de naissances et de décès dans une année pour 1000 personnes, exprimés sous forme décimale. Par exemple, s'il y a normalement environ 32 naissances et 26 décès pour 1000 habitants dans une population donnée, le taux de natalité serait de 0,032 et le taux de mortalité de 0,026.

Voici mon code; J'ai du mal à comprendre comment faire le calcul.

#include "stdafx.h" // Defines IDE required "pre-compiled" definition files 
#include <iomanip> 
#include <iostream> 

using namespace std 

int main() 
{ 
    double startPop, // To hold the starting population. 
    float birthRate, // To hold the birth rate. 
     float deathRate; // To hold the death rate. 
    int numYears; // To hold the number of years to track population changes. 

        // Input and validate starting population 
    cout << "This program calculates population change.\n"; 
    cout << "Enter the starting population size: "; 
    cin >> startPop; 
    while (startPop < 2.0) 
    { 
     cout << "Starting population must be 2 or more. Please re-enter: "; 
     cin >> startPop; 
    } 

    // Input and validate annual birth and death rates 
    cout << "Enter the annual birth rate (as % of current population): "; 
    cin >> birthRate; 
    while (birthRate < 0) 
    { 
     cout << "Birth rate percent cannot be negative. Please re-enter: "; 
     cin >> birthRate; 
    } 

    birthRate = birthRate/100; // Convert from % to decimal. 

    cout << "Enter the annual death rate (as % of current population): "; 
    cin >> deathRate; 
    while (deathRate < 0) 
    { 
     cout << "Death rate percent cannot be negative. Please re-enter: "; 
     cin >> deathRate; 
    } 

    deathRate = deathRate/100; // Convert from % to decimal. 

    cout << "For how many years do you wish to view population changes? "; 
    cin >> numYears; 
    while (numYears < 1) 
    { 
     cout << "Years must be one or more. Please re-enter: "; 
     cin >> numYears; 

     population = projectedNewSize(populationStartingSize, annualBirthRate, annualDeathRate); 
     cout << population << endl; 
     populationStartingSize = population; 

    } 

    printPopulations(startPop, birthRate, deathRate, numYears); 
    return 0; 
} // End of main function 
+0

Votre devoir vous a donné toutes les informations dont vous avez besoin pour l'implémenter. Plus précisément, la formule est "N = P (1 + B) (1 - D)". Traduire une formule mathématique en code informatique est l'une des tâches les plus faciles de la programmation informatique. Votre question est "J'ai du mal à trouver comment faire le calcul." Eh bien, c'est comme ça que vous faites le calcul. C'est la formule. Quelle partie de "N = P (1 + B) (1 - D)" vous êtes incapable de comprendre? –

Répondre

1

Vous pouvez le faire récursive ou en utilisant une boucle for simple.

E.g. Dites si le numYears = 10, vous voulez faire une boucle 10 fois.

Créez une variable temporaire avant votre boucle for et affectez-lui la valeur de votre startPop, par ex. endPop. Puis, en commençant par une taille de population initiale de endPop, et le taux de mortalité de deathRate ainsi que le taux de naissance de birthRate, vous calculez la taille de la population après un an.

Après avoir calculé la population après un an dans la première boucle, vous mettez à jour endPop avec la nouvelle valeur. Par la suite, dans la deuxième boucle, vous utilisez à nouveau endPop comme nouvelle taille de population de départ et le cycle se répète jusqu'à la fin de votre boucle for, c'est-à-dire une fois que 10 ans se sont écoulés.

Vous n'avez pas déclaré la variable population dans l'extrait de code ci-dessus avant de l'utiliser.

Mise en œuvre:

while (numYears < 1) 
{ 
    cout << "Years must be one or more. Please re-enter: "; 
    cin >> numYears; 
} 

double population = populationStartingSize; 

for (int i = 0; i < numYears; i++) { 
    population = projectedNewSize(population, annualBirthRate, annualDeathRate); 
    cout << "After " << i+1 << "years: " << population << endl; 
    } 
} 

Prenez note qu'il ya risque de sur- et sous-flux si votre numéro est trop petit ou trop grand.

Mise en œuvre:

double projectedNewSize(double populationStartingSize, float annualBirthRate, float annualDeathRate) { 
    return populationStartingSize * (1 + annualBirthRate) * (1 - annualDeathRate); 
} 

Pour la lecture de numYears, vous pourriez envisager d'utiliser une boucle do-while,: p.