Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41

Клеточный автомат блуждания частицы по поверхности фуллерена C60

27.03.2014, 19:24. Показов 6494. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток))) приехали в провинцию умные дяди из Москвы и задали создать клеточный автомат блуждания частицы по поверхности фуллерена C60!!! Моделирование процессов не особо проходили, про клеточные автоматы первый раз услышал, с комп. графика - VBA немного "просмотрели", про фуллерен тем более никогда не слышал - "с места в карьер"!!! осваивать новые технологии времени нет, да и спросить тоже особо не у кого((( это про фуллерен http://ru.wikipedia.org/wiki/%... 0%B5%D0%BD, а это развертка [cut]
Так что, если кто-то может помочь сделать или просто сделать - напишите)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2014, 19:24
Ответы с готовыми решениями:

Клеточный автомат
Добрый день! Проблема: не знаю как сделать так, чтобы программа работала со StringGrig следующем образом. При нажатии кнопки...

Клеточный автомат
Никак не могу написать прогу. Если кто знает help me пожалуйста. А вот собственно и текст проги: Напишите прогу представляющую...

Клеточный автомат
Ребят снова я со своим лабвью. Задача отброзить клеточный автомат 2D диффузии. Кто подскажет формулу и в какой из циклов ее пихнуть? И еще...

74
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
14.06.2014, 09:56  [ТС]
Студворк — интернет-сервис помощи студентам
приоритеты 5 и 6 не получается точно расставить - условие не могу правильно задать!!! neib_cell подразумевает всю окрестность ячейки как я понял!!! Задать словами можно так:
1) если у пустой ячейки один заряженный сосед - приоритет 5;
2) если несколько - приоритет 6;

Добавлено через 9 минут
или же иначе - одинаковые соседи заряженных ячеек красного цвета - приоритет 6
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.06.2014, 21:37
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Финальная версия логики выглядит так:
C++
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
// ---------------------------------------------------------------------------
enum
{
    GP_MUST_PASS = 3, GP_MAY_PASS, RP_PASS_WANTED, RP_PASS_NOT_WANTED
} ;
// ---------------------------------------------------------------------------
typedef std::vector < TShape * > t_neibs;
 
t_neibs & operator << ( t_neibs & v, TShape * s )
{
    v.push_back( s );
    return v;
}
 
// ---------------------------------------------------------------------------
class t_cell : public TComponent
{
 
public:
    bool charged, just_received;
    int rp, gp; // receive_priority, give_priority
    int charge_id;
    TShape * sh;
 
    t_neibs neibs;
 
    void __fastcall pass_charge_to( t_cell * receiver )
    {
        receiver->receive_charge( charge_id );
        charged = false;
        charge_id = 0;
        set_sh_params( );
    }
 
    void receive_charge( int _id )
    {
        charged = true;
        charge_id = _id;
        just_received = true;
        set_sh_params( );
    }
 
    void set_sh_params( )
    {
        sh->Brush->Color = charged ?
            ( gp == GP_MUST_PASS ? clAqua : clSkyBlue ) :
            ( rp == RP_PASS_WANTED ? clGreen : clRed );
        sh->Hint = "charge_id = " + ( charged ? IntToStr( charge_id ) : String( "not charged" ) );
        sh->Repaint( );
    }
 
    void __fastcall toggle_charge( int _id )
    {
        if ( charged = !charged )
        {
            charge_id = _id;
        }
        else
        {
            charge_id = 0;
        }
        set_sh_params( );
    }
 
    __fastcall t_cell( TComponent * Owner ) :
        TComponent( Owner ),
        charge_id( 0 ),
        just_received( false )
    {
    }
} ;
 
// ---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TButton * btn_step;
    TImage * Image1;
    TShape * shp1;
    TShape * shp1a;
    TShape * shp1b;
    TShape * shp1c;
    TShape * shp1d;
    TShape * shp1e;
    TShape * shp7;
    TShape * shp8;
    TShape * shp8b;
    TShape * shp11;
    TShape * shp9;
    TShape * shp9b;
    TShape * shp9a;
    TShape * shp8a;
    TShape * shp10;
    TShape * shp2b;
    TShape * shp2;
    TShape * shp2a;
    TShape * shp2c;
    TShape * shp4;
    TShape * shp12b;
    TShape * shp12a;
    TShape * shp5;
    TShape * shp12c;
    TShape * shp4a;
    TShape * shp6;
    TShape * shp12d;
    TShape * shp12e;
    TShape * shp12;
    TShape * shp3b;
    TShape * shp3;
    TShape * shp3a;
    TBitBtn * BitBtn1;
    TTimer * tmr1;
    TButton * btn_toggle_tmr;
    TEdit * edt_tmr_interval;
    TButton * btn_clear_charges;
    TTimer *tmr_ani;
 
    void __fastcall btn_stepClick( TObject * Sender );
    void __fastcall shp1MouseDown( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y );
    void __fastcall tmr1Timer( TObject * Sender );
    void __fastcall edt_tmr_intervalChange( TObject * Sender );
    void __fastcall btn_toggle_tmrClick( TObject * Sender );
    void __fastcall btn_clear_chargesClick( TObject * Sender );
    void __fastcall tmr_aniTimer(TObject *Sender);
 
public: // User declarations
 
        typedef std::map < TShape *, t_cell * > t_cells;
 
    t_cells cells;
    int step;
 
 
    bool __fastcall engine_make_step( void );
    void __fastcall recalc_priorities( void );
    __fastcall TForm1( TComponent * Owner );
} ;
C++
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
// ---------------------------------------------------------------------------
bool __fastcall TForm1::engine_make_step( void )
{
    t_neibs accepting_neibs, declinatory_neibs;
    t_cell * receiver;
 
    bool charge_passed_this_step( false );
 
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it, accepting_neibs.clear( ), declinatory_neibs.clear( ) )
    {
        t_cell * cell( it->second );
        for ( t_neibs::iterator neib( cell->neibs.begin( ) ), neib_end( cell->neibs.end( ) );
            cell->charged && !cell->just_received && ( neib != neib_end );
            ++neib )
        {
            t_cell * neib_cell( cells[ * neib ] );
            if ( !neib_cell->charged )
            {
                if ( neib_cell->rp == RP_PASS_WANTED )
                {
                    accepting_neibs.push_back( * neib );
                }
                else
                {
                    declinatory_neibs.push_back( * neib );
                }
            }
        }
        if ( accepting_neibs.size( ) > 0 )
        {
            receiver = cells[ accepting_neibs[ std::rand( ) % accepting_neibs.size( ) ] ];
            cell->pass_charge_to( receiver );
            charge_passed_this_step = true;
        }
        else if ( ( declinatory_neibs.size( ) > 0 ) && ( cell->gp == GP_MUST_PASS ) )
        {
            receiver = cells[ declinatory_neibs[ std::rand( ) % declinatory_neibs.size( ) ] ];
            cell->pass_charge_to( receiver );
            charge_passed_this_step = true;
        }
    }
    recalc_priorities( );
    return charge_passed_this_step;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::recalc_priorities( void )
{
    size_t charged_neibs_count( 0 );
 
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it, charged_neibs_count = 0 )
    {
        t_cell * cell( it->second );
        cell->gp = GP_MAY_PASS;
        cell->rp = RP_PASS_NOT_WANTED;
        for ( t_neibs::iterator neib( cell->neibs.begin( ) ), neib_end( cell->neibs.end( ) );
            neib != neib_end;
            ++neib )
        {
            t_cell * neib_cell( cells[ * neib ] );
            if ( cell->charged && neib_cell->charged )
            {
                cell->gp = GP_MUST_PASS;
            }
            if ( !cell->charged && neib_cell->charged )
            {
                ++charged_neibs_count;
            }
        }
        if ( charged_neibs_count <= 1 )
        {
            cell->rp = RP_PASS_WANTED;
        }
        cell->set_sh_params( );
        cell->just_received = false;
    }
}
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner ) :
    TForm( Owner ),
    step( 0 )
{
    std::srand( std::time( 0 ) );
    // блок заполнения окрестностей ячеек
    // ячейка1
    cells[ shp1 ] = new t_cell( this );
    cells[ shp1 ]->sh = shp1;
    cells[ shp1 ]->neibs << shp1a << shp1b << shp1c << shp1d << shp1e; // список соседей
 
    // ячейка2
    cells[ shp2 ] = new t_cell( this );
    cells[ shp2 ]->sh = shp2;
    cells[ shp2 ]->neibs << shp2a << shp2b << shp2c << shp12a << shp12b;
 
    // ячейка3
    cells[ shp3 ] = new t_cell( this );
    cells[ shp3 ]->sh = shp3;
    cells[ shp3 ]->neibs << shp12e << shp12d << shp3a << shp3b << shp9b;
 
    // ячейка4
    cells[ shp4 ] = new t_cell( this );
    cells[ shp4 ]->sh = shp4;
    cells[ shp4 ]->neibs << shp2a << shp12b << shp12c << shp4a << shp8a;
 
    // ячейка5
    cells[ shp5 ] = new t_cell( this );
    cells[ shp5 ]->sh = shp5;
    cells[ shp5 ]->neibs << shp2c << shp12a << shp12e << shp3b << shp9a;
 
    // ячейка6
    cells[ shp6 ] = new t_cell( this );
    cells[ shp6 ]->sh = shp6;
    cells[ shp6 ]->neibs << shp4a << shp12c << shp12d << shp8b << shp3a;
 
    // ячейка7
    cells[ shp7 ] = new t_cell( this );
    cells[ shp7 ]->sh = shp7;
    cells[ shp7 ]->neibs << shp1c << shp1b << shp9a << shp2b << shp2c;
 
    // ячейка8
    cells[ shp8 ] = new t_cell( this );
    cells[ shp8 ]->sh = shp8;
    cells[ shp8 ]->neibs << shp8a << shp8b << shp1a << shp1b << shp4a;
 
    // ячейка9
    cells[ shp9 ] = new t_cell( this );
    cells[ shp9 ]->sh = shp9;
    cells[ shp9 ]->neibs << shp9a << shp9b << shp1d << shp1e << shp3b;
 
    // ячейка10
    cells[ shp10 ] = new t_cell( this );
    cells[ shp10 ]->sh = shp10;
    cells[ shp10 ]->neibs << shp1b << shp1c << shp2a << shp2b << shp8a;
 
    // ячейка11
    cells[ shp11 ] = new t_cell( this );
    cells[ shp11 ]->sh = shp11;
    cells[ shp11 ]->neibs << shp1a << shp8b << shp1e << shp9b << shp3a;
 
    // ячейка12
    cells[ shp12 ] = new t_cell( this );
    cells[ shp12 ]->sh = shp12;
    cells[ shp12 ]->neibs << shp12a << shp12b << shp12c << shp12d << shp12e;
 
    // ячейка1a
    cells[ shp1a ] = new t_cell( this );
    cells[ shp1a ]->sh = shp1a;
    cells[ shp1a ]->neibs << shp8b << shp1b << shp1e << shp1 << shp8 << shp11;
 
    // ячейка1b
    cells[ shp1b ] = new t_cell( this );
    cells[ shp1b ]->sh = shp1b;
    cells[ shp1b ]->neibs << shp1a << shp1c << shp8a << shp1 << shp8 << shp10;
 
    // ячейка1c
    cells[ shp1c ] = new t_cell( this );
    cells[ shp1c ]->sh = shp1c;
    cells[ shp1c ]->neibs << shp1b << shp1d << shp2b << shp1 << shp7 << shp10;
 
    // ячейка1d
    cells[ shp1d ] = new t_cell( this );
    cells[ shp1d ]->sh = shp1d;
    cells[ shp1d ]->neibs << shp1c << shp1e << shp9a << shp1 << shp9 << shp7;
 
    // ячейка1e
    cells[ shp1e ] = new t_cell( this );
    cells[ shp1e ]->sh = shp1e;
    cells[ shp1e ]->neibs << shp1d << shp1a << shp9b << shp1 << shp9 << shp11;
 
    // ячейка2a
    cells[ shp2a ] = new t_cell( this );
    cells[ shp2a ]->sh = shp2a;
    cells[ shp2a ]->neibs << shp2b << shp8a << shp12b << shp2 << shp10 << shp4;
 
    // ячейка2b
    cells[ shp2b ] = new t_cell( this );
    cells[ shp2b ]->sh = shp2b;
    cells[ shp2b ]->neibs << shp2a << shp2c << shp1c << shp2 << shp10 << shp7;
 
    // ячейка2c
    cells[ shp2c ] = new t_cell( this );
    cells[ shp2c ]->sh = shp2c;
    cells[ shp2c ]->neibs << shp2b << shp9a << shp12a << shp2 << shp5 << shp7;
 
    // ячейка3a
    cells[ shp3a ] = new t_cell( this );
    cells[ shp3a ]->sh = shp3a;
    cells[ shp3a ]->neibs << shp12d << shp8b << shp9b << shp3 << shp6 << shp11;
 
    // ячейка3b
    cells[ shp3b ] = new t_cell( this );
    cells[ shp3b ]->sh = shp3b;
    cells[ shp3b ]->neibs << shp12e << shp9a << shp9b << shp5 << shp9 << shp3;
 
    // ячейка4a
    cells[ shp4a ] = new t_cell( this );
    cells[ shp4a ]->sh = shp4a;
    cells[ shp4a ]->neibs << shp12c << shp8a << shp8b << shp4 << shp6 << shp8;
 
    // ячейка8a
    cells[ shp8a ] = new t_cell( this );
    cells[ shp8a ]->sh = shp8a;
    cells[ shp8a ]->neibs << shp2a << shp1b << shp4a << shp4 << shp8 << shp10;
 
    // ячейка8b
    cells[ shp8b ] = new t_cell( this );
    cells[ shp8b ]->sh = shp8b;
    cells[ shp8b ]->neibs << shp1a << shp3a << shp4a << shp11 << shp8 << shp6;
    // ячейка9a
    cells[ shp9a ] = new t_cell( this );
    cells[ shp9a ]->sh = shp9a;
    cells[ shp9a ]->neibs << shp1d << shp2c << shp3b << shp9 << shp7 << shp5;
 
    // ячейка9b
    cells[ shp9b ] = new t_cell( this );
    cells[ shp9b ]->sh = shp9b;
    cells[ shp9b ]->neibs << shp1e << shp3a << shp3b << shp3 << shp9 << shp11;
 
    // ячейка12a
    cells[ shp12a ] = new t_cell( this );
    cells[ shp12a ]->sh = shp12a;
    cells[ shp12a ]->neibs << shp12b << shp12e << shp2c << shp12 << shp2 << shp5;
 
    // ячейка12b
    cells[ shp12b ] = new t_cell( this );
    cells[ shp12b ]->sh = shp12b;
    cells[ shp12b ]->neibs << shp12a << shp12c << shp2a << shp12 << shp2 << shp4;
 
    // ячейка12c
    cells[ shp12c ] = new t_cell( this );
    cells[ shp12c ]->sh = shp12c;
    cells[ shp12c ]->neibs << shp12b << shp12d << shp4a << shp12 << shp4 << shp6;
 
    // ячейка12d
    cells[ shp12d ] = new t_cell( this );
    cells[ shp12d ]->sh = shp12d;
    cells[ shp12d ]->neibs << shp12c << shp12e << shp3a << shp12 << shp3 << shp6;
 
    // ячейка12e
    cells[ shp12e ] = new t_cell( this );
    cells[ shp12e ]->sh = shp12e;
    cells[ shp12e ]->neibs << shp12d << shp12a << shp3b << shp12 << shp5 << shp3;
    // конец блока заполнения окрестностей ячеек
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::btn_stepClick( TObject * Sender )
{
    Caption = "Шаг " + IntToStr( ++step );
    if ( !engine_make_step( ) )
    {
        ShowMessage( "Stable condition reached." );
    }
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::shp1MouseDown( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y )
{
    static int charge_id( 1 );
    cells[ static_cast < TShape * > ( Sender ) ]->toggle_charge( charge_id++ );
    recalc_priorities( );
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::tmr1Timer( TObject * Sender )
{
    Caption = "Шаг " + IntToStr( ++step );
    if ( !engine_make_step( ) )
    {
        tmr1->Enabled = false;
        ShowMessage( "Stable condition reached." );
    }
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::edt_tmr_intervalChange( TObject * Sender )
{
    int interval;
    if ( TryStrToInt( edt_tmr_interval->Text, interval ) )
    {
        tmr1->Interval = interval;
    }
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::btn_toggle_tmrClick( TObject * Sender )
{
    tmr1->Enabled = !tmr1->Enabled;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::btn_clear_chargesClick( TObject * Sender )
{
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it )
    {
        it->second->charged = false;
    }
    step = 0;
    recalc_priorities( );
}
Добавил еще случайность выбора подходящей ячейки из окрестности, условие стабильности состояния зарядов, таймер, хинт номера заряда для ячеек. Подправил архитектуру. Логика работает на ура.
Проект - VCL forms test app16.06.14.rar
Экзешник в релизе - Project1.rar

Чуть позже прикольнусь с анимацией... с налету за пять минут не вышло.
Миниатюры
Клеточный автомат блуждания частицы по поверхности фуллерена C60  
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
17.06.2014, 10:41  [ТС]
))) мощная
Цитата Сообщение от BRcr Посмотреть сообщение
Финальная версия
)))))))))) главное теперь разобраться)))) сколько примочек, находит ли все-таки эту "магическую конфигурацию" автомат..???

Добавлено через 1 минуту
Цитата Сообщение от BRcr Посмотреть сообщение
Чуть позже прикольнусь с анимацией.
да зачем..??? и так пойдет думаю))))
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2014, 19:44
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
сколько примочек, находит ли все-таки эту "магическую конфигурацию" автомат..???
Не знаю. В существующем виде программы это выяснять долговато будет по мне. Для этого проще перебор комбинаций брутом сделать.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
18.06.2014, 22:04  [ТС]
вручную проверил - были моменты, когда все заряды стали с приоритетом 4)) ход проги продолжился! затем решил сделать условие остановки, типа этого
C++
1
2
3
4
    if ( cell->gp == GP_MAY_PASS )
    {      !engine_make_step( )
        ShowMessage( "Magic configuration is found!" );
    }
чтоб на этом прога остановилась. только че-то не получилось...

Добавлено через 16 минут
может посоветуешь что-нибудь..???
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2014, 22:17
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
были моменты, когда все заряды стали с приоритетом 4)) ход проги продолжился!
Сформулируй, пожалуйста, как можно четче условие стабильности состояния системы, принимая во внимание вот эти самые правила перехода:
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
1) приоритет 3(переход обязателен) - если граничат 2 заряженные ячейки. если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6), если нет заряженного соседа - то желателен( приоритет 5). Если сосед с приоритетом 5, то переходим туда, если их несколько с приоритетом 5 - случайно в любую их них! если сосед с приоритетом 6 (не желателен переход) - то переходим, т.к. переход обязательный, если их несколько - также переходим случайным образом;
2) приоритет 4 ( переход возможен, но не обязателен)- если нет заряженных соседей!
Надо проверять, чтоб несколько ячеек не претендовали на одну ячейку за 1 такт! 1 такт - это переход всех ячеек, с приоритетом 3! завершив 1 такт - снова расставляем приоритеты и т.д.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
18.06.2014, 22:42  [ТС]
))) вот из документа Word? пункт 6:
"Цель моделирования — определение магических чисел и магических конфигураций. Магическая конфигурация — это стационарное состояние, в котором переход зарядов в соседние ячейки имеет приоритет 4 для всех зарядов. Магическое число — это число заряженных ячеек в начальный момент времени, для которого за конечное число шагов устанавливается магическая конфигурация."
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2014, 23:24
Это условие поставить легко и неинтересно. У меня более жесткое стоит - конец, это когда каждую заряженную ячейку окружают исключительно красные, незаряженные ячейки. Вот это я понимаю - магическое...
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
19.06.2014, 00:08  [ТС]
ахааахх а про мое(по документу) условие, которое легкое и неинтересное, че скажешь? где моя ошибка?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.06.2014, 00:14
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
где моя ошибка?
Где-то далеко в прошлом, там, где тебе следовало читать книжки по программированию, а не балдеть.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
20.06.2014, 18:45  [ТС]
процесс остановил, всунув
C++
1
2
3
if ( cell->gp==GP_MAY_PASS)
                { charge_passed_this_step=false;
                 }
в engine_make_step. Появилось сообщение о том, что найдена стабильная конфигурация, только вот заряды совершили еще 1 шаг. Кроме этого, не все заряды с приоритетом 4...((( что делать Владимир???))
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
23.06.2014, 12:23  [ТС]
..так что там на счет моего условия Владимир - честно, уже не знаю как его сформулировать... вот этим условием четко останавливается, сообщение появляется, только вот не все заряды с 4 приоритетом(((
C++
1
2
3
4
 if (cell->rp==RP_PASS_NOT_WANTED)
                tmr1->Enabled = !tmr1->Enabled;
                charge_passed_this_step = false;
                }
Добавлено через 5 минут
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.06.2014, 18:11
Вот такой будет фикс на твое условие:
C++
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
bool __fastcall TForm1::check_condition( void )
{
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it )
    {
        if ( it->second->charged && it->second->gp == GP_MUST_PASS )
        {
            return false;
        }
    }
    return true;
}
 
// ---------------------------------------------------------------------------
bool __fastcall TForm1::engine_make_step( void )
{
    if ( check_condition( ) )
    {
        return false;
    }
 
    t_neibs accepting_neibs, declinatory_neibs;
    t_cell * receiver;
 
    // bool charge_passed_this_step( false );
 
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it, accepting_neibs.clear( ), declinatory_neibs.clear( ) )
    {
        t_cell * cell( it->second );
        for ( t_neibs::iterator neib( cell->neibs.begin( ) ), neib_end( cell->neibs.end( ) );
            cell->charged && !cell->just_received && ( neib != neib_end );
            ++neib )
        {
            t_cell * neib_cell( cells[ * neib ] );
            if ( !neib_cell->charged )
            {
                if ( neib_cell->rp == RP_PASS_WANTED )
                {
                    accepting_neibs.push_back( * neib );
                }
                else
                {
                    declinatory_neibs.push_back( * neib );
                }
            }
        }
        if ( accepting_neibs.size( ) > 0 )
        {
            receiver = cells[ accepting_neibs[ std::rand( ) % accepting_neibs.size( ) ] ];
            cell->pass_charge_to( receiver );
            // charge_passed_this_step = true;
        }
        else if ( ( declinatory_neibs.size( ) > 0 ) && ( cell->gp == GP_MUST_PASS ) )
        {
            receiver = cells[ declinatory_neibs[ std::rand( ) % declinatory_neibs.size( ) ] ];
            cell->pass_charge_to( receiver );
            // charge_passed_this_step = true;
        }
    }
    recalc_priorities( );
    // return charge_passed_this_step;
    return true;
}
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
23.06.2014, 21:03  [ТС]
не думал я, что все так серьезно))))))) я бы доооолгоо-доооолгооо сидел и втыкал маленькие кусочки кода туда и сюда выручил очень сильно ты меня)) да воздаст тебе за это Всевышний благом и да откроет Он тебе истину)) я вспомню тебя в своих молитвах )))
0
Технофашист
229 / 217 / 11
Регистрация: 11.03.2009
Сообщений: 887
24.01.2015, 11:23
В следующий раз, можете послать их в ИВМиМГ СО РАН. Там есть лаборатория, которая и занимается подобными проблемами. Лаборатория управляет О.Л. Бандман. Это так, на будущее. Ибо профессионалы должны заниматься своим делом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2015, 11:23
Помогаю со студенческими работами здесь

Клеточный автомат на торе
Добрый день! Нужно сделать клеточный автомат, который натянут на тор. Движок уже имеется (с учёт безграничности тора), остаётся только...

клеточный автомат жизни
Нужна ваша помощь. Необходимо заполнить матрицу 25 на 25 0 и 1. По краям матрицы 0. 0 - мертвая клетка 1 - живая клетка Если у...

Одномерный клеточный автомат
На рисунке показано несколько поколений одномерного клеточного автомата. У каждой клетки только два соседа — слева и справа, а поле...

Доработать клеточный автомат
Здравствуйте. Есть задание сделать клеточный автомат. Проект прикреплю. Как сделать так , чтобы по нажатию кнопки клетки закрашивались...

Клеточный автомат Винера-Розенблюта
Рябят, сто не так с кодом? Где ошибка? Пишет &quot; Встречено '.', а ожидалось ';'&quot; это в самом конце где END. Может еще что -то не так. Кто...


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

Или воспользуйтесь поиском по форуму:
75
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru