Регистрация | Вход
/** Minibrain 6. 0. 0* * Kashchei* * Компиляция* %d - путь к исходнику* %f - имя исходника* %e - имя объектного фалйла* lib_Minibrain.so - имя результата компиляции библиотеки* * gcc -fPIC -c "%f"* gcc -shared -o "%d/lib_%e.so" "%d/%e.o"*/#include <stdlib.h>#include <limits.h>long long max;struct neurons{ unsigned char signal; unsigned char value; unsigned char type; unsigned char weight; _Bool mode; long long ID; }*neuron;//таблица нейронов_Bool i(long long number, _Bool m){ if(m == 0)//выделение памяти под таблицу нейронов { if((neuron = malloc(number * sizeof(struct neurons))) == NULL) return 1; max = number; } else{ free(neuron); max = 0; }//освобождение памяти return 0;}struct neurons* h(struct neurons* src){ #define dst neuron[src->ID] unsigned char difVal = src->value / (dst.value / UCHAR_MAX);//совпадение значений unsigned char difType;//совпадение типов if(src->type == dst.type) difType = UCHAR_MAX; else difType = 0; if(src->mode == 0) { dst.signal = (dst.signal + src->signal + difVal + difType) / 4;//сложение сигналов } else { dst.signal = (dst.signal + src->signal + difVal + difType) / src->weight; } if( src->signal > 0 && src->signal < UCHAR_MAX)//запоминание { if(src->weight < UCHAR_MAX) src->weight++; } else if(src->signal == UCHAR_MAX)//Слишком большой сигнал { if(src->weight > 0) src->weight--;//неправильное действие dst.signal = dst.signal / src->weight;//торможение нейрона } if(src->weight == 0) { if(++src->ID == max) { src->ID = 0; src->mode++; } } return &dst;}