Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 8
1

Запрограммировать экологическую модель популяции

09.04.2020, 15:35. Показов 759. Ответов 3

Author24 — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
procedure setp( i, x, y: integer );
begin
  animals[i].x := x;
  animals[i].y := y;
end;
  
const size: integer = 20;
 
function in_field( x, y: integer ): boolean;
begin
  in_field := (1 <= x) and (x <= size) and (1 <= y) and (y <= size);
end;
 
procedure print;
var i: integer;
  s: array [1..20] of string;
  ch: char;
begin
  // clrscr;
  for i := 1 to 20 do
    s[i] := '                                      ';
  
  for i := 0 to animal_c-1 do
    begin
      // gotoxy( animals[i].x, animals[i].y );
      ch := ' ';
      if (animals[i].typ = 1) then
        ch := '*';
      if (animals[i].typ = 2) then
        ch := 'W';
      if (animals[i].typ = 3) then
        ch := 'a';
      s[ animals[i].y ][ animals[i].x ] := ch;
    end;      
  writeln( '-----------' );
  for i := 1 to 20 do
    writeln( s[i] );    
    
  Sleep(500);
end;
 
function dist( i, i2: integer ): integer;
begin
  dist := Abs( animals[i].x - animals[i2].x ) +
    Abs( animals[i].y - animals[i2].y );
end;
 
var 
  i, last_c, x2, y2, xi, yi, i2, p2: integer;
  f: boolean;
begin
  animal_c := 0;
  
  // Инициализация
  for i := 0 to 50 do
    setp( add(), random( 20 )+1, random(20)+1, random(3) + 1, 1 );
      
  while (true) do
    begin
      print();
      
      i := 0;
      last_c := animal_c; 
      while (i < last_c) do
        begin
          if (animals[i].typ = 1) then
            begin
              // Новый кролик
              if (Random(100) < 20) then
                setp( add(), animals[i].x, animals[i].y, 1, 1 );
               
              // Случайное движение
              x2 := animals[i].x + Random(3)-1;
              y2 := animals[i].y + Random(3)-1;
              
              if (in_field(x2,y2)) then
                setp( i, x2, y2 );
            end // if typ=1
          else 
            begin
              f := false;
              
              // Едим
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 1) and (dist( i, i2 ) = 0) then
                  begin
                    // Едим
                    del(i2);
                    animals[i].live := animals[i].live + 1;                                             
                    f := true;
                    break;
                  end;
                  
              if (f) then 
                begin inc(i); continue; end;
 
              // Гонимся за кроликами
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 1) and (dist( i, i2 ) = 1) then
                  begin
                    setp( i, animals[i2].x, animals[i2].y );
                    
                    f := true;
                    continue;
                  end;
                  
              // Подыхаем волком    
              animals[i].live := animals[i].live - 0.1;                              
              if (animals[i].live <= 0) then
                begin
                  del( i );
                  continue;
                end;
              
              if (f) then 
                begin inc(i); continue; end;
              
              // Волк размножается
              if (animals[i].typ <> 2) then continue; 
              
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 3) and (dist( i, i2 ) = 0) then
                  begin
                    p2 := add();
                    
                    animals[p2].x := animals[i].x;
                    animals[p2].y := animals[i].y;
                    animals[p2].typ := 2 + Random(2);
                    
                    f := true;
                    break;
                  end;
              
              if (f) then 
                begin inc(i); continue; end;
              
              // Волк гонится
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 3) and (dist( i, i2 ) = 1) then
                  begin
                    animals[i].x := animals[i2].x;
                    animals[i].y := animals[i2].y;
                    
                    f := true;
                    break;
                  end;
              if (f) then 
                begin inc(i); continue; end;
              
              // Случайное движение
              x2 := animals[i].x + Random(3)-1;
              y2 := animals[i].y + Random(3)-1;
              
              if (in_field(x2,y2)) then
                setp( i, x2, y2 );
            end; // if typ = 2 or 3
            
          inc(i);
        end;
    end; // while true
end.
Добавлено через 8 минут
Сама задача:
Волчий остров размером 20x20 заселен дикими кроликами, волками и волчицами. Имеется по нескольку представителей каждого вида. Кролики довольно глупы: в каждый момент времени они с одинаковой вероятностью 1/9 передвигаются в один из восьми соседних квадратов (за исключением участков, ограниченных береговой линией) или просто сидят неподвижно. Каждый кролик с вероятностью 0,2 превращается в двух кроликов. Каждая волчица передвигается случайным образом, пока в одном из соседних восьми квадратов не окажется кролик, за которым она охотится. Если волчица и кролик оказываются в одном квадрате, волчица съедает кролика и получает одно очко. В противном случае она теряет 0,1 очка. Волки и волчицы с нулевым количеством очков умирают. В начальный момент времени все волки и волчицы имеют 1 очко. Волк ведет себя подобно волчице до тех пор, пока в соседних квадратах не исчезнут все кролики; тогда, если волчица находится в одном из восьми близлежащих квадратов, волк гонится за ней. Если волк и волчица окажутся в одном квадрате и там нет кролика, которого нужно съесть, они производят потомство случайного пола. Запрограммировать предполагаемую экологическую модель популяции в течение некоторого периода времени.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2020, 15:35
Ответы с готовыми решениями:

Запрограммировать экологическую модель популяции в течение некоторого периода времени (Pascal -> C++)
procedure setp( i, x, y: integer ); begin animals.x := x; animals.y := y; end; const...

Смоделировать замкнутую экологическую систему по принципу хищник-жертва.
Разработать систему имитационного моделирования Океан. Моделируется замкнутая экологическая система...

Написать программу, реализующую данную экологическую модель.
Помогите пожалуйста реализовать в этот код следующее действие - у меня есть одна таблица, на...

Построить математическую модель роста популяции
Имеется некий биологический вид, у которого нет врагов, а кормовая база в избытке, но считаем, что...

3
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 8
10.04.2020, 13:49  [ТС] 2
Помогите кто-нибудь,пожалуйста
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 8
11.04.2020, 17:51  [ТС] 3
Задача:
Волчий остров размером 20x20 заселен дикими кроликами, волками и волчицами. Имеется по нескольку представителей каждого вида. Кролики довольно глупы: в каждый момент времени они с одинаковой вероятностью 1/9 передвигаются в один из восьми соседних квадратов (за исключением участков, ограниченных береговой линией) или просто сидят неподвижно. Каждый кролик с вероятностью 0,2 превращается в двух кроликов. Каждая волчица передвигается случайным образом, пока в одном из соседних восьми квадратов не окажется кролик, за которым она охотится. Если волчица и кролик оказываются в одном квадрате, волчица съедает кролика и получает одно очко. В противном случае она теряет 0,1 очка. Волки и волчицы с нулевым количеством очков умирают. В начальный момент времени все волки и волчицы имеют 1 очко. Волк ведет себя подобно волчице до тех пор, пока в соседних квадратах не исчезнут все кролики; тогда, если волчица находится в одном из восьми близлежащих квадратов, волк гонится за ней. Если волк и волчица окажутся в одном квадрате и там нет кролика, которого нужно съесть, они производят потомство случайного пола. Запрограммировать предполагаемую экологическую модель популяции в течение некоторого периода времени.

Переписать с Pascal на С++
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
program island;
// uses crt;
 
type
  TAnimal = record
      x, y: integer;
      typ: integer;
      live: single;      
  end;
  
var
  animals: array [0..1000] of TAnimal;
  animal_c: integer;
 
function add: integer;
begin
  add := animal_c;
  inc( animal_c );
  if (animal_c >= 1000)then writeln('overflow');
end;
 
procedure del( p: integer );
var i: integer;
begin
  for i := p  to animal_c-2 do
    animals[i] := animals[i+1];
  dec( animal_c );    
end;    
 
procedure setp( i, x, y, typ: integer; live: single );
begin
  animals[i].x := x;
  animals[i].y := y;
  animals[i].typ := typ;
  animals[i].live := live;
end;
 
procedure setp( i, x, y: integer );
begin
  animals[i].x := x;
  animals[i].y := y;
end;
  
const size: integer = 20;
 
function in_field( x, y: integer ): boolean;
begin
  in_field := (1 <= x) and (x <= size) and (1 <= y) and (y <= size);
end;
 
procedure print;
var i: integer;
  s: array [1..20] of string;
  ch: char;
begin
  // clrscr;
  for i := 1 to 20 do
    s[i] := '                                      ';
  
  for i := 0 to animal_c-1 do
    begin
      // gotoxy( animals[i].x, animals[i].y );
      ch := ' ';
      if (animals[i].typ = 1) then
        ch := '*';
      if (animals[i].typ = 2) then
        ch := 'W';
      if (animals[i].typ = 3) then
        ch := 'a';
      s[ animals[i].y ][ animals[i].x ] := ch;
    end;      
  writeln( '-----------' );
  for i := 1 to 20 do
    writeln( s[i] );    
    
  Sleep(500);
end;
 
function dist( i, i2: integer ): integer;
begin
  dist := Abs( animals[i].x - animals[i2].x ) +
    Abs( animals[i].y - animals[i2].y );
end;
 
var 
  i, last_c, x2, y2, xi, yi, i2, p2: integer;
  f: boolean;
begin
  animal_c := 0;
  
  // Инициализация
  for i := 0 to 50 do
    setp( add(), random( 20 )+1, random(20)+1, random(3) + 1, 1 );
      
  while (true) do
    begin
      print();
      
      i := 0;
      last_c := animal_c; 
      while (i < last_c) do
        begin
          if (animals[i].typ = 1) then
            begin
              // Новый кролик
              if (Random(100) < 20) then
                setp( add(), animals[i].x, animals[i].y, 1, 1 );
               
              // Случайное движение
              x2 := animals[i].x + Random(3)-1;
              y2 := animals[i].y + Random(3)-1;
              
              if (in_field(x2,y2)) then
                setp( i, x2, y2 );
            end // if typ=1
          else 
            begin
              f := false;
              
              // Едим
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 1) and (dist( i, i2 ) = 0) then
                  begin
                    // Едим
                    del(i2);
                    animals[i].live := animals[i].live + 1;                                             
                    f := true;
                    break;
                  end;
                  
              if (f) then 
                begin inc(i); continue; end;
 
              // Гонимся за кроликами
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 1) and (dist( i, i2 ) = 1) then
                  begin
                    setp( i, animals[i2].x, animals[i2].y );
                    
                    f := true;
                    continue;
                  end;
                  
              // Подыхаем волком    
              animals[i].live := animals[i].live - 0.1;                              
              if (animals[i].live <= 0) then
                begin
                  del( i );
                  continue;
                end;
              
              if (f) then 
                begin inc(i); continue; end;
              
              // Волк размножается
              if (animals[i].typ <> 2) then continue; 
              
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 3) and (dist( i, i2 ) = 0) then
                  begin
                    p2 := add();
                    
                    animals[p2].x := animals[i].x;
                    animals[p2].y := animals[i].y;
                    animals[p2].typ := 2 + Random(2);
                    
                    f := true;
                    break;
                  end;
              
              if (f) then 
                begin inc(i); continue; end;
              
              // Волк гонится
              for i2 := 0 to animal_c-1 do
                if (animals[i2].typ = 3) and (dist( i, i2 ) = 1) then
                  begin
                    animals[i].x := animals[i2].x;
                    animals[i].y := animals[i2].y;
                    
                    f := true;
                    break;
                  end;
              if (f) then 
                begin inc(i); continue; end;
              
              // Случайное движение
              x2 := animals[i].x + Random(3)-1;
              y2 := animals[i].y + Random(3)-1;
              
              if (in_field(x2,y2)) then
                setp( i, x2, y2 );
            end; // if typ = 2 or 3
            
          inc(i);
        end;
    end; // while true
end.
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
11.04.2020, 20:11 4
Цитата Сообщение от Вова353 Посмотреть сообщение
Помогите кто-нибудь,пожалуйста
Моделирование процессов на карте
0
11.04.2020, 20:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2020, 20:11
Помогаю со студенческими работами здесь

Конкурентная модель популяции двух видов
помогите сделать модель

Как запрограммировать гладкую модель множества?
Всем доброго времени суток. Помогите пожалуйста запрограммировать гладкую модель множества. С...

На основе коллекций Queue и List<T> запрограммировать модель эскалатора
Доброго времени суток, вот нужно сделать программу на С#. хоть С# я и знаю немного, но моего ума не...

На основе коллекций Queue и List<T> запрограммировать модель эскалатора
Есть задание, которое ну совсем не знаю как делать. Если кто может подсказать, или даже помочь с...

Изучение влияния войн на экологическую безопасность
&lt;p&gt;Проскурина Е.Ю., Френкель Е.Э. ИЗУЧЕНИЕ ВЛИЯНИЯ ВОЙН НА ЭКОЛОГИЧЕСКУЮ БЕЗОПАСНОСТЬ // Материалы...

Моделирование популяции
Практическая работа &quot;Моделирование популяции животных&quot; Для выполнения работы откройте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru