Место под солнцем

Автор работы: Пользователь скрыл имя, 07 Января 2012 в 15:51, курсовая работа

Краткое описание

Рассмотрим упрощённую экологическую нишу “Остров”. На маленьком острове растёт только трава (в научной терминологии - продуцент). Травой питаются мыши и кролики (первичные консументы). На мышей охотятся хорьки (специализированный хищник), лисы едят мышей и кроликов (всеяд-ный хищник). Таким образом, хорьки и лисы – консументы вторичного уров-ня. Беркут (консумент следующего уровня) может питаться кроликами, хорь-ками и лисами.

Содержание работы

1. Введение.
2. Постановка задачи.
3. Текст программы.
4. Результаты работа программы.
5. Вывод.

Содержимое работы - 1 файл

Курсовая работа по ОС.doc

— 98.00 Кб (Скачать файл)

    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[counter].food;

          Subjects[i].value=Subjects[counter].value;

          Subjects[i].childs=Subjects[counter].childs;

        }

//------Если хватает,  то плодятся

     if ((Subjects[i].childs<MAXCHILDSRED)&&(counter<MAXSUBJECTS))

      {

        if((Subjects[i].food>REPRODUSEFOODRED)&&(Subjects[i].value>REPRODUSEVALUERED))

        {

           Subjects[counter].food=BEGINFOODRED;

           Subjects[counter].value=BEGINVALUERED;

           Subjects[counter].childs=0;

           counter++;

          Subjects[i].food-=REPRODUSEFOODRED;

          Subjects[i].value-=REPRODUSEVALUERED;

          Subjects[i].childs++;

        }

      }

//------Сами кушают  и создают еду для следующих  уровней

        if (Subjects[i].food>ADDFOODRED)

        {

          OutFood+=ADDFOODRED*DECOTHERRED0;

          OutValue+=ADDFOODRED*DECOTHERRED1;

          Subjects[i].food-=ADDFOODRED;

        }

      if (NewFood>ABSORBFOODRED)

      {

        Subjects[i].food+=ABSORBFOODRED;

        NewFood-=ABSORBFOODRED;

      }

      else

      {

        Subjects[i].food+=NewFood;

        NewFood=0;

      }

      if (NewValue>ABSORBVALUERED)

      {

        Subjects[i].value+=ABSORBVALUERED;

        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,counter);

    msgsnd(fd,&msg,strlen(msg.mtext)+1,IPC_NOWAIT);

  } 

} 
 
 
 
 

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=BEGINFOODORANGE;

    Subjects[counter].value=BEGINVALUEORANGE;

    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[counter].food;

          Subjects[i].value=Subjects[counter].value;

          Subjects[i].childs=Subjects[counter].childs;

     }

      if ((Subjects[i].childs<MAXCHILDSORANGE)&&(counter<MAXSUBJECTS))

      {

       if((Subjects[i].food>REPRODUSEFOODORANGE)&&(Subjects[i].value>REPRODUSEVALUEORANGE))

        {

           Subjects[counter].food=BEGINFOODORANGE;

           Subjects[counter].value=BEGINVALUEORANGE;

           Subjects[counter].childs=0;

           counter++;

          Subjects[i].food-=REPRODUSEFOODORANGE;

          Subjects[i].value-=REPRODUSEVALUEORANGE;

          Subjects[i].childs++;

        }

      }

        if (Subjects[i].food>ADDFOODORANGE)

        {

          OutFood+=ADDFOODORANGE*DECOTHERORANGE0;

          OutValue+=ADDFOODORANGE*DECOTHERORANGE1;

          Subjects[i].food-=ADDFOODORANGE;

        }

      if (NewFood>ABSORBFOODORANGE)

      {

        Subjects[i].food+=ABSORBFOODORANGE;

        NewFood-=ABSORBFOODORANGE;

      }

      else

      {

        Subjects[i].food+=NewFood;

        NewFood=0;

      }

      if (NewValue>ABSORBVALUEORANGE)

      {

        Subjects[i].value+=ABSORBVALUEORANGE;

        NewValue-=ABSORBVALUEORANGE;

      }

      else

      {

        Subjects[i].value+=NewValue;

        NewValue=0;

      }

      Subjects[i].food--;

    }

    msg.mtype=2;

    sprintf(msg.mtext,"%d %d %d\n",OutFood,OutValue,counter);

    msgsnd(fd,&msg,strlen(msg.mtext)+1,IPC_NOWAIT);

  }

}

 

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=BEGINFOODYELLOW;

    Subjects[counter].value=BEGINVALUEYELLOW;

    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[counter].food;

          Subjects[i].value=Subjects[counter].value;

          Subjects[i].childs=Subjects[counter].childs;

     }

      if ((Subjects[i].childs<MAXCHILDSYELLOW)&&(counter<MAXSUBJECTS))

      {

        if((Subjects[i].food>REPRODUSEFOODYELLOW)&&(Subjects[i].value>REPRODUSEVALUEYELLOW))

        {

           Subjects[counter].food=BEGINFOODYELLOW;

           Subjects[counter].value=BEGINVALUEYELLOW;

           Subjects[counter].childs=0;

           counter++;

          Subjects[i].food-=REPRODUSEFOODYELLOW;

          Subjects[i].value-=REPRODUSEVALUEYELLOW;

          Subjects[i].childs++;

        }

      }

        if (Subjects[i].food>ADDFOODYELLOW)

        {

          OutFood+=ADDFOODYELLOW*DECOTHERYELLOW0;

          OutValue+=ADDFOODYELLOW*DECOTHERYELLOW1;

          Subjects[i].food-=ADDFOODYELLOW;

        }

      if (NewFood>ABSORBFOODYELLOW)

      {

        Subjects[i].food+=ABSORBFOODYELLOW;

        NewFood-=ABSORBFOODYELLOW;

      }

      else

      {

        Subjects[i].food+=NewFood;

        NewFood=0;

      }

      if (NewValue>ABSORBVALUEYELLOW)

      {

        Subjects[i].value+=ABSORBVALUEYELLOW;

        NewValue-=ABSORBVALUEYELLOW;

      }

      else

      {

        Subjects[i].value+=NewValue;

        NewValue=0;

      }

      Subjects[i].food--;

    }

   msg.mtype=3;

   sprintf(msg.mtext,"%d %d %d\n",OutFood,OutValue,counter);

    msgsnd(fd,&msg,strlen(msg.mtext)+1,IPC_NOWAIT);

  }

}

 

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

Информация о работе Место под солнцем