2 votes

Projet C++ Cafards... La fonction d'extermination est défectueuse

Je suis presque fait avec ce programme, mais quelque chose ne va pas dans main. Voici les instructions du projet :

Devoir :
Écrire un programme qui garde une trace du nombre de cafards dans deux maisons adjacentes pendant un certain nombre de semaines. Le nombre de cafards dans les maisons sera déterminé par ce qui suit :

  1. Le nombre initial de cafards pour chaque maison est un nombre aléatoire entre 10 et 100.
  2. Chaque semaine, le nombre de cafards augmente de 30%.
  3. Les deux maisons partagent un mur, à travers lequel les cafards peuvent migrer d'une maison à l'autre. Dans une semaine donnée, si une maison a plus de cafards que l'autre, les cafards de la maison ayant la plus forte population migrent vers la maison ayant la plus faible population. En particulier, 30% de la différence (arrondie) de population migre.
  4. Toutes les quatre semaines, l'une des maisons est visitée par un exterminateur, ce qui entraîne une réduction de 90% (arrondie) du nombre de cafards dans cette maison.

Voici mon code :

#include 
#include 
using namespace std;

int house, increase, roaches, filthyBeasts; // Mes variables pour mes quatre fonctions
int initialCount(int house);
int weeklyIncrease(int increase);
int roachesMigration(int more, int fewer, int change);
int exterminationTime (int filthyBeasts);
// Mes quatre prototypes de fonctions

int main()
{
    int houseA, houseB;

    houseA = initialCount(houseA); // Initialisation du nombre initial de la Maison A.
    houseB = initialCount(houseB); // Initialisation du nombre initial de la Maison B.

    int week = 0;
    for (week = 0; week < 11; week++) // Ma boucle for itérant jusqu'à 11 semaines.
    {
        houseA = weeklyIncrease(houseA);
        houseB = weeklyIncrease(houseB);

        cout << "Pour la semaine " << week << ", le nombre total de cafards dans la Maison A est " << houseA << endl;
        cout << "Pour la semaine " << week << ", le nombre total de cafards dans la Maison B est " << houseB << endl;

        if((houseA > houseB)) // Option de migration 1
        {
            houseB = roachesMigration(houseA, houseB);
        }
        else if((houseB > houseA)) // Option de migration 2
        {
            houseA = roachesMigration(houseA, houseB);
        }

        if ((week + 1) % 4 == 0) // C'est l'heure de l'extermination !
        {
            if ((rand() % 2) == 0) // Obtenir un nombre aléatoire entre 0 et 1.
            {
                houseB = exterminationTime(houseB);
            }
            else
            {
                houseA = exterminationTime(houseA);                   
            }
        }
    }

    return 0;
}

int initialCount(int house) // Initialiser les deux maisons à des nombres aléatoires entre 10 et 100.
{
    int num;
    num = (rand() % 91) + 10;
    return num;
}

int weeklyIncrease(int increaseHouses) // Augmenter les cafards dans les deux maisons de 30% par semaine.
{
    int increase = 0;
    increase = (increaseHouses * .3) + increaseHouses;
    return increase;
}

int roachesMigration(int more, int fewer, int change)
{
    more -= change;
    fewer += change;   
    return ((more - fewer) * .3);
}

int exterminationTime(int filthyBeasts) // Se débarrasser de ces petites bêtes sales !
{
    filthyBeasts = (filthyBeasts * .1);
    return filthyBeasts;
}

Il y a des problèmes avec les fonctions de migration et d'extermination. Je reçois un message d'erreur du compilateur qui dit : "erreur : Problème sémantique : Aucune fonction correspondante pour appeler 'roachesMigration'". De plus, aux semaines 4 et 8, la maison sélectionnée au hasard devrait être exterminée, et le nombre de cafards dans cette maison devrait être 90% inférieur à la semaine précédente. Que pensez-vous que je devrais faire pour corriger ces problèmes ? J'apprécie vraiment toute l'aide !

3voto

Edward Thomson Points 21899

Conseil : Je remarque que vous imprimez la valeur de week à la fin de votre boucle for. En d'autres termes, votre sortie devrait ressembler à ceci :

Pour la semaine 0, le nombre total de cafards dans la maison A est de 4
Pour la semaine 0, le nombre total de cafards dans la maison B est de 5
0
Pour la semaine 1, le nombre total de cafards dans la maison A est de 6
Pour la semaine 1, le nombre total de cafards dans la maison B est de 7
1

Cependant, je soupçonne que les semaines qui sont imprimées ne sont pas celles qu'elles devraient être.

1voto

Daniel Fischer Points 114146

De plus, votre roachesMigration est incorrect. Il devrait changer le nombre de cafards dans les deux maisons, mais pas le nombre total de cafards. Il modifie le total, mais seulement le nombre de cafards dans l'une des maisons.

Pour modifier les deux comptages de cafards, vous pouvez

  1. faire en sorte que la fonction ne calcule que le nombre de cafards qui migrent et les ajouter/soustraire dans la boucle principale
  2. faire en sorte que la fonction change les deux valeurs, ce qui nécessite de les passer par référence ou pointeur (je recommande les références ici)

Pour la première option :

int roachesMigration(int more, int fewer)
{
    return ((more - fewer) * 3) / 10;
}

Et pour la deuxième :

void roachesMigration(int & more, int & fewer)
{
    int migration = ((more - fewer) * 3) / 10;
    more -= migration;
    fewer += migration;
}

Si les références et les pointeurs n'ont pas encore été abordés dans le cours, optez pour la première option.

1voto

That Chuck Guy Points 443

Regardez attentivement ce que vous faites avec la variable "week". En particulier, là où elle change de valeur.

Édition : Daniel a complété sa réponse pendant que je tapais (ou je ne l'ai pas lue complètement), donc j'ai supprimé ma contribution à la migration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X