我迫切需要帮助。我正在为我的系统软件课程使用 C++ 编写人口程序。
这是我第一次涉足 C++ 领域,我只有一些 Java 知识可以帮助我。基本上,该程序应该模拟一个简单的人口。指导方针如下:
- 第一个元素(起始人口)具有随机的年龄和性别。
- 如果两个元素的寿命介于 [0.25,0.50] 之间(假设它们在 1 时死亡)并且它们是异性,则它们可以配对。
- 每个元素只能配对两次。
所以这是我的代码,放轻松,我还不太精通 C++...:
#include <vector>
#include <ctime>
#include <stdlib.h>
#include <iostream>
#include <iterator>
using namespace std;
class Element {
public:
int pair;
double life;
int tag;
void setValues(double, int);
int getPair() {
return pair;
}
void incrementPair() {
pair = pair++;
}
double getLife() {
return life;
}
void incrementLife() {
life = life + 0.05;
}
int getTag() {
return tag;
}
}; //Element
void Element::setValues(double b, int c) {
pair = 0;
life = b;
tag = c;
}
int main() {
double Time = 0.0;
srand(time(NULL));
vector<Element> vec;
for (int i = 0; i<50; ++i) {
Element x;
x.setValues(((double) rand() / (RAND_MAX)), rand()%2);
vec.push_back(x);
}//for
while (vec.size() != 0) {
int newPopCount = 0;
int Dead = 0;
for(int count = 0; count != vec.size(); ) {
std::vector<Element>::iterator p = vec.begin();
std::vector<Element>::iterator i = vec.begin() + 1;
if ((p->getPair() == 2) || (p->getLife() < 0.25) || (p->getLife() > 0.50)) {
count++;
p++;
}//if
else {
for(int count1 = count + 1 ; count1 != vec.size() ; ) {
if ((i->getLife() < 0.25) || (i->getLife() > 0.50) || (i->getPair() == 2) || (p->getTag() == i->getTag())) {
++i;
count1++;
}//if
else {
cout << i->getTag() << " " << p->getTag() << endl;
cout << i->getPair() << " " << p->getPair() << endl;
cout << i->getLife() << " " << p->getLife() << endl;
p->incrementPair();
i->incrementPair();
newPopCount++;
count1++;
count++;
p++;
i++;
}//else
}//for
}//else
}//for
Time += 0.05;
for ( vector<Element>::iterator m = vec.begin(); m != vec.end(); ++m ) {
m->incrementLife();
if ( m->getLife() >= 1.00 ) {
Dead++;
//vec.clear();
vec.erase(m);
//vec.shrink_to_fit();
}//if
for (int i = 0; i = newPopCount; i++) {
Element woo;
woo.setValues(0.0, rand()%2);
vec.push_back(woo);
}//for
}//for
cout << "The total number of dead is: " << Dead << endl;
cout << "The total number born is: " << newPopCount << endl;
cout << "Current population is: " << vec.size() << endl;
cout << "Population has survived for: " << Time << endl;
sleep(1);
}//while
cout<< "The populace is now extinct." << endl;
cout<< "The populace survived for: " << Time << endl;
}//main
你可以看到我愚蠢的调试方法,我之前遇到过 Segmentation Fault 错误,但我相信它会被修复。现在的问题是我陷入了困境。该程序似乎几乎不规律地运行,我无法在比其中一个循环内部更近的地方查明问题。我的死整数递增并正确显示,但 newPopCount 整数不是,这对我来说毫无意义。此外,该程序永远不会退出 while 循环,它会继续运行,直到它陷入我拥有的众多循环中的另一个。我遇到了其他几个问题,我一直在缓慢但肯定地修复这些问题,正如您从我的拼凑代码中看到的那样。任何帮助都将不胜感激。