?? tools.cpp
字號:
//該函數(shù)實現(xiàn)本程序中一些常用的工具函數(shù)
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include "FuzzyNN.h"
//檢測內(nèi)存分配是否成功
void mcheck(int *p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(double *p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(ProtoNode *p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(ExemNode *p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(int **p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(double **p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(ProtoNode **p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(ExemNode **p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(FuzzyNum *p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
void mcheck(FuzzyNum **p)
{
if(p==NULL)
{
cout<<"空間分配失敗"<<endl;
exit(1);
}
}
//計算一個梯形模糊集的中心
double coa(FuzzyNum w)
{
return ((w.w1+w.w2)/2+(w.b-w.a)/4);
}
//計算一個梯形模糊集的長度
double len(FuzzyNum w)
{
return ((w.w2-w.w1)+(w.a+w.b)/2);
}
//計算一個exemplar結(jié)點的大小
double size(ExemNode E,int L)
{
double s=0;
int i;
for(i=1;i<=L;i++)
s+=len((E.v)[i]);
return s/L;
}
//產(chǎn)生給定范圍的隨機數(shù)
double frand(double low,double high)
{
srand((unsigned)time(NULL));
return ((high-low)*rand()/RAND_MAX+low);
}
//產(chǎn)生給定范圍的隨機序列
void myrand(int num,int *seq,int low,int high)
{
int *flag;
flag=new int[high-low+1];
mcheck(flag);
int i;
for(i=0;i<=high-low;i++)
flag[i]=0;
srand((unsigned)time(NULL));
int count=0;
int temp;
while(count<num)
{
temp=(rand())%(high-low)+low;
if(flag[temp-low]==0)
{
count++;
seq[count]=temp;
flag[temp-low]=1;
}
}
delete []flag;
}
int vrand(int low,int high)
{
srand((unsigned)time(NULL));
return ((rand())%(high-low)+low);
}
void myrand(int num,int *seq)
{
int *internal;
internal=new int[num+1];
mcheck(internal);
int i;
int temp;
int index;
for(i=1;i<=num;i++)
internal[i]=i;
for(i=num;i>=2;i--)
{
index=vrand(1,i);
temp=internal[index];
internal[index]=internal[i];
internal[i]=temp;
}
for(i=1;i<=num;i++)
seq[i]=internal[num+1-i];
delete []internal;
}
//計算一個數(shù)組的和
int sum(int *a,int n)
{
int i;
int s=0;
for(i=1;i<=n;i++)
s+=a[i];
return s;
}
//下面這個函數(shù)是為了測試的方便而寫的
void WeightOut(ProtoNode *prototype,int N,int L)
{
int i,j;
for(j=1;j<=N;j++)
{
cout<<"第"<<j<<"個prototype結(jié)點的權(quán)值:"<<endl;
for(i=1;i<=L;i++)
{
cout<<"W["<<i<<"]"<<"["<<j<<"]=(";
cout<<(prototype[j].w)[i].w1<<",";
cout<<(prototype[j].w)[i].w2<<",";
cout<<(prototype[j].w)[i].a<<",";
cout<<(prototype[j].w)[i].b<<")";
cout<<"LR"<<endl;
}
cout<<"------------------------------------"<<endl;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -