next up previous contents
Next: A.6 関数,変数定義用ヘッダファイル (srh2.h) Up: 付 録A サーチアクセスプログラム Previous: A.4 サーチアクセス関数用ソースファイル (srh2_srh.c)

A.5 その他の関数用ソースファイル (srh2_mf.c)

 

検索に成功したかどうかを調べる関数と, ウインドウを表示する関数についてのソースファイルである。

この関数が別のファイルに独立しているのは, この部分のみを変更したプログラムを用意して, コンパイルさせたことがあるためである。 したがって,このような部分的に変更したプログラムを作成する必要がなければ, 他のソースファイルと一緒にしても問題はない。

#include "/home/tsuge/xforms/FORMS/forms.h"
#include "srh2.h"

#include "srh2_sms.h"

extern int fail;/* それぞれの検索パターンについて数えて
                   一番早く失敗したのが何回目の初期パターンかを表す */

extern int search;/* 何番目の検索パターンを検索しているかを示す */

extern int kai;/* 何番目の初期パターンで検索しているかを示す */
extern int kai_max;/* 離散的時間最大値
                      (この時間までに想起できなかったら失敗とみなす) */

extern double sei_hei;/* 想起成功率 */
extern double t_hei;/* 平均想起時間 */

/* 想起に成功したかどうかの判定・ファイル出力 */
jikosouki(int j, int levo[], int out_in[][U], FILE *fd)
{
  register int i;
  char fail_times[5];/* fail+1 を文字列として格納 */

  if(kai != kai_max){
    /* 何らかのパターンが想起された場合 */
    for(i=0; i<U; i++)
      if(out_in[search][i]*5 != levo[i]){
        /* 目的とは違うパターンが検索された場合,-2 を出力 */
        fprintf(fd,"%5d",-2);
        goto hyouji;
      }
    /* 正しいパターンが想起された場合,想起時間を出力 */
    fprintf(fd,"%5d",kai-SOUKITIME);
    /* 成功率,想起時間平均の計算に用いる値 */
    sei_hei+=1.0;/* 成功数 */
    t_hei+=(double)(kai-SOUKITIME);/* 想起時間の和 */
    goto kaigyou;
  }
  else
    /* Max Times で指定した回数までに想起されなかった場合,-1 を出力 */
    fprintf(fd,"%5d",-1);
 hyouji:
  if(fail==-1 || fail>j){
    /* Failure ランプに赤を点灯し,fail+1 の値を表示 */
    fail=j;
    fl_set_object_color(f_sg,FL_RED,FL_COL1);
    sprintf(fail_times,"%d",fail+1);
    fl_set_object_label(f_tm,fail_times);
  }
  /* 出力したデータ数が 1 行 10 個ずつになるように改行する */
 kaigyou:
  if(j%10 == 9)
    fprintf(fd,"\n");
}

/* ウインドウの表示名 */
fsform()
{
  fl_show_form(srh2,FL_PLACE_CENTER,FL_FULLBORDER,"srh2");
}



Deguchi Toshinori
1998年03月12日 (木) 16時16分01秒 JST