#include "3341-simulator.cpp" struct automat { VAR(x, 0, 3); // role: 1=l, 2=p, 3=l během výpočtu, 0=ostatní VAR(y, 0, 1); // výstřel VAR(a, 0, 3); // signál A: kolik taktů zbývá do předání dál VAR(aa, 0, 3); // signál A' VAR(b, 0, 3); // signál B automat *L, *P; // sousední automaty automat() { x = y = a = aa = b = 0; L = P = NULL; } void vypis() { printf("x=%d y=%d a=%d aa=%d b=%d", x, y, a, aa, b); } void krok() { // Na počátku vyšleme signály A a B. if (x == 1) { x = 3; a = 2; b = 3; } // Signál A putuje vpravo rychlostí 1, napravo se odrazí a je z něj A'. if (a > 0) a--; if (L && L->a == 1) a = 1; if (x == 2 && a > 0) { a = 0; aa = 2; } // Signál A' putuje vlevo rychlostí 1. if (aa > 0) aa--; if (P && P->aa == 1) aa = 1; // Signál B putuje vpravo rychlostí 1/2. if (b > 0) b--; if (L && L->b == 1) b = 2; // Když A' a B doputují na protilehlý konec, odpálíme. if (x == 2 && b > 0) { b = 0; y = 1; } if (x == 3 && aa > 0) { aa = 0; y = 1; } } }; struct pokus : simulator { pokus(int N) : simulator(N) { } void ovladani() { if (cas == 0) { automaty[0].x = 1; automaty[N-1].x = 2; } } }; int main() { pokus p(10); p.simuluj(100); }