У меня проблемы с двумя функциями. Вот инструкция по проекту:

Задание: Напишите программу, которая в течение нескольких недель отслеживает количество тараканов в двух соседних домах. Количество тараканов в домах будет определяться следующим:

  1. Первоначальное количество тараканов для каждого дома - случайное число от 10 до 100.
  2. Каждую неделю количество тараканов увеличивается на 30%.
  3. Два дома разделяют стену, через которую тараканы могут перемещаться от одного к другому. В течение данной недели, если в одном доме больше тараканов, чем в другом, тараканы из дома с более высокой численностью населения мигрируют в дом с более низкой численностью. В частности, 30% разницы (округленной в меньшую сторону) в популяции мигрируют.
  4. Каждые четыре недели один из домов посещает истребитель, в результате чего количество тараканов в этом доме сокращается на 90% (с округлением в меньшую сторону).

Вот мой код:

#include <iostream>
#include <cmath>
using namespace std;

int house, increase, roaches, moreRoaches, fewerRoaches, filthyBeasts, change; // My variables for my four functions
int initialCount(int house);
int weeklyIncrease(int increase);
double roachesMigration(int moreRoaches, int fewerRoaches, int change);
int exterminationTime (int filthyBeasts);
// My four function prototypes 

int main()
{
    int houseA, houseB;

    houseA = initialCount(houseA); //Initializing the initial count of House A.
    houseB = initialCount(houseB); //Initializing the initial count of House B.

    int week = 0;
    for (week = 0; week < 11; week++) // My for loop iterating up to 11 weeks.
    {
        houseA = weeklyIncrease(houseA);
        houseB = weeklyIncrease(houseB);

        cout << "For week " << week << ", the total number of roaches in House A is " << houseA << endl;
        cout << "For week " << week << ", the total number of roaches in House B is " << houseB << endl;

        if((houseA > houseB)) // Migration option 1
        {
            roachesMigration(moreRoaches, fewerRoaches, change);
        }
        else if((houseB > houseA)) // Migration option 2
        {
            roachesMigration(moreRoaches, fewerRoaches, change);
        }


        if ((week + 1) % 4 == 0) // It's extermination time!
        {
            if ((rand() % 2) == 0) // Get a random number between 0 and 1.
            {
                houseB = exterminationTime(houseB);
            }
            else
            {
                houseA = exterminationTime(houseA);                   
            }
        }
    }

    return 0;
}

int initialCount(int house) // Initializing both houses to random numbers between 10 and 100.
{
    int num;
    num = (rand() % 91) + 10;
    return num;
}

int weeklyIncrease(int increaseHouses) // Increasing the roaches in both houses by 30% weekly.
{
    int increase = 0;
    increase = (increaseHouses * .3) + increaseHouses;
    return increase;
}

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


int exterminationTime(int filthyBeasts) // Getting rid of the filthy little beasts!
{
    filthyBeasts = (filthyBeasts * .1);
    return filthyBeasts;
}

Проблемы связаны с функциями миграции и уничтожения. Мой код работает нормально, но на 4 и 8 неделе случайно выбранный дом должен быть уничтожен, а количество тараканов в этом доме должно быть на 90% меньше, чем на предыдущей неделе. Как вы думаете, ребята, я должен сделать, чтобы исправить эти проблемы? Мне действительно нужна вся помощь, которую я могу получить!

1
Earl Fuller 17 Дек 2011 в 00:49
Первое, что я заметил, это то, что единственный C++, который у вас есть, это cout и cin.
 – 
dreamlax
17 Дек 2011 в 00:52
@dreamlax: для меня все это выглядит как C ++.
 – 
Benjamin Lindley
17 Дек 2011 в 00:55
@BenjaminLindley: Нет, все это выглядит как C с небольшим количеством cout. Классы могли бы действительно помочь здесь.
 – 
dreamlax
17 Дек 2011 в 00:55
Вы не почти закончили работу с этой программой. Предстоит проделать значительный объем работы. Не забывайте читать хорошие книги по программированию в университетской библиотеке.
 – 
Basile Starynkevitch
17 Дек 2011 в 00:57

4 ответа

Относительно этой строки:

roachesMigration(change);

change не объявлен в вашей функции main, отсюда и ошибка. Кроме того, функция roachesMigration ожидает 3 параметра, а не 1.

2
Igor 17 Дек 2011 в 00:51
Игорь, настоящая проблема в том, что я не знаю, что вызывать в main для функции миграции. Я попытался установить каждый дом равным функции миграции, но это тоже не помогло. Что я должен вызывать в основном?
 – 
Earl Fuller
17 Дек 2011 в 00:54
Я думаю, вам следует читать больше хороших книг о программировании и сосредоточиться вместо того, чтобы правильно работать с небольшой программой (и решать небольшое подмножество вашего вопроса). Итак, начните с крошечной программы, заставьте ее работать правильно (научитесь использовать отладчик), улучшайте и улучшайте ее. Повторяйте этот процесс, пока не решите домашнее задание.
 – 
Basile Starynkevitch
17 Дек 2011 в 01:11
Спасибо, Базиль. Я новичок в С++ и очень запутался. Я разместил свой код, который работает сейчас. Не могли бы вы взглянуть на это для меня и сказать мне, как заставить работать функцию уничтожения? Я был бы очень признателен. Я использую хорошую книгу, чтобы помочь мне.
 – 
Earl Fuller
17 Дек 2011 в 01:17

Переменная change не является глобальной переменной, но появляется внутри main (поэтому она не имеет смысла внутри main).

Ваша функция roachesMigration объявлена ​​с тремя формальными аргументами (без значений по умолчанию), но вы используете ее с одним фактическим аргументом.

Попросите ваш компилятор выдать вам все предупреждения и отладочную информацию (g++ -Wall -g в Linux). Улучшайте код, пока не получите никаких предупреждений.

Научитесь использовать отладчик (например, gdb в Linux).

Веселиться.

2
Basile Starynkevitch 17 Дек 2011 в 02:08
Спасибо, Базиль. Я использую XCode на Mac, так что вы думаете, я должен сделать что-то другое?
 – 
Earl Fuller
17 Дек 2011 в 01:03
Вы, безусловно, должны научиться использовать отладчик (возможно, он есть внутри XCode??)
 – 
Basile Starynkevitch
17 Дек 2011 в 02:40

В зависимости от инструктора вы получите ноль баллов за этот код, даже если сможете заставить его работать идеально! Это потому, что вы не использовали какой-либо объектно-ориентированный дизайн при создании своего кода. В C++ это означает классы.

Какой объект вам нужен для этой задачи. Дом!

Какой атрибут должен быть у вашего дома? Тараканы!

Так что примерно так:

class cHouse
{

 int MyRoachCount;

 ...

};

Если вы начнете с чистого листа, вот так, вы обнаружите, что все начинает аккуратно вставать на свои места.

1
ravenspoint 17 Дек 2011 в 01:20
Эта программа была назначена задолго до того, как мы узнали о классах, поэтому я не думаю, что мой профессор хотел, чтобы я использовал классы для этого.
 – 
Earl Fuller
17 Дек 2011 в 01:25
Но теперь ты знаешь о классах, верно. Вы знаете, что они значительно облегчают проектирование и написание кода? Так что вам, вероятно, следует их использовать... если вы не думаете, что есть работа для программиста, который не может использовать классы.
 – 
ravenspoint
17 Дек 2011 в 01:30
Хорошо. Я буду использовать классы для этого проекта, так как они сделают его проще. Спасибо.
 – 
Earl Fuller
17 Дек 2011 в 01:34
Теперь ты говоришь как кодер! Если вы застряли, спросите еще раз.
 – 
ravenspoint
17 Дек 2011 в 01:36

Один из возможных способов обработки миграции похож на этот псевдокод:

// compute size of migration
count = migration(houseA, houseB)

if (houseA < houseB)
    add count to houseA
    subtract count from houseB
else
    add count to houseB
    subtract count from houseA
1
Blastfurnace 17 Дек 2011 в 01:33
Спасибо! Я собираюсь попробовать это.
 – 
Earl Fuller
17 Дек 2011 в 01:44