Автор работы: Пользователь скрыл имя, 07 Января 2012 в 15:51, курсовая работа
Рассмотрим упрощённую экологическую нишу “Остров”. На маленьком острове растёт только трава (в научной терминологии - продуцент). Травой питаются мыши и кролики (первичные консументы). На мышей охотятся хорьки (специализированный хищник), лисы едят мышей и кроликов (всеяд-ный хищник). Таким образом, хорьки и лисы – консументы вторичного уров-ня. Беркут (консумент следующего уровня) может питаться кроликами, хорь-ками и лисами.
1. Введение.
2. Постановка задачи.
3. Текст программы.
4. Результаты работа программы.
5. Вывод.
OutValue=0;
msgrcv(fd, &msg, MSGMAX,6,0);
sscanf(msg.mtext,"%d %d",&NewFood,&NewValue);
if (NewFood==-1)
return -1;
for(i=0;i<counter;i++)
{
//-----Если нет еды то умирают
if (Subjects[i].food<=0)
{
counter--;
Subjects[i].food=Subjects[
Subjects[i].value=Subjects[
Subjects[i].childs=Subjects[
}
//------Если хватает, то плодятся
if ((Subjects[i].childs<
{
if((Subjects[i].food>
{
Subjects[counter].food=
Subjects[counter].value=
Subjects[counter].childs=0;
counter++;
Subjects[i].food-=
Subjects[i].value-=
Subjects[i].childs++;
}
}
//------Сами кушают и создают еду для следующих уровней
if (Subjects[i].food>ADDFOODRED)
{
OutFood+=ADDFOODRED*
OutValue+=ADDFOODRED*
Subjects[i].food-=ADDFOODRED;
}
if (NewFood>ABSORBFOODRED)
{
Subjects[i].food+=
NewFood-=ABSORBFOODRED;
}
else
{
Subjects[i].food+=NewFood;
NewFood=0;
}
if (NewValue>ABSORBVALUERED)
{
Subjects[i].value+=
NewValue-=ABSORBVALUERED;
}
else
{
Subjects[i].value+=NewValue;
NewValue=0;
}
Subjects[i].food--;
}
//OutFood+=NewFood;
//OutValue+=NewValue;
msg.mtype=1;
sprintf(msg.mtext,"%d
%d %d\n",OutFood,OutValue,
msgsnd(fd,&msg,strlen(msg.
}
}
Orange.c
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/msg.h>
#define MSGID 205
#define MSGMAX 255
#define MAXSUBJECTS 1000
#define BEGINFOODORANGE 20
#define BEGINVALUEORANGE 10
#define REPRODUSEFOODORANGE 30
#define REPRODUSEVALUEORANGE 10
#define ADDFOODORANGE 12
#define DECOTHERORANGE0 0.7
#define DECOTHERORANGE1 0.3
#define ABSORBFOODORANGE 20
#define ABSORBVALUEORANGE 2
#define MAXCHILDSORANGE 3
struct mbuf
{
long mtype;
char mtext[MSGMAX];
} msg;
struct sub
{
int food;
int value;
int childs;
};
int fd, counter;
int NewFood,NewValue;
int OutFood,OutValue;
sub Subjects[MAXSUBJECTS];
int main()
{
int i;
fd = msgget(MSGID,0);
counter=0;
for(i=0;i<5;i++)
{
Subjects[counter].food=
Subjects[counter].value=
Subjects[counter].childs=0;
counter++;
}
while(counter>0)
{
OutFood=0;
OutValue=0;
msgrcv(fd, &msg, MSGMAX,7,0);
sscanf(msg.mtext,"%d %d",&NewFood,&NewValue);
if (NewFood==-1)
return -1;
for(i=0;i<counter;i++)
{
if (Subjects[i].food<=0)
{
int j;
counter--;
Subjects[i].food=Subjects[
Subjects[i].value=Subjects[
Subjects[i].childs=Subjects[
}
if ((Subjects[i].childs<
{
if((Subjects[i].food>
{
Subjects[counter].food=
Subjects[counter].value=
Subjects[counter].childs=0;
counter++;
Subjects[i].food-=
Subjects[i].value-=
Subjects[i].childs++;
}
}
if (Subjects[i].food>
{
OutFood+=ADDFOODORANGE*
OutValue+=ADDFOODORANGE*
Subjects[i].food-=
}
if (NewFood>ABSORBFOODORANGE)
{
Subjects[i].food+=
NewFood-=ABSORBFOODORANGE;
}
else
{
Subjects[i].food+=NewFood;
NewFood=0;
}
if (NewValue>ABSORBVALUEORANGE)
{
Subjects[i].value+=
NewValue-=ABSORBVALUEORANGE;
}
else
{
Subjects[i].value+=NewValue;
NewValue=0;
}
Subjects[i].food--;
}
msg.mtype=2;
sprintf(msg.mtext,"%d
%d %d\n",OutFood,OutValue,
msgsnd(fd,&msg,strlen(msg.
}
}
Yellow.c
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/msg.h>
#define MSGID 205
#define MSGMAX 255
#define MAXSUBJECTS 1000
#define BEGINFOODYELLOW 20
#define BEGINVALUEYELLOW 5
#define REPRODUSEFOODYELLOW 15
#define REPRODUSEVALUEYELLOW 7
#define ADDFOODYELLOW 12
#define DECOTHERYELLOW0 0.7
#define DECOTHERYELLOW1 0.3
#define ABSORBFOODYELLOW 15
#define ABSORBVALUEYELLOW 2
#define MAXCHILDSYELLOW 3
struct mbuf
{
long mtype;
char mtext[MSGMAX];
} msg;
struct sub
{
int food;
int value;
int childs;
};
int fd, counter;
int NewFood,NewValue;
int OutFood,OutValue;
sub Subjects[MAXSUBJECTS];
int main()
{
int i;
fd = msgget(MSGID,0);
counter=0;
for(i=0;i<5;i++)
{
Subjects[counter].food=
Subjects[counter].value=
Subjects[counter].childs=0;
counter++;
}
while(counter>0)
{
OutFood=0;
OutValue=0;
msgrcv(fd, &msg, MSGMAX,8,0);
sscanf(msg.mtext,"%d %d",&NewFood,&NewValue);
if (NewFood==-1)
return -1;
for(i=0;i<counter;i++)
{
if (Subjects[i].food<=0)
{
int j;
counter--;
Subjects[i].food=Subjects[
Subjects[i].value=Subjects[
Subjects[i].childs=Subjects[
}
if ((Subjects[i].childs<
{
if((Subjects[i].food>
{
Subjects[counter].food=
Subjects[counter].value=
Subjects[counter].childs=0;
counter++;
Subjects[i].food-=
Subjects[i].value-=
Subjects[i].childs++;
}
}
if (Subjects[i].food>
{
OutFood+=ADDFOODYELLOW*
OutValue+=ADDFOODYELLOW*
Subjects[i].food-=
}
if (NewFood>ABSORBFOODYELLOW)
{
Subjects[i].food+=
NewFood-=ABSORBFOODYELLOW;
}
else
{
Subjects[i].food+=NewFood;
NewFood=0;
}
if (NewValue>ABSORBVALUEYELLOW)
{
Subjects[i].value+=
NewValue-=ABSORBVALUEYELLOW;
}
else
{
Subjects[i].value+=NewValue;
NewValue=0;
}
Subjects[i].food--;
}
msg.mtype=3;
sprintf(msg.mtext,"%d
%d %d\n",OutFood,OutValue,
msgsnd(fd,&msg,strlen(msg.
}
}
Green.c
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/msg.h>
#define MSGID 205
#define MSGMAX 255
#define MAXSUBJECTS 1000
#define BEGINFOODGREEN 15
#define BEGINVALUEGREEN 10
#define REPRODUSEFOODGREEN 20
#define REPRODUSEVALUEGREEN 15