Регистрация | Вход
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <limits.h>typedef unsigned char byte;typedef unsigned short ushrt;#define NEURON_t byte#define NEURON_n UCHAR_MAX#define LINK_n NEURON_n - 1typedef struct{ NEURON_t s; NEURON_t t; NEURON_t l[LINK_n];}Neuron;typedef struct{ Neuron n[NEURON_n];}Memory;#define SRC m -> n[i]#define DST m -> n[SRC.l[n]]void handler(byte in, Memory* m){ m -> n[in].s = (m -> n[in].t > 0) ? m -> n[in].t : 1; int i, n; for(i = 0; i < NEURON_n ; i++){ for(n = 0; n < LINK_n; n++){ if(SRC.s >= SRC.t) DST.s++; if(DST.s == 0 || SRC.l[n] == i) SRC.l[n]++; if(SRC.t < SRC.s) SRC.t++; if(SRC.t > SRC.s) SRC.t--; } SRC.s = 0; }}//----------------------------------------------------------------------void print(Memory* m){ puts("\n"); int i, n; for(i = 0; i < 16; i++){ for(n = 0; n < 16; n++) printf(" %d", m -> n[i * 8 + n].s); puts("\n"); } puts("\n");}//----------------------------------------------------------------------void clearall(Memory* m){ int i, n; for(i = 0; i < NEURON_n; i++){ m -> n[i].s = 0; m -> n[i].t = 0; for(n = 0; n < LINK_n; n++) m -> n[i].l[n] = 0 + rand() % 255; }}//----------------------------------------------------------------------int main(void){ Memory m; clearall(&m); int qst; while(1){ printf(">> "); scanf("%d", &qst); if(qst == 0) clearall(&m); else handler(qst, &m); system("clear"); print(&m); } return 0;}