Nuronをつくる
NuronはList(もどきを保持していて)ListはNuronを保持することができます。 これを実装してみるには?
とりあえず、data_sを保持するようにする。
./nuron.h

typedef struct nuron_s *Nuron;
typedef void (*inputNuron)(Nuron);
typedef void (*outputNuron)(Nuron);

struct nuron
{
  struct data_s data;
  inputNuron input;
  outputNuron output;
};


./nuron.c

Nuron newNuron()
{
  Nuron nuro = (Nuron)malloc(sizeof( struct nuron_s));
  nuro->data = *newData();
  nuro->nurons = newList();
  nuro->input = _input;
  nuro->output= _output;
  return nuro;
}


./main
int main()
{
....
  List list = newList();
  list->add(list,(Data)newNuron());
.... 

という感じでよいのだろうか? となると、Dataオブジェクトはデーターを加えたりする機能専門といったところだろうか。
Nuron
 面倒だか、Nuronでのaddもしっかり作っておこう。Getといったものも作らなくては、  そのまえに、Listオブジェクトに nextを持たせる。
 
  list->top();
  while((temp = list->next(list)) != NULL)
    {
      printf("%d\n",temp->nuro);
    }
  
↑全データーを表示がこんなにシンプルに書ける。
./ list.c

Data _nextList(List list)
{
  Data temp;
  temp = list->point;
  if(list->point->right !=NULL){
    list->point = list->point->right;
    return temp;
  }else
    {
      return NULL;
    }
}

int _topList(List list)
{
  list->point = list->start;
}


List newList()
{
  List list;
  list = (List)malloc(sizeof(struct list_s));
  list->start = list->end = list->point = list->Item = newData();
  list->next =(nextList)_nextList;
  list->add  =(addList)_addList;
  list->top  =(topList)_topList;
  return list;
}

ニューロンを作成する
#include"list.h"

typedef struct nuron_s *Nuron;
typedef void (*outputNuron)(Nuron);
typedef void (*inputNuron)(Nuron);
typedef void (*setNuron)(Nuron,int);
typedef void (*setShiNu)(Nuron,double);

struct nuron_s
{
  struct data_s data;
  List nurons;
  List w;
  int s;
  double shit;
  setNuron set;
  outputNuron output;
  inputNuron  input;
  setShiNu  set_shi;
};


void _input(Nuron nuro)
{
  List n = nuro->nurons;
  List ws = nuro->w;

  Nuron nuron;
  Data w;

  double Sum = 0.0;
    while(
      (nuron = (Nuron)n->next(n)) != NULL
      &&(w = (Data)ws->next(ws))  != NULL
          )
    {
     Sum += nuron->s*w->nuro - nuron->shit;
    };

  if(Sum > 0){ nuro->s = 1;}
  if(Sum < 0){ nuro->s = 0;}
}

こんな感じソース

戻る

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル