У меня проблемы с двумя функциями. Вот инструкция по проекту:
Задание: Напишите программу, которая в течение нескольких недель отслеживает количество тараканов в двух соседних домах. Количество тараканов в домах будет определяться следующим:
- Первоначальное количество тараканов для каждого дома - случайное число от 10 до 100.
- Каждую неделю количество тараканов увеличивается на 30%.
- Два дома разделяют стену, через которую тараканы могут перемещаться от одного к другому. В течение данной недели, если в одном доме больше тараканов, чем в другом, тараканы из дома с более высокой численностью населения мигрируют в дом с более низкой численностью. В частности, 30% разницы (округленной в меньшую сторону) в популяции мигрируют.
- Каждые четыре недели один из домов посещает истребитель, в результате чего количество тараканов в этом доме сокращается на 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% меньше, чем на предыдущей неделе. Как вы думаете, ребята, я должен сделать, чтобы исправить эти проблемы? Мне действительно нужна вся помощь, которую я могу получить!
4 ответа
Относительно этой строки:
roachesMigration(change);
change
не объявлен в вашей функции main
, отсюда и ошибка. Кроме того, функция roachesMigration
ожидает 3 параметра, а не 1.
Переменная change
не является глобальной переменной, но появляется внутри main
(поэтому она не имеет смысла внутри main
).
Ваша функция roachesMigration
объявлена с тремя формальными аргументами (без значений по умолчанию), но вы используете ее с одним фактическим аргументом.
Попросите ваш компилятор выдать вам все предупреждения и отладочную информацию (g++ -Wall -g
в Linux). Улучшайте код, пока не получите никаких предупреждений.
Научитесь использовать отладчик (например, gdb
в Linux).
Веселиться.
В зависимости от инструктора вы получите ноль баллов за этот код, даже если сможете заставить его работать идеально! Это потому, что вы не использовали какой-либо объектно-ориентированный дизайн при создании своего кода. В C++ это означает классы.
Какой объект вам нужен для этой задачи. Дом!
Какой атрибут должен быть у вашего дома? Тараканы!
Так что примерно так:
class cHouse
{
int MyRoachCount;
...
};
Если вы начнете с чистого листа, вот так, вы обнаружите, что все начинает аккуратно вставать на свои места.
Один из возможных способов обработки миграции похож на этот псевдокод:
// 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
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
cout
иcin
.cout
. Классы могли бы действительно помочь здесь.