#include #include #include using namespace std; int t = -1; class shiftreg { public: vector state, seq; int period, time; int nextin; shiftreg(int sz, int pd, string s) : state(vector(sz)), seq(vector(sz)), period(pd), nextin(0) { for (int i = 0 ; i < sz ; i++) { seq[i] = (s[sz - i - 1] == '1'); state[i] = false; } } void tick() { if (t % period == 0) { shift(); } } void shift() { for (int i = state.size() - 1 ; i > 0 ; i--) { state[i] = state[i-1]; } state[0] = seq[nextin++]; if (nextin == state.size()) { nextin = 0; } } void print() { for (int i = 0 ; i < state.size() ; i++) { cout << state[i]; } cout << endl; } bool get(int i) { return state[i]; } }; char horiz(bool bit) { return bit ? '_' : ' '; } char vert(bool bit) { return bit ? '|' : ' '; } void printLED(bool i0, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) { cout << ' ' << horiz(i5) << ' ' << ' ' << endl; cout << vert(i6) << horiz(i3) << vert(i4) << ' ' << endl; cout << vert(i1) << horiz(i0) << vert(i2) << ' ' << endl; cout << endl; } void printLED0(bool i5) { cout << ' ' << horiz(i5) << ' ' << ' '; } void printLED1(bool i3, bool i4, bool i6) { cout << vert(i6) << horiz(i3) << vert(i4) << ' '; } void printLED2(bool i0, bool i1, bool i2) { cout << vert(i1) << horiz(i0) << vert(i2) << ' '; } int main() { shiftreg U1(48, 1, "111100101110001110001110100000101110000000110000"); shiftreg U2(32, 2, "10000010101110101011111101000111"); shiftreg U3(32, 2, "11000111101011101010010100110001"); // shiftreg U4(4, 1, "1101"); for ( ; t < 1000 ; t++) { int j; // U1.print(); U2.print() ; U3.print(); U4.print(); // printLED(U3.get(1), U3.get(0), U2.get(1), U2.get(0), // U1.get(2), U1.get(1), U1.get(0)); for (j = 0 ; j < 16 ; j++) { /* 5 */ printLED0(U1.get(j * 3 + 1)); } cout << endl; for (j = 0 ; j < 16 ; j++) { /* 3 4 6 */ printLED1(U2.get(j * 2), U1.get(j * 3 + 2), U1.get(j * 3)); } cout << endl; for (j = 0 ; j < 16 ; j++) { /* 0 1 2 */ printLED2(U3.get(j * 2 + 1), U3.get(j * 2), U2.get(j * 2 + 1)); } cout << endl << "[" << t << "]" << endl; U1.tick(); U2.tick(); U3.tick(); // U4.tick(); } return 0; }