Автор работы: Пользователь скрыл имя, 07 Января 2012 в 15:51, курсовая работа
Рассмотрим упрощённую экологическую нишу “Остров”. На маленьком острове растёт только трава (в научной терминологии - продуцент). Травой питаются мыши и кролики (первичные консументы). На мышей охотятся хорьки (специализированный хищник), лисы едят мышей и кроликов (всеяд-ный хищник). Таким образом, хорьки и лисы – консументы вторичного уров-ня. Беркут (консумент следующего уровня) может питаться кроликами, хорь-ками и лисами.
1. Введение.
2. Постановка задачи.
3. Текст программы.
4. Результаты работа программы.
5. Вывод.
Министерство образования и науки Российской Федерации
Уфимский государственный нефтяной
технический
университет
Кафедра
вычислительной техники и кибернетики
«МЕСТО ПОД СОЛНЦЕМ»
Пояснительная записка к курсовой работе
по дисциплине
“Операционные системы”
Вариант
80
Выполнил: ст. гр. БПО-09 Ягафарова К.Р.
Проверил:
Гиниятуллин В.М.
Дата: __ - __ - 2011 г.
Уфа, 2011
Рассмотрим упрощённую экологическую нишу “Остров”. На маленьком острове растёт только трава (в научной терминологии - продуцент). Травой питаются мыши и кролики (первичные консументы). На мышей охотятся хорьки (специализированный хищник), лисы едят мышей и кроликов (всеядный хищник). Таким образом, хорьки и лисы – консументы вторичного уровня. Беркут (консумент следующего уровня) может питаться кроликами, хорьками и лисами. Эту трофическую цепь схематично можно представить следующим образом (рисунок 1).
На рисунке цифрами обозначены ресурсы, необходимые представителям каждого уровня (0 – солнечный свет).
Рисунок
1
Заданием на курсовую работу являются более сложные схемы, т.к. они содержат обратные связи и разные по предназначению ресурсы. На схемах овалами обозначены уровни трофической цепи. Уровни называются:
- красный;
- оранжевый;
- жёлтый;
- зелёный;
- голубой;
- синий;
- фиолетовый.
Линиями на схеме обозначены ресурсы, которые потребляются и производятся. Один из ресурсов (со стрелочкой) – есть внешний ресурс, как только он будет исчерпан субъекты “красного” уровня начнут умирать в массовом порядке, а затем и субъекты остальных уровней. Для каждого уровня один из ресурсов – “ценный” (выделен), а остальные ресурсы – “питательные”. Количество субъектов на каждом уровне неограниченно.
Конечной
целью работы является подбор значений
BeginFood (начальный запас питательных
ресурсов), BeginValue (начальный запас
ценного ресурса), AbsorbFoodxx (предельное
количество питательных ресурсов, которые
может поглотить за один “присест”),
AbsorbValue (предельное количество ценного
ресурса, который можно поглотить за один
“присест”), AddFoodxx (количество питательных
ресурсов, которые можно произвести),
DecOtherxx (количество запасённых собственных
питательных ресурсов, которое можно потратить
на производство других типов ресурсов),
ReproduseFoodxx (количество запасённых питательных
ресурсов необходимых для воспроизводства
себе подобного) и MaxChildren (максимальное
количество потомков) таким образом, чтобы
зависимость количества субъектов от
времени носила волнообразный характер.
Рисунок 2. Трофическая
схема
Ф
3. Текст программы
Tact_counter.c
#include <QtCore/QCoreApplication>
#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 FFOOD 300000
#define FFOODLIFE 100
struct mbuf
{
long mtype;
char mtext[MSGMAX];
} msg;
FILE *fp;
int fd;
long int Ffood;
int counterR,counterO,counterY,
int F0,F1,F2,F3,F4,F5,F6,V1,V2,V3,
int main()
{
int i;
Ffood=FFOOD;
counterR=5;
counterO=5;
counterY=5;
counterG=5;
counterB=5;
counterV=5;
F0=F1=F2=F3=F4=F5=F6=V1=V3=V4=
fp = fopen("result.txt","w");
fd = msgget(MSGID,IPC_CREAT|0666);
if(fork()==0)execvp("./Red",
if(fork()==0)execvp("./Orange"
if(fork()==0)execvp("./Yellow"
if(fork()==0)execvp("./Green",
if(fork()==0)execvp("./Blue",
if(fork()==0)execvp("./Violet"
while
((counterR>0)||(counterO>0)||(
{
if (Ffood>FFOOD/FFOODLIFE)
{
F0=FFOOD/FFOODLIFE;
Ffood-=FFOOD/FFOODLIFE;
}
else F0=0;
//------------------------Red Level-------------------------
if (counterR>0)
{
msg.mtype=6;
sprintf(msg.mtext,"%d %d\n",F0, V6);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,1,0);
sscanf(msg.mtext,"%d %d %d",&F1,&V1,&counterR);
}
else
{
F1=V1=0;
}
fprintf(fp,"%5d",counterR);
//------------------------
if (counterO>0)
{
msg.mtype=7;
sprintf(msg.mtext,"%d %d\n",2*F1/4, V1);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,2,0);
sscanf(msg.mtext,"%d %d %d",&F2,&V2,&counterO);
}
else
{
F2=V2=0;
}
fprintf(fp,"%5d",counterO);
//------------------------
if (counterY>0)
{
msg.mtype=8;
sprintf(msg.mtext,"%d %d\n",2*F1/4+F2/2, V2);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,3,0);
sscanf(msg.mtext,"%d %d %d",&F3,&V3,&counterY);
}
else
{
F3=V3=0;
}
fprintf(fp,"%5d",counterY);
//------------------------
if (counterG>0)
{
msg.mtype=9;
sprintf(msg.mtext,"%d %d\n",F2/3, V3);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,4,0);
sscanf(msg.mtext,"%d %d %d",&F4,&V4,&counterG);
}
else
{
F4=V4=0;
}
fprintf(fp,"%5d",counterG);
//------------------------Blue
Level-------------------------
if (counterB>0)
{
msg.mtype=10;
sprintf(msg.mtext,"%d %d\n",F3, V3);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,5,0);
sscanf(msg.mtext,"%d %d %d",&F5,&V5,&counterB);
}
else
{
F5=V5=0;
}
fprintf(fp,"%5d\n",counterB);
}
//------------------------
if (counterV>0)
{
msg.mtype=11;
sprintf(msg.mtext,"%d %d\n",F2/3+F5, V4/5);
msgsnd(fd,&msg,strlen(msg.
msgrcv(fd, &msg, MSGMAX,5,0);
sscanf(msg.mtext,"%d %d %d",&F6,&V6,&counterV);
}
else
{
F6=V6=0;
}
fprintf(fp,"%5d\n",counterV);
}
//----------------------------
msgctl(fd,IPC_RMID,0);
fclose(fp);
}
Red.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 BEGINFOODRED 14
#define BEGINVALUERED 3
#define REPRODUSEFOODRED 15
#define REPRODUSEVALUERED 5
#define ADDFOODRED 20
#define DECOTHERRED0 0.7
#define DECOTHERRED1 0.3
#define ABSORBFOODRED 30
#define ABSORBVALUERED 5
#define MAXCHILDSRED 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;