Ecology 2d Struct Array C ++

时间:2017-05-06 19:59:10

标签: c++

代码打印时间0-100的2d数组正好但是现在我想要做的就是为每天的时间[o]设置植物,羚羊和老虎等出生率,死亡率和繁殖率等功能。这些功能是另一个VOID还是INT MAIN。如果我尝试例如... Rp(植物的繁殖)= t [i] .Plants + 30;它不会编译和运行,因为我不能添加30到t [i] .Plants我试图在第1天结束时添加30个额外的植物,所以在第2天有一个新的数字,植物开始时重复直到第100天。

尝试打印类似于植物羚羊和老虎和时间的东西,包括出生率,死亡率和繁殖等功能。时间将是0-100但其他值将改变。 enter image description here

感谢您的帮助,我真的很感激。

#include <iostream>
#include <string>

using namespace std;

struct population {
    string Plants;
    string Antelopes;
    string Tigers;
    double time[100];
};
 void input (population[]); 
 void print (population[]);
 void initialize (population[]); 
 void birthrate (population []);
 int main ()
 {
      int Time[100];
     int Plants[100];
     int Antelopes[100];
     int Tigers[100];
     cout << " Time - Plants - Antelopes - Tigers \n";
     cout << " --------------------------------------- \n";
for ( int i = 0; i <= 100; i++)
{
    Time[0]= i ;
    Plants[0] =i;
    Antelopes[0] =i;
    Tigers[0] =i;
    cout << " " << Time[0] << " ----  " << " " << Plants[0] <<  " ----  " <<  " " << Antelopes[0] <<  " ----  " << " " << Tigers[0] << endl;
}
 // int plants;
 // cout << " Enter value for plants " << endl;
 // cin >> plants;

 }

void initialize (population t[])
 {
for (int i=0; i < 1; i++)
{
    t[i].Plants = "";
    t[i].Antelopes = "";
    t[i].Tigers = "";
    for (int j=0; j < 100; j++)
        t[i].time[j] = 0;
     }
 }

     void input (population t[])
 {
        for (int i=0; i < 1; i++)
         {
        cout << " Enter initial population for Plants ";
        cin >> t[i].Plants;
        cout << " \n Enter initial population for Antelopes ";
        cin >> t[i].Antelopes;
        cout << " \n Enter initial population for Tigers ";
        cin >> t[i].Tigers;
        for (int j=0; j < 100; j++)
             {
            cout << "\n Enter time ";
            cin >> t[i].time[j];
             }          
         }
}
 void print (population t[])
 {
     for (int i=0; i < 1; i++)
    {
    cout << " Plants Pop: " << t[i].Plants << endl;
    cout << " Antelopes Pop: " << t[i].Antelopes << endl;
    cout << " Tigers Pop: " << t[i].Tigers << endl;
for (int j=0; j < 100; j++)
    cout << " " << t[i].time[j];
    cout << endl;
    }
 }  
void birthrate (population t[])
{
for (int i=0; i <= 100; i++)
{   
string Rp;
Rp = (t[i].Plants);
cout << " " << Rp << endl;
for (int j=0; j < 100; j++)
    cout << t[i].Plants[j] << " ";
    cout << endl;
    }   
}

1 个答案:

答案 0 :(得分:0)

您的代码存在许多重大问题,无法就如何继续提供良好的建议。

您正在创建一个类来存储所有pop值,但是这是使用字符串。改为存储数字数据。

然后,你甚至根本没有在你的主循环中使用那个类,你正在制作一些完全没有连接的新变量并使用它们。基本上砍掉了多余的变量。这是一个基本概要:

struct sample
{
    float pop;
    float deaths;
    float births;
};

struct population
{
    sample Plants;
    sample Antelopes;
    sample Tigers;
}

现在,每个“人口”对象将在一个时间点保存整个人口的快照。 如果要存储100个快照(这不是必需的),则可以创建包含100个人口对象的数组:

population pop[100];

但是,只有一个人口对象存储当前时间片几乎肯定更好:

population ecoSystem;

只需在更新后打印值即可。绝对不需要存储100个时间点的数据,除非需要将它们保存到文件中。你可以访问这样的值:

void input(population& p) // & = pass in a live reference to the population object
{
    cout << " Enter initial population for Plants ";
    cin >> p.Plants.pop;
    cout << " \n Enter initial population for Antelopes ";
    cin >> p.Antelopes.pop;
    cout << " \n Enter initial population for Tigers ";
    cin >> p.Tigers.pop;
}

并没有基本的理由一次输入100个数据点的信息,你只需循环更新100次,并有一个单独的“int t”时间变量,你可以使用哪个时间片。最多,您需要当前的填充变量,即下一个时间片的另一个填充变量,然后在计算更新后将其复制回当前的变量。