Страница 1 из 1

"Хищники - жертва" C++

Добавлено: 10 янв 2010, 16:46
ShakeMasterFox
Вот собстна код что я накалякал.
Находит ошибку не пойму где она находиться помогите исправить.

Код: Выделить всё

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
int island[20][20] ={
1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,
1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,
0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,1,1,1};
 
enum beast_type {rabbit=1,he_wolf=2,she_wolf=3};
 
 
class Beast
{
public:
beast_type type;
double life;
int X;
int Y;
Beast(beast_type,int,int);
Beast();
int RabbitAct();
int WolfAct(Beast*,int);
};
 
Beast::Beast()
{
}
 
Beast::Beast(beast_type t, int x1, int y1)
{
type = t;
life = 1;
X = x1;
Y = y1;
}
 
int Beast::RabbitAct()
{
int r=0;
r = rand()%9;
switch(r);
{
case 0:if(island[X+1][Y]) X=X+1;break;
case 1:if(island[X][Y+1]) Y=Y+1;break;
case 2:if(island[X-1][Y]) X=X+1;break;
case 3:if(island[X][Y-1]) Y=Y+1;break;
case 4:if(island[X+1][Y+1]) X=X+1, Y=Y+1;break;
case 5:if(island[X-1][Y+1]) X=X-1, Y=Y+1;break;
case 6:if(island[X+1][Y-1]) X=X+1, Y=Y-1;break;
case 7:if(island[X-1][Y-1]) X=X-1, Y=Y-1;break;
case 8:break;
}
if( rand()%10<5) return 0;
return 1;
}
 
int Beast::WolfAct(Beast *rabbits, int n) 
{
return 0; 
}
 
 
void main()
{
srand(time(0));
Beast rabbits[100];
Beast wolves[50];
int num_rabbits = 10;
int num_wolves = 5;
for(int i=0;i<num_rabbits;i++) rabbits[i] = Beast(rabbit,i,i);
for(i = 0;i<num_wolves;i++) wolves[i] = Beast(rand()%10<5?he_wolf:she_wolf,20-i,20-i);
int time = 1000;
for(int s = 0;s<time;s++);
{
for(int j = 0;j<num_rabbits-1;j++) if(rabbits[j].RabbitAct()==1);
{
rabbits[num_rabbits++]=Beast(rabbit,rabbits[j].X,rabbits[j].Y);
}
for(j = 0;j<num_wolves-1 ;j++) wolves[j].WolfAct(rabbits,num_rabbits);
}
 
}
Просьба помоч исправить или переписать по другому очень нужно.

Re: "Хищники - жертва" C++

Добавлено: 10 янв 2010, 17:37
THuND3Rb0LT
Я так понял никто не решился спросить: а что собственно говоря вообще нужно?)

Re: "Хищники - жертва" C++

Добавлено: 10 янв 2010, 18:07
ShakeMasterFox
Смоделировать систему "Хищники-Жертвы"

Re: "Хищники - жертва" C++

Добавлено: 11 янв 2010, 09:22
Хыиуду
И что это подразумевает?

Re: "Хищники - жертва" C++

Добавлено: 11 янв 2010, 22:56
Romeo
Хищник-жертва - это биологическая система. Смысл её в том, что система сама себя регулирует. Если хищников слишком много, то им нечего есть и они начинают вымирать от голода, как следствие их становится меньше. Если же становится слишком много жертв, то всё потомство хищников выживает из-за большого количества пищи и толпа подросших хищников сметает жертв и их становится мало (потом вымирают хищники, которые сожрали почти всю пищу).

Короче смысл в том, что у системы есть одна (а в сложных системах и больше одной) седловой точки (либо ещё говорят точки равновесия). И любое отклонение системы от этой точки порождает в ней обратно действующие силы возвращающие систему обратно в равновесное положение.

Re: "Хищники - жертва" C++

Добавлено: 12 янв 2010, 02:14
BulldozerBSG
ShakeMasterFox, а что это за символ после скобочек рядом с switch и for. Очень похоже на ";" :)
И нет подключения заголовочного файла time.h
Это поправите, но есть более скрытая ошибка в вашем коде:

Код: Выделить всё

case 0:if(island[X+1][Y]) X=X+1;break;
case 1:if(island[X][Y+1]) Y=Y+1;break;
case 2:if(island[X-1][Y]) X=X+1;break;
case 3:if(island[X][Y-1]) Y=Y+1;break;
case 4:if(island[X+1][Y+1]) X=X+1, Y=Y+1;break;
case 5:if(island[X-1][Y+1]) X=X-1, Y=Y+1;break;
case 6:if(island[X+1][Y-1]) X=X+1, Y=Y-1;break;
case 7:if(island[X-1][Y-1]) X=X-1, Y=Y-1;break;
1. В первых 4 кейсах используется сложение, я уверен что где то должны быть и минусы.
2. Выход за пределы памяти. Перефразирую. Нарушена область допустимых значений. Код не будет правильно работать если вообще будут на граничных значениях X и Y (0 и 19). Если X и\или Y будут равны граничным то некоторые значения case будут выходить за пределы памяти. К примеру представим что X и Y равны 19 и case сработал 4, то island[19+1][19+1] вернет мусор!!!

Re: "Хищники - жертва" C++

Добавлено: 13 янв 2010, 15:06
Dragon
Это случаем не "Игра жизни" созданная Джоном Хортоном Конвейем?