home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma45.dms / ma45.adf / Listingi / MagazynAMIGA3 / SieciNeuronowe.c < prev    next >
C/C++ Source or Header  |  2002-10-23  |  2KB  |  140 lines

  1. #include <exec/types.h>
  2. #include <stdio.h>
  3.  
  4. #define Xsize 10      /*     rozmiar sieci neuronowej    */
  5. #define Ysize 10
  6. #define Ilosc 10*10   /* iloôê iliteracji w kaûdym kroku */
  7.  
  8. char     neuron[Xsize][Ysize], nazwa_pliku[108];
  9. char    synaps[Xsize][Ysize][Xsize][Ysize];
  10.  
  11. BOOL Wczytaj( void )
  12. {
  13.     UBYTE     x,y;
  14.     char    znak;
  15.     FILE    *fp;
  16.  
  17. if(!(fp=fopen(nazwa_pliku, "r")))
  18.     return FALSE;
  19.  
  20. for( y=0; y<Ysize; y++ )         /* ustawia wszystkie */
  21.     for( x=0; x<Xsize; x++ )     /*    neurony jako   */
  22.     neuron[x][y]=-1;         /*     nieaktywne    */
  23.  
  24. for( y=0; y<Ysize; y++ )
  25.     for( x=0; x<=Xsize; x++ )
  26.         {
  27.         znak=getc( fp );
  28.         if( znak=='*' )
  29.             neuron[x][y]=1;
  30.         else if( znak==' ' )
  31.             neuron[x][y]=-1;
  32.         else if( znak=='\n' )
  33.             break;
  34.         else if( znak==EOF )
  35.             return TRUE;
  36.         }
  37. fclose( fp );
  38. }
  39.  
  40. void Ucz( void )
  41. {
  42.     UBYTE x,y,x1,y1;
  43.  
  44. for( x=0; x<Xsize; x++ )
  45.     for( y=0; y<Ysize; y++ )
  46.     {
  47.         for( x1=0; x1<Xsize; x1++ )
  48.             for( y1=0; y1<Ysize; y1++ )
  49.                 if( neuron[x][y]==neuron[x1][y1] )
  50.                     synaps[x][y][x1][y1]++;
  51.                 else
  52.                     synaps[x][y][x1][y1]--;
  53.         synaps[x][y][x][y]=0;
  54.     }
  55. }
  56.  
  57. void krok( void )
  58. {
  59.     UBYTE i,x,y,x1,y1;
  60.     int suma;
  61.  
  62. srand( time( NULL ) );
  63. for( i=0; i<Ilosc; i++ )
  64.     {
  65.     x=rand()%(Xsize*Ysize);
  66.     y=x%Ysize;
  67.     x=x/Ysize;
  68.     for( suma=0,x1=0; x1<Xsize; x1++ )
  69.         for( y1=0; y1<Ysize; y1++ )
  70.             suma+=neuron[x1][y1]*synaps[x][y][x1][y1];
  71.     if( suma>0 )
  72.         neuron[x][y]=1;
  73.     else
  74.         neuron[x][y]=-1;
  75.     }
  76. }
  77.  
  78. void Wyswietl( void )
  79. {
  80.     UBYTE x,y;
  81.  
  82. for( y=0; y<Ysize; y++ )
  83.     {
  84.     for( x=0; x<Xsize; x++ )
  85.         if( neuron[x][y]==1 )    putchar('*');
  86.         else                    putchar(' ');
  87.     putchar('\n');
  88.     }
  89. }
  90.  
  91. void main( void )
  92. {
  93.     UBYTE x,y,x1,y1;
  94.  
  95. for( x=0; x<Xsize; x++ )
  96.     for( y=0; y<Ysize; y++ )
  97.         for( x1=0; x1<Xsize; x1++ )
  98.             for( y1=0; y1<Ysize; y1++ )
  99.             synaps[x][y][x1][y1]=0;
  100.  
  101. while( TRUE )
  102.     {
  103.     fflush( NULL );
  104.     printf( ">>>" );
  105.     switch( getchar() )
  106.         {
  107.         case 'u':
  108.             printf("podaj nazwe pliku:" );
  109.             scanf("%s", nazwa_pliku);
  110.             if( Wczytaj( ) )
  111.                 {
  112.                 Ucz( );
  113.                 Wyswietl( );
  114.                 }
  115.             else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
  116.             break;
  117.  
  118.         case 'r':
  119.             printf("podaj nazwe pliku:" );
  120.             scanf("%s", nazwa_pliku);
  121.             if( Wczytaj( ) )
  122.             Wyswietl( );
  123.             else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
  124.         break;
  125.  
  126.         case 'k':
  127.             krok( );
  128.             Wyswietl( );
  129.             break;
  130.  
  131.         case 'w':
  132.             exit( 0 );
  133.  
  134.         default:
  135.             printf("\nu -ucz\nr -rozpoznaj\nk -krok\nw -wyjôcie\n");
  136.         }
  137.     }
  138. }
  139.  
  140.